diff options
author | Luke Leighton <lkcl@samba.org> | 2000-04-19 08:46:49 +0000 |
---|---|---|
committer | Luke Leighton <lkcl@samba.org> | 2000-04-19 08:46:49 +0000 |
commit | a3bf361aa8e96b288c0edc28571b5c1bb61f8931 (patch) | |
tree | b6b1dfbd9ae34fb2d64dc2cdd6d6040123fce108 | |
parent | 3afbeb1ed97d070bd274411e4f6f9b7d057ee138 (diff) | |
download | samba-a3bf361aa8e96b288c0edc28571b5c1bb61f8931.tar.gz |
more merge.
-rw-r--r-- | source/Makefile.in | 2 | ||||
-rw-r--r-- | source/include/proto.h | 4 | ||||
-rw-r--r-- | source/printing/printing.c | 6 | ||||
-rw-r--r-- | source/smbd/dfree.c | 129 |
4 files changed, 10 insertions, 131 deletions
diff --git a/source/Makefile.in b/source/Makefile.in index f28e1a9f14f..5b7cac3fffb 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -154,7 +154,7 @@ LIB_OBJ = lib/charcnv.o lib/charset.o lib/debug.o lib/fault.o \ lib/getsmbpass.o lib/interface.o lib/kanji.o lib/md4.o \ lib/pidfile.o lib/replace.o \ lib/signal.o lib/getopt.o lib/slprintf.o \ - lib/system.o lib/doscalls.o \ + lib/fsusage.o lib/system.o lib/doscalls.o \ lib/time.o lib/ufc.o lib/util.o lib/substitute.o \ lib/genrand.o lib/username.o \ lib/access.o lib/smbrun.o \ diff --git a/source/include/proto.h b/source/include/proto.h index 0b2c208b8f7..63c221d5e76 100644 --- a/source/include/proto.h +++ b/source/include/proto.h @@ -261,6 +261,10 @@ void fault_setup(void (*fn)(void *)); int fnmatch (const char *pattern, const char *string, int flags); +/*The following definitions come from lib/fsusage.c */ + +int sys_fsusage(const char *path, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize); + /*The following definitions come from lib/genrand.c */ void generate_random_buffer( unsigned char *out, int len, BOOL re_seed); diff --git a/source/printing/printing.c b/source/printing/printing.c index 0bd68d31fe9..165049b7977 100644 --- a/source/printing/printing.c +++ b/source/printing/printing.c @@ -565,9 +565,9 @@ int print_job_start(int snum, char *jobname) /* see if we have sufficient disk space */ if (lp_minprintspace(snum)) { - SMB_BIG_UINT dum1,dum2,dum3; - if (sys_disk_free(path,False,&dum1,&dum2,&dum3) < - (SMB_BIG_UINT)lp_minprintspace(snum)) { + SMB_BIG_UINT dspace, dsize; + if (sys_fsusage(path, &dspace, &dsize) == 0 && + dspace < 2*(SMB_BIG_UINT)lp_minprintspace(snum)) { errno = ENOSPC; return -1; } diff --git a/source/smbd/dfree.c b/source/smbd/dfree.c index eff718b1482..ee5722acd57 100644 --- a/source/smbd/dfree.c +++ b/source/smbd/dfree.c @@ -61,131 +61,6 @@ static void disk_norm(BOOL small_query, SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree, } -/* Return the number of TOSIZE-byte blocks used by - BLOCKS FROMSIZE-byte blocks, rounding away from zero. -*/ -static SMB_BIG_UINT adjust_blocks(SMB_BIG_UINT blocks, SMB_BIG_UINT fromsize, SMB_BIG_UINT tosize) -{ - if (fromsize == tosize) /* e.g., from 512 to 512 */ - return blocks; - else if (fromsize > tosize) /* e.g., from 2048 to 512 */ - return blocks * (fromsize / tosize); - else /* e.g., from 256 to 512 */ - return (blocks + 1) / (tosize / fromsize); -} - -/* this does all of the system specific guff to get the free disk space. - It is derived from code in the GNU fileutils package, but has been - considerably mangled for use here - - results are returned in *dfree and *dsize, in 512 byte units -*/ -static int fsusage(const char *path, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize) -{ -#ifdef STAT_STATFS3_OSF1 -#define CONVERT_BLOCKS(B) adjust_blocks ((SMB_BIG_UINT)(B), (SMB_BIG_UINT)fsd.f_fsize, (SMB_BIG_UINT)512) - struct statfs fsd; - - if (statfs (path, &fsd, sizeof (struct statfs)) != 0) - return -1; -#endif /* STAT_STATFS3_OSF1 */ - -#ifdef STAT_STATFS2_FS_DATA /* Ultrix */ -#define CONVERT_BLOCKS(B) adjust_blocks ((SMB_BIG_UINT)(B), (SMB_BIG_UINT)1024, (SMB_BIG_UINT)512) - struct fs_data fsd; - - if (statfs (path, &fsd) != 1) - return -1; - - (*dsize) = CONVERT_BLOCKS (fsd.fd_req.btot); - (*dfree) = CONVERT_BLOCKS (fsd.fd_req.bfreen); -#endif /* STAT_STATFS2_FS_DATA */ - -#ifdef STAT_STATFS2_BSIZE /* 4.3BSD, SunOS 4, HP-UX, AIX */ -#define CONVERT_BLOCKS(B) adjust_blocks ((SMB_BIG_UINT)(B), (SMB_BIG_UINT)fsd.f_bsize, (SMB_BIG_UINT)512) - struct statfs fsd; - - if (statfs (path, &fsd) < 0) - return -1; - -#ifdef STATFS_TRUNCATES_BLOCK_COUNTS - /* In SunOS 4.1.2, 4.1.3, and 4.1.3_U1, the block counts in the - struct statfs are truncated to 2GB. These conditions detect that - truncation, presumably without botching the 4.1.1 case, in which - the values are not truncated. The correct counts are stored in - undocumented spare fields. */ - if (fsd.f_blocks == 0x1fffff && fsd.f_spare[0] > 0) { - fsd.f_blocks = fsd.f_spare[0]; - fsd.f_bfree = fsd.f_spare[1]; - fsd.f_bavail = fsd.f_spare[2]; - } -#endif /* STATFS_TRUNCATES_BLOCK_COUNTS */ -#endif /* STAT_STATFS2_BSIZE */ - - -#ifdef STAT_STATFS2_FSIZE /* 4.4BSD */ -#define CONVERT_BLOCKS(B) adjust_blocks ((SMB_BIG_UINT)(B), (SMB_BIG_UINT)fsd.f_fsize, (SMB_BIG_UINT)512) - - struct statfs fsd; - - if (statfs (path, &fsd) < 0) - return -1; -#endif /* STAT_STATFS2_FSIZE */ - -#ifdef STAT_STATFS4 /* SVR3, Dynix, Irix, AIX */ -# if _AIX || defined(_CRAY) -# define CONVERT_BLOCKS(B) adjust_blocks ((SMB_BIG_UINT)(B), (SMB_BIG_UINT)fsd.f_bsize, (SMB_BIG_UINT)512) -# ifdef _CRAY -# define f_bavail f_bfree -# endif -# else -# define CONVERT_BLOCKS(B) ((SMB_BIG_UINT)B) -# ifndef _SEQUENT_ /* _SEQUENT_ is DYNIX/ptx */ -# ifndef DOLPHIN /* DOLPHIN 3.8.alfa/7.18 has f_bavail */ -# define f_bavail f_bfree -# endif -# endif -# endif - - struct statfs fsd; - - if (statfs (path, &fsd, sizeof fsd, 0) < 0) - return -1; - /* Empirically, the block counts on most SVR3 and SVR3-derived - systems seem to always be in terms of 512-byte blocks, - no matter what value f_bsize has. */ - -#endif /* STAT_STATFS4 */ - -#if defined(STAT_STATVFS) || defined(STAT_STATVFS64) /* SVR4 */ -# define CONVERT_BLOCKS(B) \ - adjust_blocks ((SMB_BIG_UINT)(B), fsd.f_frsize ? (SMB_BIG_UINT)fsd.f_frsize : (SMB_BIG_UINT)fsd.f_bsize, (SMB_BIG_UINT)512) - -#ifdef STAT_STATVFS64 - struct statvfs64 fsd; - if (statvfs64(path, &fsd) < 0) return -1; -#else - struct statvfs fsd; - if (statvfs(path, &fsd) < 0) return -1; -#endif - - /* f_frsize isn't guaranteed to be supported. */ - -#endif /* STAT_STATVFS */ - -#ifndef CONVERT_BLOCKS - /* we don't have any dfree code! */ - return -1; -#else -#if !defined(STAT_STATFS2_FS_DATA) - /* !Ultrix */ - (*dsize) = CONVERT_BLOCKS (fsd.f_blocks); - (*dfree) = CONVERT_BLOCKS (fsd.f_bavail); -#endif /* not STAT_STATFS2_FS_DATA */ -#endif - - return 0; -} /**************************************************************************** return number of 1K blocks available on a path and total number @@ -246,10 +121,10 @@ static SMB_BIG_UINT disk_free(char *path, BOOL small_query, } else { DEBUG (0, ("disk_free: sys_popen() failed for command %s. Error was : %s\n", syscmd, strerror(errno) )); - fsusage(path, dfree, dsize); + sys_fsusage(path, dfree, dsize); } } else - fsusage(path, dfree, dsize); + sys_fsusage(path, dfree, dsize); if (disk_quotas(path, &bsize_q, &dfree_q, &dsize_q)) { (*bsize) = bsize_q; |