diff options
author | landley <landley@driftwood> | 2006-10-05 16:18:03 -0400 |
---|---|---|
committer | landley <landley@driftwood> | 2006-10-05 16:18:03 -0400 |
commit | 4f344e356d2c36c4b1df46917eaef25f82ca79a9 (patch) | |
tree | cae824af861d5665b1acf1e4b07de86c256c2d0b /lib/getmountlist.c | |
parent | c56215062c961402515daeef8330ed75cd94af29 (diff) | |
download | toybox-4f344e356d2c36c4b1df46917eaef25f82ca79a9.tar.gz |
Infrastructure, first drop of toy shell, and a bit of work on df.
Diffstat (limited to 'lib/getmountlist.c')
-rw-r--r-- | lib/getmountlist.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/getmountlist.c b/lib/getmountlist.c new file mode 100644 index 00000000..a2b0698d --- /dev/null +++ b/lib/getmountlist.c @@ -0,0 +1,39 @@ +/* vi: set ts=4 : */ + +#include "toys.h" + +#include <mntent.h> + +char *path_mounts = "/proc/mounts"; + +// Get a list of mount points from /etc/mtab or /proc/mounts. This returns +// a reversed list, which is good for finding overmounts and such. + +struct mtab_list *getmountlist(int die) +{ + FILE *fp; + struct mtab_list *mtlist, *mt; + struct mntent me; + char evilbuf[2*PATH_MAX]; + + 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))) { + char *str; + + mt = xmalloc(sizeof(struct mtab_list) + strlen(me.mnt_fsname) + + strlen(me.mnt_dir) + strlen(me.mnt_type) + 3); + mt->next = mtlist; + strcpy(mt->type, me.mnt_type); + mt->dir = mt->type + strlen(mt->type) + 1; + strcpy(mt->dir, me.mnt_dir); + mt->device = mt->dir + strlen(mt->dir) + 1; + mt->device = ++str; + strcpy(str, me.mnt_fsname); + mtlist = mt; + } + } + return mtlist; +} |