diff options
Diffstat (limited to 'lib/cvfs.c')
-rw-r--r-- | lib/cvfs.c | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/lib/cvfs.c b/lib/cvfs.c new file mode 100644 index 0000000..067e53e --- /dev/null +++ b/lib/cvfs.c @@ -0,0 +1,110 @@ +/* + * cvfs.c -- completevfs() function for lsof library + */ + + +/* + * Copyright 1997 Purdue Research Foundation, West Lafayette, Indiana + * 47907. All rights reserved. + * + * Written by Victor A. Abell + * + * This software is not subject to any license of the American Telephone + * and Telegraph Company or the Regents of the University of California. + * + * Permission is granted to anyone to use this software for any purpose on + * any computer system, and to alter it and redistribute it freely, subject + * to the following restrictions: + * + * 1. Neither the authors nor Purdue University are responsible for any + * consequences of the use of this software. + * + * 2. The origin of this software must not be misrepresented, either by + * explicit claim or by omission. Credit to the authors and Purdue + * University must appear in documentation and sources. + * + * 3. Altered versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 4. This notice may not be removed or altered. + */ + + +/* + * The caller must define CVFS_DEVSAVE to have the device number moved + * from the mounts entry to the local vfs structure. + * + * The caller must define CVFS_NLKSAVE to have the link count moved from + * the mounts entry to the local vfs structure. + * + * The caller must define CVFS_SZSAVE to have the size moved from the + * mounts entry to the local vfs structure. + */ + + +#include "../machine.h" + +#if defined(USE_LIB_COMPLETEVFS) + +# if !defined(lint) +static char copyright[] = +"@(#) Copyright 1997 Purdue Research Foundation.\nAll rights reserved.\n"; +static char *rcsid = "$Id: cvfs.c,v 1.6 2008/10/21 16:12:36 abe Exp $"; +# endif /* !defined(lint) */ + +#include "../lsof.h" + + +/* + * completevfs() - complete local vfs structure + */ + +void +completevfs(vfs, dev) + struct l_vfs *vfs; /* local vfs structure pointer */ + dev_t *dev; /* device */ +{ + struct mounts *mp; +/* + * If only Internet socket files are selected, don't bother completing the + * local vfs structure. + */ + if (Selinet) + return; +/* + * Search for a match on device number. + */ + for (mp = readmnt(); mp; mp = mp->next) { + if (mp->dev == *dev) { + +# if defined(CVFS_DEVSAVE) + vfs->dev = mp->dev; +# endif /* defined(CVFS_DEVSAVE) */ + +# if defined(CVFS_NLKSAVE) + vfs->nlink = mp->nlink; +# endif /* defined(CVFS_NLKSAVE) */ + +# if defined(CVFS_SZSAVE) + vfs->size = mp->size; +# endif /* defined(CVFS_SZSAVE) */ + + vfs->dir = mp->dir; + vfs->fsname = mp->fsname; + +# if defined(HASFSINO) + vfs->fs_ino = mp->inode; +# endif /* defined(HASFSINO) */ + +# if defined(HASMNTSTAT) + vfs->mnt_stat = mp->stat; +# endif /* defined(HASMNTSTAT) */ + + + return; + } + } +} +#else /* !defined(USE_LIB_COMPLETEVFS) */ +char cvfs_d1[] = "d"; char *cvfs_d2 = cvfs_d1; +#endif /* defined(USE_LIB_COMPLETEVFS) */ |