Mercurial > hg > toybox
view lib/getmountlist.c @ 315:aaac01796688
Upgrade patch to detect hunks that start after a false start.
Imagine a hunk that starts with a blank line, but the site to patch starts
with two blank lines. Before we'd read the first blank line, think it was the
start of the hunk and buffer it, read the second blank line, notice that it
didn't match the second line of the hunk, and discard _both_ buffered lines of
context (writing them to the output file) without checking that one of the
later context lines might have been the real start of the hunk.
Make it re-check the rest of the buffered context for matches each time it
discards a line of buffered context.
author | Rob Landley <rob@landley.net> |
---|---|
date | Thu, 23 Oct 2008 16:44:30 -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; }