GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <stdio.h>
#include <sys/types.h>
#else
void free ();
#endif
-#if defined(USG) || defined(STDC_HEADERS)
+#if defined(STDC_HEADERS) || defined(HAVE_STRING_H)
#include <string.h>
#else
#include <strings.h>
char *xstrdup ();
void error ();
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+
+#if defined (MOUNTED_GETFSSTAT) /* __alpha running OSF_1 */
+# include <sys/mount.h>
+# include <sys/fs_types.h>
+#endif /* MOUNTED_GETFSSTAT */
+
#ifdef MOUNTED_GETMNTENT1 /* 4.3BSD, SunOS, HP-UX, Dynix, Irix. */
#include <mntent.h>
#if !defined(MOUNTED)
#endif
#ifdef MOUNTED_GETMNT /* Ultrix. */
-#include <sys/param.h>
#include <sys/mount.h>
#include <sys/fs_types.h>
#endif
#include <sys/statfs.h>
#endif
+#ifdef MOUNTED_LISTMNTENT
+#include <mntent.h>
+#endif
+
#ifdef MOUNTED_GETMNTENT2 /* SVR4. */
#include <sys/mnttab.h>
#endif
#include <sys/vfs.h>
#endif
+#ifdef DOLPHIN
+/* So special that it's not worth putting this in autoconf. */
+#undef MOUNTED_FREAD_FSTYP
+#define MOUNTED_GETMNTTBL
+#endif
+
#ifdef MOUNTED_GETMNTENT1 /* 4.3BSD, SunOS, HP-UX, Dynix, Irix. */
/* Return the value of the hexadecimal number represented by CP.
No prefix (like '0x') or suffix (like 'h') is expected to be
char *cp;
{
int val;
-
+
val = 0;
while (*cp)
{
}
#endif /* MOUNTED_GETMNTENT1. */
-#ifdef MOUNTED_GETMNTINFO /* 4.4BSD. */
+#if defined (MOUNTED_GETMNTINFO) && !defined (__NetBSD__)
static char *
fstype_to_string (t)
short t;
return "ufs";
case MOUNT_NFS:
return "nfs";
+#ifdef MOUNT_PC
case MOUNT_PC:
return "pc";
+#endif
#ifdef MOUNT_MFS
case MOUNT_MFS:
return "mfs";
me->me_next = NULL;
mount_list = mtail = me;
+#ifdef MOUNTED_LISTMNTENT
+ {
+ 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.
+ */
+
+ if(listmntent(&mntlist, KMTAB, NULL, NULL) < 0)
+ return NULL;
+ p = mntlist;
+ while(p){
+ mnt = p->ment;
+ me = (struct mount_entry*) xmalloc(sizeof (struct mount_entry));
+ me->me_devname = xstrdup(mnt->mnt_fsname);
+ me->me_mountdir = xstrdup(mnt->mnt_dir);
+ me->me_type = xstrdup(mnt->mnt_type);
+ me->me_dev = -1;
+ me->me_next = NULL;
+ mtail->me_next = me;
+ mtail = me;
+ p = p->next;
+ }
+ freemntlist(mntlist);
+ }
+#endif
+
#ifdef MOUNTED_GETMNTENT1 /* 4.3BSD, SunOS, HP-UX, Dynix, Irix. */
{
struct mntent *mnt;
me->me_dev = xatoi (devopt + 4);
}
else
- me->me_dev = -1; /* Magic; means not known yet. */
+ me->me_dev = (dev_t) -1; /* Magic; means not known yet. */
me->me_next = NULL;
/* Add to the linked list. */
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__
+ me->me_type = xstrdup (fsp->f_fstypename);
+#else
me->me_type = fstype_to_string (fsp->f_type);
- me->me_dev = -1; /* Magic; means not known yet. */
+#endif
+ me->me_dev = (dev_t) -1; /* Magic; means not known yet. */
me->me_next = NULL;
/* Add to the linked list. */
}
#endif /* MOUNTED_GETMNT. */
+#if defined (MOUNTED_GETFSSTAT) /* __alpha running OSF_1 */
+ {
+ int numsys, counter, bufsize;
+ struct statfs *stats;
+
+ numsys = getfsstat ((struct statfs *)0, 0L, MNT_WAIT);
+ if (numsys < 0)
+ return (NULL);
+
+ bufsize = (1 + numsys) * sizeof (struct statfs);
+ stats = (struct statfs *)xmalloc (bufsize);
+ numsys = getfsstat (stats, bufsize, MNT_WAIT);
+
+ if (numsys < 0)
+ {
+ free (stats);
+ return (NULL);
+ }
+
+ for (counter = 0; counter < numsys; counter++)
+ {
+ me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry));
+ me->me_devname = xstrdup (stats[counter].f_mntfromname);
+ me->me_mountdir = xstrdup (stats[counter].f_mntonname);
+ me->me_type = mnt_names[stats[counter].f_type];
+ me->me_dev = (dev_t) -1; /* Magic; means not known yet. */
+ me->me_next = NULL;
+
+ /* Add to the linked list. */
+ mtail->me_next = me;
+ mtail = me;
+ }
+
+ free (stats);
+ }
+#endif /* MOUNTED_GETFSSTAT */
+
#if defined (MOUNTED_FREAD) || defined (MOUNTED_FREAD_FSTYP) /* SVR[23]. */
{
struct mnttab mnt;
strcpy (me->me_devname + 5, mnt.mt_dev);
#endif
me->me_mountdir = xstrdup (mnt.mt_filsys);
- me->me_dev = -1; /* Magic; means not known yet. */
+ me->me_dev = (dev_t) -1; /* Magic; means not known yet. */
me->me_type = "";
#ifdef GETFSTYP /* SVR3. */
if (need_fs_type)
}
#endif /* MOUNTED_FREAD || MOUNTED_FREAD_FSTYP. */
+#ifdef MOUNTED_GETMNTTBL /* DolphinOS goes it's own way */
+ {
+ struct mntent **mnttbl=getmnttbl(),**ent;
+ for (ent=mnttbl;*ent;ent++)
+ {
+ me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry));
+ me->me_devname = xstrdup ( (*ent)->mt_resource);
+ me->me_mountdir = xstrdup( (*ent)->mt_directory);
+ me->me_type = xstrdup ((*ent)->mt_fstype);
+ me->me_dev = (dev_t) -1; /* Magic; means not known yet. */
+ me->me_next = NULL;
+
+ /* Add to the linked list. */
+ mtail->me_next = me;
+ mtail = me;
+ }
+ endmnttbl();
+ }
+#endif
+
#ifdef MOUNTED_GETMNTENT2 /* SVR4. */
{
struct mnttab mnt;
me->me_devname = xstrdup (mnt.mnt_special);
me->me_mountdir = xstrdup (mnt.mnt_mountp);
me->me_type = xstrdup (mnt.mnt_fstype);
- me->me_dev = -1; /* Magic; means not known yet. */
+ me->me_dev = (dev_t) -1; /* Magic; means not known yet. */
me->me_next = NULL;
/* Add to the linked list. */
}
else
{
- me->me_devname = xstrdup (thisent +
+ me->me_devname = xstrdup (thisent +
vmp->vmt_data[VMT_OBJECT].vmt_off);
}
me->me_mountdir = xstrdup (thisent + vmp->vmt_data[VMT_STUB].vmt_off);
me->me_type = xstrdup (fstype_to_string (vmp->vmt_gfstype));
- me->me_dev = -1; /* vmt_fsid might be the info we want. */
+ me->me_dev = (dev_t) -1; /* vmt_fsid might be the info we want. */
me->me_next = NULL;
/* Add to the linked list. */