/* 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 "mountlist.h"
-#include "unlocked-io.h"
+
#ifdef STDC_HEADERS
# include <stdlib.h>
#else
# include <strings.h>
#endif
+#include "xalloc.h"
#ifndef strstr
char *strstr ();
#endif
-char *xmalloc ();
-char *xrealloc ();
-char *xstrdup ();
#include <errno.h>
#ifndef errno
# include <sys/mntent.h>
#endif
+#undef MNT_IGNORE
#if defined MNTOPT_IGNORE && defined HAVE_HASMNTOPT
# define MNT_IGNORE(M) hasmntopt ((M), MNTOPT_IGNORE)
#else
# define MNT_IGNORE(M) 0
#endif
+#include "mountlist.h"
+#include "unlocked-io.h"
+
#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
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;