diff options
author | Jeremy Allison <jra@samba.org> | 1999-02-01 21:03:43 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 1999-02-01 21:03:43 +0000 |
commit | 71fa7753a8515e75f0e7ccb36b3d367fbdc42b0b (patch) | |
tree | d909d6e90116f76e7ba30bc8b946341690dad7db /source/smbd/dfree.c | |
parent | 80d912f31e6f5c0794f51b18b35a8946736c725e (diff) | |
download | samba-71fa7753a8515e75f0e7ccb36b3d367fbdc42b0b.tar.gz samba-71fa7753a8515e75f0e7ccb36b3d367fbdc42b0b.tar.xz samba-71fa7753a8515e75f0e7ccb36b3d367fbdc42b0b.zip |
locking/locking_shm.c: Added printf to help track down negative share mode problem.
printing/print_svid.c: Fix for DG/UX lpstat.
smbd/dfree.c: Added 'max_four_gig' parameter to normalize to 4GB when asked
(used to be the default).
smbd/open.c smbd/reply.c smbd/trans2.c:
Changed to allow a <4GB volume size to be returned on a trans2
qfsinfo level 1 call. NT clients refuse to do the correct call to Samba servers
(Herb recons it's the unicode bit) - this allows even a level 1 to return a
volume size up to 9444732961341243916800 bytes (should be enough for now,
until we get the unicode support added :-).
Jeremy.
Diffstat (limited to 'source/smbd/dfree.c')
-rw-r--r-- | source/smbd/dfree.c | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/source/smbd/dfree.c b/source/smbd/dfree.c index 9f5675f4748..11a83c752d8 100644 --- a/source/smbd/dfree.c +++ b/source/smbd/dfree.c @@ -27,7 +27,7 @@ extern int DEBUGLEVEL; /**************************************************************************** normalise for DOS usage ****************************************************************************/ -static void disk_norm(SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize) +static void disk_norm(BOOL max_four_gigs, SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize) { /* check if the disk is beyond the max disk size */ SMB_BIG_UINT maxdisksize = lp_maxdisksize(); @@ -39,18 +39,23 @@ static void disk_norm(SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsiz /* the -1 should stop applications getting div by 0 errors */ } - + while (*dfree > WORDMAX || *dsize > WORDMAX || *bsize < 512) { *dfree /= 2; *dsize /= 2; *bsize *= 2; - if (*bsize > WORDMAX) { - *bsize = WORDMAX; - if (*dsize > WORDMAX) - *dsize = WORDMAX; - if (*dfree > WORDMAX) - *dfree = WORDMAX; - break; + if(max_four_gigs) { + /* + * Force max to be 4GB only. + */ + if (*bsize > WORDMAX) { + *bsize = WORDMAX; + if (*dsize > WORDMAX) + *dsize = WORDMAX; + if (*dfree > WORDMAX) + *dfree = WORDMAX; + break; + } } } } @@ -185,7 +190,9 @@ static int fsusage(const char *path, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize) /**************************************************************************** return number of 1K blocks available on a path and total number ****************************************************************************/ -static SMB_BIG_UINT disk_free(char *path,SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize) + +static SMB_BIG_UINT disk_free(char *path, BOOL max_four_gigs, + SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize) { int dfree_retval; SMB_BIG_UINT dfree_q = 0; @@ -219,7 +226,7 @@ static SMB_BIG_UINT disk_free(char *path,SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree *dfree = MAX(1,*dfree); } - disk_norm(bsize,dfree,dsize); + disk_norm(max_four_gigs, bsize,dfree,dsize); if ((*bsize) < 1024) { dfree_retval = (*dfree)/(1024/(*bsize)); @@ -234,7 +241,8 @@ static SMB_BIG_UINT disk_free(char *path,SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree /**************************************************************************** wrap it to get filenames right ****************************************************************************/ -SMB_BIG_UINT sys_disk_free(char *path,SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize) +SMB_BIG_UINT sys_disk_free(char *path, BOOL max_four_gigs, + SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize) { - return(disk_free(dos_to_unix(path,False),bsize,dfree,dsize)); + return(disk_free(dos_to_unix(path,False),max_four_gigs, bsize,dfree,dsize)); } |