--- util-linux-2.11y/disk-utils/blockdev.c.procpartitions 2002-03-08 17:57:02.000000000 -0500 +++ util-linux-2.11y/disk-utils/blockdev.c 2003-01-13 14:28:41.000000000 -0500 @@ -290,6 +290,7 @@ char ptname[200]; char device[210]; int ma, mi, sz; + char iobuf[32*1024]; procpt = fopen(PROC_PARTITIONS, "r"); if (!procpt) { @@ -297,6 +298,7 @@ progname, PROC_PARTITIONS); exit(1); } + setvbuf(procpt, iobuf, _IOFBF, sizeof(iobuf)); while (fgets(line, sizeof(line), procpt)) { if (sscanf (line, " %d %d %d %[^\n ]", --- util-linux-2.11y/fdisk/fdisk.c.procpartitions 2003-01-13 14:28:41.000000000 -0500 +++ util-linux-2.11y/fdisk/fdisk.c 2003-01-13 14:28:41.000000000 -0500 @@ -2371,12 +2371,14 @@ FILE *procpt; char line[100], ptname[100], devname[120], *s; int ma, mi, sz; + char iobuf[32*1024]; procpt = fopen(PROC_PARTITIONS, "r"); if (procpt == NULL) { fprintf(stderr, _("cannot open %s\n"), PROC_PARTITIONS); return; } + setvbuf(procpt, iobuf, _IOFBF, sizeof(iobuf)); while (fgets(line, sizeof(line), procpt)) { if (sscanf (line, " %d %d %d %[^\n ]", --- util-linux-2.11y/mount/mount_by_label.c.procpartitions 2002-11-26 04:23:49.000000000 -0500 +++ util-linux-2.11y/mount/mount_by_label.c 2003-01-13 14:31:53.000000000 -0500 @@ -136,9 +136,7 @@ char device[110]; int firstPass; int handleOnFirst; -#if 0 char iobuf[32*1024]; /* For setvbuf */ -#endif if (uuidCache) return; @@ -155,7 +153,6 @@ PROC_PARTITIONS); return; } -#if 0 /* Ugly kludge - the contents of /proc/partitions change in time, and this causes failures when the file is not read in one go. In particular, one cannot use stdio on /proc/partitions. @@ -166,9 +163,12 @@ to keep statistics in /proc/partitions. Of course, statistics belong in some /proc/diskstats, not in some /proc file that happened to exist already. */ - +/* Until someone actually implements something else, /proc/partitions _IS_ + /proc/diskstats. And no matter what file we are reading, we will still + need to increase the buffer size, because 8k is just not Enough For + Everyone even if stats aren't in /proc/partitions. +*/ setvbuf(procpt, iobuf, _IOFBF, sizeof(iobuf)); -#endif for (firstPass = 1; firstPass >= 0; firstPass--) { fseek(procpt, 0, SEEK_SET);