X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fmountlist.c;h=5018745a0d2cebd8fe095cb3177f12e4a192a8dd;hb=6b8b6deecb00631ea5f4bba04c739b9a19d29a4e;hp=37c3d1bddbe0c5748dc8d169780cbb662a95ee7a;hpb=040465a37255f92b50ce7b3e46e8e610addf18d3;p=gnulib.git diff --git a/lib/mountlist.c b/lib/mountlist.c index 37c3d1bdd..5018745a0 100644 --- a/lib/mountlist.c +++ b/lib/mountlist.c @@ -1,5 +1,5 @@ /* mountlist.c -- return a list of mounted filesystems - Copyright (C) 1991, 1992 Free Software Foundation, Inc. + Copyright (C) 1991, 1992, 1997 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H -#include +# include #endif #include @@ -24,79 +24,92 @@ #include "mountlist.h" #ifdef STDC_HEADERS -#include +# include #else void free (); #endif #if defined(STDC_HEADERS) || defined(HAVE_STRING_H) -#include +# include #else -#include +# include #endif +#ifndef strstr char *strstr (); +#endif char *xmalloc (); char *xrealloc (); char *xstrdup (); void error (); #ifdef HAVE_SYS_PARAM_H -#include +# include #endif #if defined (MOUNTED_GETFSSTAT) /* __alpha running OSF_1 */ -# include -# include +# include +# include #endif /* MOUNTED_GETFSSTAT */ #ifdef MOUNTED_GETMNTENT1 /* 4.3BSD, SunOS, HP-UX, Dynix, Irix. */ -#include -#if !defined(MOUNTED) +# include +# if !defined(MOUNTED) # if defined(MNT_MNTTAB) /* HP-UX. */ -# define MOUNTED MNT_MNTTAB +# define MOUNTED MNT_MNTTAB # endif # if defined(MNTTABNAME) /* Dynix. */ -# define MOUNTED MNTTABNAME +# define MOUNTED MNTTABNAME # endif -#endif +# endif #endif #ifdef MOUNTED_GETMNTINFO /* 4.4BSD. */ -#include +# include #endif #ifdef MOUNTED_GETMNT /* Ultrix. */ -#include -#include +# include +# include #endif #ifdef MOUNTED_FREAD /* SVR2. */ -#include +# include #endif #ifdef MOUNTED_FREAD_FSTYP /* SVR3. */ -#include -#include -#include +# include +# include +# include #endif #ifdef MOUNTED_LISTMNTENT -#include +# include #endif #ifdef MOUNTED_GETMNTENT2 /* SVR4. */ -#include +# include #endif #ifdef MOUNTED_VMOUNT /* AIX. */ -#include -#include +# include +# include #endif #ifdef DOLPHIN /* So special that it's not worth putting this in autoconf. */ -#undef MOUNTED_FREAD_FSTYP -#define MOUNTED_GETMNTTBL +# undef MOUNTED_FREAD_FSTYP +# define MOUNTED_GETMNTTBL +#endif + +#ifdef HAVE_SYS_MNTENT_H +/* This is to get MNTOPT_IGNORE on e.g. SVR4. */ +# include +#endif + +#if defined (MNTOPT_IGNORE) && defined (HAVE_HASMNTOPT) +# define MNT_IGNORE(M) hasmntopt ((M), MNTOPT_IGNORE) +#else +# define MNT_IGNORE(M) 0 #endif #ifdef MOUNTED_GETMNTENT1 /* 4.3BSD, SunOS, HP-UX, Dynix, Irix. */ @@ -127,97 +140,97 @@ xatoi (cp) } #endif /* MOUNTED_GETMNTENT1. */ -#if defined (MOUNTED_GETMNTINFO) && !defined (__NetBSD__) +#if defined (MOUNTED_GETMNTINFO) && !defined (__NetBSD__) && !defined (__OpenBSD__) static char * fstype_to_string (t) short t; { switch (t) { -#ifdef MOUNT_PC +# ifdef MOUNT_PC case MOUNT_PC: return "pc"; -#endif -#ifdef MOUNT_MFS +# endif +# ifdef MOUNT_MFS case MOUNT_MFS: return "mfs"; -#endif -#ifdef MOUNT_LO +# endif +# ifdef MOUNT_LO case MOUNT_LO: return "lo"; -#endif -#ifdef MOUNT_TFS +# endif +# ifdef MOUNT_TFS case MOUNT_TFS: return "tfs"; -#endif -#ifdef MOUNT_TMP +# endif +# ifdef MOUNT_TMP case MOUNT_TMP: return "tmp"; -#endif -#ifdef MOUNT_UFS +# endif +# ifdef MOUNT_UFS case MOUNT_UFS: return "ufs" ; -#endif -#ifdef MOUNT_NFS +# endif +# ifdef MOUNT_NFS case MOUNT_NFS: return "nfs" ; -#endif -#ifdef MOUNT_MSDOS +# endif +# ifdef MOUNT_MSDOS case MOUNT_MSDOS: return "msdos" ; -#endif -#ifdef MOUNT_LFS +# endif +# ifdef MOUNT_LFS case MOUNT_LFS: return "lfs" ; -#endif -#ifdef MOUNT_LOFS +# endif +# ifdef MOUNT_LOFS case MOUNT_LOFS: return "lofs" ; -#endif -#ifdef MOUNT_FDESC +# endif +# ifdef MOUNT_FDESC case MOUNT_FDESC: return "fdesc" ; -#endif -#ifdef MOUNT_PORTAL +# endif +# ifdef MOUNT_PORTAL case MOUNT_PORTAL: return "portal" ; -#endif -#ifdef MOUNT_NULL +# endif +# ifdef MOUNT_NULL case MOUNT_NULL: return "null" ; -#endif -#ifdef MOUNT_UMAP +# endif +# ifdef MOUNT_UMAP case MOUNT_UMAP: return "umap" ; -#endif -#ifdef MOUNT_KERNFS +# endif +# ifdef MOUNT_KERNFS case MOUNT_KERNFS: return "kernfs" ; -#endif -#ifdef MOUNT_PROCFS +# endif +# ifdef MOUNT_PROCFS case MOUNT_PROCFS: return "procfs" ; -#endif -#ifdef MOUNT_AFS +# endif +# ifdef MOUNT_AFS case MOUNT_AFS: return "afs" ; -#endif -#ifdef MOUNT_CD9660 +# endif +# ifdef MOUNT_CD9660 case MOUNT_CD9660: return "cd9660" ; -#endif -#ifdef MOUNT_UNION +# endif +# ifdef MOUNT_UNION case MOUNT_UNION: return "union" ; -#endif -#ifdef MOUNT_DEVFS +# endif +# ifdef MOUNT_DEVFS case MOUNT_DEVFS: return "devfs" ; -#endif -#ifdef MOUNT_EXT2FS +# endif +# ifdef MOUNT_EXT2FS case MOUNT_EXT2FS: return "ext2fs" ; -#endif +# endif default: return "?"; } @@ -264,7 +277,7 @@ read_filesystem_list (need_fs_type, all_fs) struct tabmntent *mntlist, *p; struct mntent *mnt; struct mount_entry *me; - + /* the third and fourth arguments could be used to filter mounts, but Crays doesn't seem to have any mounts that we want to remove. Specifically, automount create normal NFS mounts. @@ -345,11 +358,11 @@ read_filesystem_list (need_fs_type, all_fs) me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); me->me_devname = xstrdup (fsp->f_mntfromname); me->me_mountdir = xstrdup (fsp->f_mntonname); -#ifdef __NetBSD__ +# if defined (__NetBSD__) || defined (__OpenBSD__) me->me_type = xstrdup (fsp->f_fstypename); -#else +# else me->me_type = fstype_to_string (fsp->f_type); -#endif +# endif me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ me->me_next = NULL; @@ -436,17 +449,17 @@ read_filesystem_list (need_fs_type, all_fs) while (fread (&mnt, sizeof mnt, 1, fp) > 0) { me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); -#ifdef GETFSTYP /* SVR3. */ +# ifdef GETFSTYP /* SVR3. */ me->me_devname = xstrdup (mnt.mt_dev); -#else +# else me->me_devname = xmalloc (strlen (mnt.mt_dev) + 6); strcpy (me->me_devname, "/dev/"); strcpy (me->me_devname + 5, mnt.mt_dev); -#endif +# endif me->me_mountdir = xstrdup (mnt.mt_filsys); me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ me->me_type = ""; -#ifdef GETFSTYP /* SVR3. */ +# ifdef GETFSTYP /* SVR3. */ if (need_fs_type) { struct statfs fsd; @@ -456,7 +469,7 @@ read_filesystem_list (need_fs_type, all_fs) && sysfs (GETFSTYP, fsd.f_fstyp, typebuf) != -1) me->me_type = xstrdup (typebuf); } -#endif +# endif me->me_next = NULL; /* Add to the linked list. */ @@ -502,6 +515,10 @@ read_filesystem_list (need_fs_type, all_fs) while ((ret = getmntent (fp, &mnt)) == 0) { + /* Don't show automounted filesystems twice on e.g., Solaris. */ + if (!all_fs && MNT_IGNORE (&mnt)) + continue; + me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); me->me_devname = xstrdup (mnt.mnt_special); me->me_mountdir = xstrdup (mnt.mnt_mountp);