Fix client reporting of 64 bit files.
authorJeremy Allison <jra@samba.org>
Tue, 10 Dec 2002 23:44:33 +0000 (23:44 +0000)
committerJeremy Allison <jra@samba.org>
Tue, 10 Dec 2002 23:44:33 +0000 (23:44 +0000)
Jeremy.

source/include/client.h
source/include/includes.h
source/libsmb/clilist.c

index 17fd150065864a73c320c61fdfae93b8842c8d36..853ee7ae42b1c1fd17466bdadadb955971c509ba 100644 (file)
@@ -35,7 +35,7 @@
 
 typedef struct file_info
 {
-       SMB_OFF_T size;
+       SMB_BIG_UINT size;
        uint16 mode;
        uid_t uid;
        gid_t gid;
index 395b456fbac4ec1396cbe202e0676454868347f7..87b7e02cbf8fe3b1361fb1a8ffd11b97d94c1bf5 100644 (file)
@@ -590,10 +590,14 @@ typedef int socklen_t;
 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
 #define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,(v)&0xFFFFFFFF), SIVAL(p,ofs,(v)>>32))
 #define IVAL_TO_SMB_OFF_T(buf,off) ((SMB_OFF_T)(( ((SMB_BIG_UINT)(IVAL((buf),(off)))) & ((SMB_BIG_UINT)0xFFFFFFFF) )))
+#define IVAL2_TO_SMB_BIG_UINT(buf,off) ( (((SMB_BIG_UINT)(IVAL((buf),(off)))) & ((SMB_BIG_UINT)0xFFFFFFFF)) | \
+               (( ((SMB_BIG_UINT)(IVAL((buf),(off+4)))) & ((SMB_BIG_UINT)0xFFFFFFFF) ) << 32 ) )
 #else 
 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
 #define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,v),SIVAL(p,ofs,0))
 #define IVAL_TO_SMB_OFF_T(buf,off) ((SMB_OFF_T)(( ((uint32)(IVAL((buf),(off)))) & 0xFFFFFFFF )))
+#define IVAL2_TO_SMB_BIG_UINT(buf,off) ( (((SMB_BIG_UINT)(IVAL((buf),(off)))) & ((SMB_BIG_UINT)0xFFFFFFFF)) | \
+                               (( ((SMB_BIG_UINT)(IVAL((buf),(off+4)))) & ((SMB_BIG_UINT)0xFFFFFFFF) ) << 32 ) )
 #endif
 
 /*
index 1616d46bf15d194b8a7f463588885b8394f31758..4a1737af497fb3acb6bc0947fb9eb91a712b815e 100644 (file)
@@ -48,7 +48,7 @@ static int interpret_long_filename(struct cli_state *cli,
                        finfo->ctime = make_unix_date2(p+4);
                        finfo->atime = make_unix_date2(p+8);
                        finfo->mtime = make_unix_date2(p+12);
-                       finfo->size = IVAL_TO_SMB_OFF_T(p,16);
+                       finfo->size = IVAL(p,16);
                        finfo->mode = CVAL(p,24);
                        len = CVAL(p, 26);
                        p += 27;
@@ -69,7 +69,7 @@ static int interpret_long_filename(struct cli_state *cli,
                        finfo->ctime = make_unix_date2(p+4);
                        finfo->atime = make_unix_date2(p+8);
                        finfo->mtime = make_unix_date2(p+12);
-                       finfo->size = IVAL_TO_SMB_OFF_T(p,16);
+                       finfo->size = IVAL(p,16);
                        finfo->mode = CVAL(p,24);
                        len = CVAL(p, 30);
                        p += 31;
@@ -104,7 +104,7 @@ static int interpret_long_filename(struct cli_state *cli,
                        finfo->ctime = interpret_long_date(p); p += 8;
                        finfo->atime = interpret_long_date(p); p += 8;
                        finfo->mtime = interpret_long_date(p); p += 8; p += 8;
-                       finfo->size = IVAL_TO_SMB_OFF_T(p,0); p += 8;
+                       finfo->size = IVAL2_TO_SMB_BIG_UINT(p,0); p += 8;
                        p += 8; /* alloc size */
                        finfo->mode = CVAL(p,0); p += 4;
                        namelen = IVAL(p,0); p += 4;
@@ -322,7 +322,7 @@ static int interpret_short_filename(struct cli_state *cli, char *p,file_info *fi
        /* this date is converted to GMT by make_unix_date */
        finfo->ctime = make_unix_date(p+22);
        finfo->mtime = finfo->atime = finfo->ctime;
-       finfo->size = IVAL_TO_SMB_OFF_T(p,26);
+       finfo->size = IVAL(p,26);
        clistr_pull(cli, finfo->name, p+30, sizeof(finfo->name), 12, STR_ASCII);
        if (strcmp(finfo->name, "..") && strcmp(finfo->name, "."))
                fstrcpy(finfo->short_name,finfo->name);