Mercurial > hg > octave-lyh > gnulib-hg
changeset 4287:0c926607b93d
Merge change from Coreutils.
(read_filesystem_list) [MOUNTED_VMOUNT]: Detect any
error from mntctl.
Use mntctl's return value to drive the entry-processing loop, since
we can't rely on the value of the vmt_length member in the last
entry. On some systems doing so could result in exhausting
virtual memory. Based in part on a patch from Mike Jetzer.
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Sat, 05 Apr 2003 06:46:00 +0000 |
parents | 30efb146649e |
children | 4e7deb01d237 |
files | lib/mountlist.c |
diffstat | 1 files changed, 16 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/mountlist.c +++ b/lib/mountlist.c @@ -1,5 +1,5 @@ /* mountlist.c -- return a list of mounted filesystems - Copyright (C) 1991, 1992, 1997-2002 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 @@ -730,16 +730,27 @@ 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;