/* mountlist.c -- return a list of mounted filesystems
- Copyright (C) 1991, 1992, 1997-2001 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1992, 1997-2003 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
#include <stdio.h>
#include <sys/types.h>
+#include <stdlib.h>
+#include <string.h>
-
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-#else
-void free ();
-#endif
-#if defined STDC_HEADERS || defined HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
#include "xalloc.h"
#ifndef strstr
remove. Specifically, automount create normal NFS mounts.
*/
- if(listmntent(&mntlist, KMTAB, NULL, NULL) < 0)
+ if (listmntent (&mntlist, KMTAB, NULL, NULL) < 0)
return NULL;
for (p = mntlist; p; p = p->next) {
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 = 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_dummy = ME_DUMMY (me->me_devname, me->me_type);
me->me_remote = ME_REMOTE (me->me_devname, me->me_type);
me->me_dev = -1;
*mtail = me;
mtail = &me->me_next;
}
- freemntlist(mntlist);
+ freemntlist (mntlist);
}
#endif
while ((mnt = getmntent (fp)))
{
- me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry));
+ me = 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);
{
char *fs_type = fsp_to_string (fsp);
- me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry));
+ me = xmalloc (sizeof (struct mount_entry));
me->me_devname = xstrdup (fsp->f_mntfromname);
me->me_mountdir = xstrdup (fsp->f_mntonname);
me->me_type = fs_type;
0 < (val = getmnt (&offset, &fsd, sizeof (fsd), NOSTAT_MANY,
(char *) 0)))
{
- me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry));
+ me = xmalloc (sizeof (struct mount_entry));
me->me_devname = xstrdup (fsd.fd_req.devname);
me->me_mountdir = xstrdup (fsd.fd_req.path);
me->me_type = gt_names[fsd.fd_req.fstype];
{
struct rootdir_entry *re;
- re = (struct rootdir_entry *) xmalloc (sizeof (struct rootdir_entry));
+ re = xmalloc (sizeof (struct rootdir_entry));
re->name = name;
re->dev = statbuf.st_dev;
re->ino = statbuf.st_ino;
if (re->dev == fi.dev && re->ino == fi.root)
break;
- me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry));
+ me = xmalloc (sizeof (struct mount_entry));
me->me_devname = xstrdup (fi.device_name[0] != '\0' ? fi.device_name : fi.fsh_name);
me->me_mountdir = xstrdup (re != NULL ? re->name : fi.fsh_name);
me->me_type = xstrdup (fi.fsh_name);
int numsys, counter, bufsize;
struct statfs *stats;
- numsys = getfsstat ((struct statfs *)0, 0L, MNT_WAIT);
+ numsys = getfsstat ((struct statfs *)0, 0L, MNT_NOWAIT);
if (numsys < 0)
return (NULL);
bufsize = (1 + numsys) * sizeof (struct statfs);
- stats = (struct statfs *)xmalloc (bufsize);
- numsys = getfsstat (stats, bufsize, MNT_WAIT);
+ stats = xmalloc (bufsize);
+ numsys = getfsstat (stats, bufsize, MNT_NOWAIT);
if (numsys < 0)
{
for (counter = 0; counter < numsys; counter++)
{
- me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry));
+ me = xmalloc (sizeof (struct mount_entry));
me->me_devname = xstrdup (stats[counter].f_mntfromname);
me->me_mountdir = xstrdup (stats[counter].f_mntonname);
me->me_type = xstrdup (FS_TYPE (stats[counter]));
while (fread (&mnt, sizeof mnt, 1, fp) > 0)
{
- me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry));
+ me = xmalloc (sizeof (struct mount_entry));
# ifdef GETFSTYP /* SVR3. */
me->me_devname = xstrdup (mnt.mt_dev);
# else
if (ferror (fp))
{
+ /* The last fread() call must have failed. */
int saved_errno = errno;
fclose (fp);
errno = saved_errno;
#ifdef MOUNTED_GETMNTTBL /* DolphinOS goes it's own way */
{
- struct mntent **mnttbl=getmnttbl(),**ent;
+ struct mntent **mnttbl = getmnttbl (), **ent;
for (ent=mnttbl;*ent;ent++)
{
- me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry));
+ me = xmalloc (sizeof (struct mount_entry));
me->me_devname = xstrdup ( (*ent)->mt_resource);
- me->me_mountdir = xstrdup( (*ent)->mt_directory);
+ me->me_mountdir = xstrdup ( (*ent)->mt_directory);
me->me_type = xstrdup ((*ent)->mt_fstype);
me->me_dummy = ME_DUMMY (me->me_devname, me->me_type);
me->me_remote = ME_REMOTE (me->me_devname, me->me_type);
*mtail = me;
mtail = &me->me_next;
}
- endmnttbl();
+ endmnttbl ();
}
#endif
{
while ((ret = getmntent (fp, &mnt)) == 0)
{
- me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry));
+ me = xmalloc (sizeof (struct mount_entry));
me->me_devname = xstrdup (mnt.mnt_special);
me->me_mountdir = xstrdup (mnt.mnt_mountp);
me->me_type = xstrdup (mnt.mnt_fstype);
int bufsize;
char *entries, *thisent;
struct vmount *vmp;
+ int n_entries;
+ int i;
/* Ask how many bytes to allocate for the mounted filesystem info. */
- mntctl (MCTL_QUERY, sizeof bufsize, (struct vmount *) &bufsize);
+ if (mntctl (MCTL_QUERY, sizeof bufsize, (struct vmount *) &bufsize) != 0)
+ return NULL;
entries = xmalloc (bufsize);
/* Get the list of mounted filesystems. */
- mntctl (MCTL_QUERY, bufsize, (struct vmount *) entries);
+ n_entries = mntctl (MCTL_QUERY, bufsize, (struct vmount *) entries);
+ if (n_entries < 0)
+ {
+ int saved_errno = errno;
+ free (entries);
+ errno = saved_errno;
+ return NULL;
+ }
- for (thisent = entries; thisent < entries + bufsize;
- thisent += vmp->vmt_length)
+ for (i = 0, thisent = entries;
+ i < n_entries;
+ i++, thisent += vmp->vmt_length)
{
char *options, *ignore;
vmp = (struct vmount *) thisent;
- me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry));
+ me = xmalloc (sizeof (struct mount_entry));
if (vmp->vmt_flags & MNT_REMOTE)
{
char *host, *path;