summaryrefslogtreecommitdiff
path: root/source3/smbd/dfree.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2000-04-19 08:23:13 +0000
committerAndrew Tridgell <tridge@samba.org>2000-04-19 08:23:13 +0000
commitf074d6ef57de28a2855fb2f8d3357ec46cbe8be0 (patch)
tree6ff54e1514cc88221b0489e1dab9d35668c388c5 /source3/smbd/dfree.c
parent59f992f12de9a0c6a0bc30f8953b324699623a03 (diff)
downloadsamba-f074d6ef57de28a2855fb2f8d3357ec46cbe8be0.tar.gz
split fsusage() into a separate module (to fix linking problems with
spoolssd in tng) (This used to be commit e2eacdd74c369fbbcd118148149321e36f3d0010)
Diffstat (limited to 'source3/smbd/dfree.c')
-rw-r--r--source3/smbd/dfree.c129
1 files changed, 2 insertions, 127 deletions
diff --git a/source3/smbd/dfree.c b/source3/smbd/dfree.c
index eff718b1482..ee5722acd57 100644
--- a/source3/smbd/dfree.c
+++ b/source3/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;