summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2002-12-10 23:44:33 +0000
committerJeremy Allison <jra@samba.org>2002-12-10 23:44:33 +0000
commit3fc4d88d99b8629e7e3f97d6e70254ef0865a5e5 (patch)
tree53c47de8128638af1368fc3ef6a0f76b41873063
parentad43ee6f5b9ff26c3c91163dea7909401efb02de (diff)
downloadsamba-3fc4d88d99b8629e7e3f97d6e70254ef0865a5e5.tar.gz
samba-3fc4d88d99b8629e7e3f97d6e70254ef0865a5e5.tar.bz2
samba-3fc4d88d99b8629e7e3f97d6e70254ef0865a5e5.zip
Fix client reporting of 64 bit files.
Jeremy. (This used to be commit 8dcbfa4e770d74d4ce6faaf1a0597d07d0a5cc81)
-rw-r--r--source3/include/client.h2
-rw-r--r--source3/include/includes.h4
-rw-r--r--source3/libsmb/clilist.c8
3 files changed, 9 insertions, 5 deletions
diff --git a/source3/include/client.h b/source3/include/client.h
index 17fd150065..853ee7ae42 100644
--- a/source3/include/client.h
+++ b/source3/include/client.h
@@ -35,7 +35,7 @@
typedef struct file_info
{
- SMB_OFF_T size;
+ SMB_BIG_UINT size;
uint16 mode;
uid_t uid;
gid_t gid;
diff --git a/source3/include/includes.h b/source3/include/includes.h
index 395b456fba..87b7e02cbf 100644
--- a/source3/include/includes.h
+++ b/source3/include/includes.h
@@ -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
/*
diff --git a/source3/libsmb/clilist.c b/source3/libsmb/clilist.c
index 1616d46bf1..4a1737af49 100644
--- a/source3/libsmb/clilist.c
+++ b/source3/libsmb/clilist.c
@@ -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);