Mercurial > hg > toybox
changeset 897:849e14fecf2b
Convert getmountlist() to xgetmountlist().
author | Rob Landley <rob@landley.net> |
---|---|
date | Fri, 10 May 2013 18:57:01 -0500 |
parents | 79855f5dc085 |
children | f6db08574875 |
files | lib/getmountlist.c lib/lib.h toys/posix/df.c |
diffstat | 3 files changed, 23 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/getmountlist.c Fri May 10 18:54:14 2013 -0500 +++ b/lib/getmountlist.c Fri May 10 18:57:01 2013 -0500 @@ -7,35 +7,32 @@ #include <mntent.h> -// Get a list of mount points from /etc/mtab or /proc/mounts, including -// statvfs() information. This returns a reversed list, which is good for -// finding overmounts and such. +// Get list of mounted filesystems, including stat and statvfs info. +// Returns a reversed list, which is good for finding overmounts and such. -struct mtab_list *getmountlist(int die) +struct mtab_list *xgetmountlist(void) { + struct mtab_list *mtlist, *mt; + struct mntent *me; FILE *fp; - struct mtab_list *mtlist, *mt; - struct mntent me; - char evilbuf[2*PATH_MAX], *path_mounts = "/proc/mounts"; + + if (!(fp = setmntent("/proc/mounts", "r"))) perror_exit("bad /proc/mounts"); - mtlist = 0; - if (!(fp = setmntent(path_mounts, "r"))) { - if (die) error_exit("cannot open %s", path_mounts); - } else { - while (getmntent_r(fp, &me, evilbuf, sizeof(evilbuf))) { - mt = xzalloc(sizeof(struct mtab_list) + strlen(me.mnt_fsname) + - strlen(me.mnt_dir) + strlen(me.mnt_type) + 3); - mt->next = mtlist; - // Get information about this filesystem. Yes, we need both. - stat(me.mnt_dir, &(mt->stat)); - statvfs(me.mnt_dir, &(mt->statvfs)); - // Remember information from /proc/mounts - mt->dir = stpcpy(mt->type, me.mnt_type) + 1; - mt->device = stpcpy(mt->dir, me.mnt_dir) + 1; - strcpy(mt->device, me.mnt_fsname); - mtlist = mt; - } + for (mtlist = 0; me = getmntent(fp); mtlist = mt) { + mt = xzalloc(sizeof(struct mtab_list) + strlen(me->mnt_fsname) + + strlen(me->mnt_dir) + strlen(me->mnt_type) + 3); + mt->next = mtlist; + + // Collect details about mounted filesystem (don't bother for /etc/fstab). + stat(me->mnt_dir, &(mt->stat)); + statvfs(me->mnt_dir, &(mt->statvfs)); + + // Remember information from /proc/mounts + mt->dir = stpcpy(mt->type, me->mnt_type) + 1; + mt->device = stpcpy(mt->dir, me->mnt_dir) + 1; + strcpy(mt->device, me->mnt_fsname); } endmntent(fp); + return mtlist; }
--- a/lib/lib.h Fri May 10 18:54:14 2013 -0500 +++ b/lib/lib.h Fri May 10 18:57:01 2013 -0500 @@ -167,7 +167,7 @@ char type[0]; }; -struct mtab_list *getmountlist(int die); +struct mtab_list *xgetmountlist(void); void bunzipStream(int src_fd, int dst_fd);
--- a/toys/posix/df.c Fri May 10 18:54:14 2013 -0500 +++ b/toys/posix/df.c Fri May 10 18:57:01 2013 -0500 @@ -108,7 +108,7 @@ TT.units); } else puts("Filesystem\t1K-blocks\tUsed Available Use% Mounted on"); - mtlist = getmountlist(1); + mtlist = xgetmountlist(); // If we have a list of filesystems on the command line, loop through them. if (*toys.optargs) {