Annotation of coherent/g/usr/lib/uucp/tay104/unix/fsusg.c, revision 1.1.1.1

1.1       root        1: /* fsusage.c -- return space usage of mounted filesystems
                      2:    Copyright (C) 1991, 1992 Free Software Foundation, Inc.
                      3: 
                      4:    This program is free software; you can redistribute it and/or modify
                      5:    it under the terms of the GNU General Public License as published by
                      6:    the Free Software Foundation; either version 2, or (at your option)
                      7:    any later version.
                      8: 
                      9:    This program is distributed in the hope that it will be useful,
                     10:    but WITHOUT ANY WARRANTY; without even the implied warranty of
                     11:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     12:    GNU General Public License for more details.
                     13: 
                     14:    You should have received a copy of the GNU General Public License
                     15:    along with this program; if not, write to the Free Software
                     16:    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
                     17: 
                     18:    This file was modified slightly by Ian Lance Taylor, December 1992,
                     19:    for use with Taylor UUCP.  */
                     20: 
                     21: #include "uucp.h"
                     22: #include "sysdep.h"
                     23: #include "fsusg.h"
                     24: 
                     25: int statfs ();
                     26: 
                     27: #if STAT_STATFS2_BSIZE
                     28: #ifndef _IBMR2                 /* 4.3BSD, SunOS 4, HP-UX, AIX PS/2.  */
                     29: #include <sys/vfs.h>
                     30: #endif
                     31: #endif
                     32: 
                     33: #if STAT_STATFS2_FSIZE         /* 4.4BSD.  */
                     34: #include <sys/mount.h>
                     35: #endif
                     36: 
                     37: #if STAT_STATFS2_FS_DATA       /* Ultrix.  */
                     38: #include <sys/param.h>
                     39: #include <sys/mount.h>
                     40: #endif
                     41: 
                     42: #if STAT_USTAT                 /* SVR2 and others.  */
                     43: #include <ustat.h>
                     44: #endif
                     45: 
                     46: #if STAT_STATFS4               /* SVR3, Dynix, Irix.  */
                     47: #include <sys/statfs.h>
                     48: #endif
                     49: #ifdef _AIX
                     50: #ifdef _IBMR2                  /* AIX RS6000.  */
                     51: #include <sys/statfs.h>
                     52: #endif
                     53: #endif
                     54: 
                     55: #ifdef _AIX
                     56: #ifdef _I386                   /* AIX PS/2.  */
                     57: #include <sys/stat.h>
                     58: #include <sys/dustat.h>
                     59: #endif
                     60: #endif
                     61: 
                     62: #if STAT_STATVFS               /* SVR4.  */
                     63: #include <sys/statvfs.h>
                     64: int statvfs ();
                     65: #endif
                     66: 
                     67: #define STAT_NONE 0
                     68: 
                     69: #if ! STAT_STATVFS
                     70: #if ! STAT_STATFS2_BSIZE
                     71: #if ! STAT_STATFS2_FSIZE
                     72: #if ! STAT_STATFS2_FS_DATA
                     73: #if ! STAT_STATFS4
                     74: #if ! STAT_USTAT
                     75: #undef STAT_NONE
                     76: #define STAT_NONE 1
                     77: #endif
                     78: #endif
                     79: #endif
                     80: #endif
                     81: #endif
                     82: #endif
                     83: 
                     84: #if ! STAT_NONE
                     85: 
                     86: /* Return the number of TOSIZE-byte blocks used by
                     87:    BLOCKS FROMSIZE-byte blocks, rounding up.  */
                     88: 
                     89: static long
                     90: adjust_blocks (blocks, fromsize, tosize)
                     91:      long blocks;
                     92:      int fromsize, tosize;
                     93: {
                     94:   if (fromsize == tosize)      /* E.g., from 512 to 512.  */
                     95:     return blocks;
                     96:   else if (fromsize > tosize)  /* E.g., from 2048 to 512.  */
                     97:     return blocks * (fromsize / tosize);
                     98:   else                         /* E.g., from 256 to 512.  */
                     99:     return (blocks + 1) / (tosize / fromsize);
                    100: }
                    101: 
                    102: #endif
                    103: 
                    104: /* Fill in the fields of FSP with information about space usage for
                    105:    the filesystem on which PATH resides.
                    106:    DISK is the device on which PATH is mounted, for space-getting
                    107:    methods that need to know it.
                    108:    Return 0 if successful, -1 if not. */
                    109: 
                    110: int
                    111: get_fs_usage (path, disk, fsp)
                    112:      char *path, *disk;
                    113:      struct fs_usage *fsp;
                    114: {
                    115: #if STAT_NONE
                    116:   return -1;
                    117: #endif
                    118: 
                    119: #if STAT_STATFS2_FS_DATA       /* Ultrix.  */
                    120:   struct fs_data fsd;
                    121: 
                    122:   if (statfs (path, &fsd) != 1)
                    123:     return -1;
                    124: #define convert_blocks(b) adjust_blocks ((b), 1024, 512)
                    125:   fsp->fsu_blocks = convert_blocks (fsd.fd_req.btot);
                    126:   fsp->fsu_bfree = convert_blocks (fsd.fd_req.bfree);
                    127:   fsp->fsu_bavail = convert_blocks (fsd.fd_req.bfreen);
                    128:   fsp->fsu_files = fsd.fd_req.gtot;
                    129:   fsp->fsu_ffree = fsd.fd_req.gfree;
                    130: #endif
                    131: 
                    132: #if STAT_STATFS2_BSIZE         /* 4.3BSD, SunOS 4, HP-UX, AIX.  */
                    133:   struct statfs fsd;
                    134: 
                    135:   if (statfs (path, &fsd) < 0)
                    136:     return -1;
                    137: #define convert_blocks(b) adjust_blocks ((b), fsd.f_bsize, 512)
                    138: #endif
                    139: 
                    140: #if STAT_STATFS2_FSIZE         /* 4.4BSD.  */
                    141:   struct statfs fsd;
                    142: 
                    143:   if (statfs (path, &fsd) < 0)
                    144:     return -1;
                    145: #define convert_blocks(b) adjust_blocks ((b), fsd.f_fsize, 512)
                    146: #endif
                    147: 
                    148: #if STAT_STATFS4               /* SVR3, Dynix, Irix.  */
                    149:   struct statfs fsd;
                    150: 
                    151:   if (statfs (path, &fsd, sizeof fsd, 0) < 0)
                    152:     return -1;
                    153:   /* Empirically, the block counts on most SVR3 and SVR3-derived
                    154:      systems seem to always be in terms of 512-byte blocks,
                    155:      no matter what value f_bsize has.  */
                    156: #define convert_blocks(b) (b)
                    157: #ifndef _SEQUENT_              /* _SEQUENT_ is DYNIX/ptx.  */
                    158: #define f_bavail f_bfree
                    159: #endif
                    160: #endif
                    161: 
                    162: #if STAT_STATVFS               /* SVR4.  */
                    163:   struct statvfs fsd;
                    164: 
                    165:   if (statvfs (path, &fsd) < 0)
                    166:     return -1;
                    167:   /* f_frsize isn't guaranteed to be supported.  */
                    168: #define convert_blocks(b) \
                    169:   adjust_blocks ((b), fsd.f_frsize ? fsd.f_frsize : fsd.f_bsize, 512)
                    170: #endif
                    171: 
                    172: #if STAT_USTAT
                    173:   {
                    174:     struct stat sstat;
                    175:     struct ustat s;
                    176: 
                    177:     if (stat (path, &sstat) < 0
                    178:        || ustat (sstat.st_dev, &s) < 0)
                    179:       return -1;
                    180:     fsp->fsu_blocks = -1;
                    181:     fsp->fsu_bfree = f_tfree;
                    182:     fsp->fsu_bavail = f_tfree;
                    183:     fsp->fsu_files = -1;
                    184:     fsp->fsu_ffree = -1;
                    185:   }
                    186: #endif
                    187: 
                    188: #if ! STAT_STATFS2_FS_DATA /* ! Ultrix */
                    189: #if ! STAT_USTAT
                    190: #if ! STAT_NONE
                    191:   fsp->fsu_blocks = convert_blocks (fsd.f_blocks);
                    192:   fsp->fsu_bfree = convert_blocks (fsd.f_bfree);
                    193:   fsp->fsu_bavail = convert_blocks (fsd.f_bavail);
                    194:   fsp->fsu_files = fsd.f_files;
                    195:   fsp->fsu_ffree = fsd.f_ffree;
                    196: #endif
                    197: #endif
                    198: #endif
                    199: 
                    200:   return 0;
                    201: }
                    202: 
                    203: #ifdef _AIX
                    204: #ifdef _I386
                    205: /* AIX PS/2 does not supply statfs.  */
                    206: 
                    207: int
                    208: statfs (path, fsb)
                    209:      char *path;
                    210:      struct statfs *fsb;
                    211: {
                    212:   struct stat stats;
                    213:   struct dustat fsd;
                    214: 
                    215:   if (stat (path, &stats))
                    216:     return -1;
                    217:   if (dustat (stats.st_dev, 0, &fsd, sizeof (fsd)))
                    218:     return -1;
                    219:   fsb->f_type   = 0;
                    220:   fsb->f_bsize  = fsd.du_bsize;
                    221:   fsb->f_blocks = fsd.du_fsize - fsd.du_isize;
                    222:   fsb->f_bfree  = fsd.du_tfree;
                    223:   fsb->f_bavail = fsd.du_tfree;
                    224:   fsb->f_files  = (fsd.du_isize - 2) * fsd.du_inopb;
                    225:   fsb->f_ffree  = fsd.du_tinode;
                    226:   fsb->f_fsid.val[0] = fsd.du_site;
                    227:   fsb->f_fsid.val[1] = fsd.du_pckno;
                    228:   return 0;
                    229: }
                    230: #endif
                    231: #endif /* _AIX && _I386 */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.