Mercurial > hg > toybox
view lib/getmountlist.c @ 293:6baa13382880
Sort was including the trailing comma and getting the order wrong.
(Specifically, it was comparing "sh," with "sha1sum," and putting sha1sum first
in generated/newtoys.h so the binary search wasn't finding sha1sum. Alas, you
can't feed separate beginning and ending delimiters to "sort -t". The fix is
to copy the appropriate field out with sed, duplicate it at the start of the
string where it's easy to compare, and then remove it again with a second
sed after the sort.
author | Rob Landley <rob@landley.net> |
---|---|
date | Mon, 12 May 2008 01:23:19 -0500 |
parents | fc9c0503d5e2 |
children | ab2636878ba0 |
line wrap: on
line source
/* vi: set sw=4 ts=4 : */ /* 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> char *path_mounts = "/proc/mounts"; // 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. 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))) { 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 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; strcpy(mt->device, me.mnt_fsname); mtlist = mt; } } return mtlist; }