Mercurial > hg > toybox
view lib/getmountlist.c @ 1187:18cc63376e66 draft
init: don't use VT_OPENQRY.
The original codepath checks if there is a VT available,
and if there isn't sets TERM to vt102 (unless TERM is set to something
other than "linux").
Otherwise, TERM is set to "linux" if it is not already set.
However, we can rely on getty/... to set TERM if "linux" is not suitable.
This has the benefit of dropping a slightly messy section.
author | Isaac Dunham <ibid.ag@gmail.com> |
---|---|
date | Tue, 28 Jan 2014 17:46:14 -0600 |
parents | 11cf9b97fae7 |
children | b2cc738d3cfc |
line wrap: on
line source
/* getmountlist.c - Get a linked list of mount points, with stat information. * * Copyright 2006 Rob Landley <rob@landley.net> */ #include "toys.h" #include <mntent.h> // 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 *xgetmountlist(char *path) { struct mtab_list *mtlist, *mt; struct mntent *me; FILE *fp; if (!path) path = "/proc/mounts"; if (!(fp = setmntent(path, "r"))) perror_exit("bad %s", path); // The "test" part of the loop is done before the first time through and // again after each "increment", so putting the actual load there avoids // duplicating it. If the load was NULL, the loop stops. 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; }