Annotation of coherent/g/usr/lib/uucp/tay104/unix/fsusg.c, revision 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.