Increase standard I/O buffer a lot to be able to

read huge informations at once as otherwise all files below
/proc/sys, not using the seq_file API at the kernel side,
will return EOF on a second read.

Signed-off-by: Werner Fink <werner@suse.de>
This commit is contained in:
Werner Fink 2017-07-07 14:09:11 +02:00 committed by Craig Small
parent 03f5e2b7c5
commit 58ae084c27

View File

@ -158,6 +158,8 @@ static char *StripLeadingAndTrailingSpaces(char *oneline)
/* /*
* Read a sysctl setting * Read a sysctl setting
*/ */
#define IOBUFSIZ (128<<10)
static char *iobuf;
static int ReadSetting(const char *restrict const name) static int ReadSetting(const char *restrict const name)
{ {
int rc = 0; int rc = 0;
@ -220,6 +222,9 @@ static int ReadSetting(const char *restrict const name)
fp = fopen(tmpname, "r"); fp = fopen(tmpname, "r");
if (iobuf)
setvbuf(fp, iobuf, _IOFBF, IOBUFSIZ);
if (!fp) { if (!fp) {
switch (errno) { switch (errno) {
case ENOENT: case ENOENT:
@ -430,6 +435,9 @@ static int WriteSetting(const char *setting)
fp = fopen(tmpname, "w"); fp = fopen(tmpname, "w");
if (iobuf)
setvbuf(fp, iobuf, _IOFBF, IOBUFSIZ);
if (!fp) { if (!fp) {
switch (errno) { switch (errno) {
case ENOENT: case ENOENT:
@ -793,6 +801,8 @@ int main(int argc, char *argv[])
argc -= optind; argc -= optind;
argv += optind; argv += optind;
iobuf = (char*)malloc(IOBUFSIZ); /* Allow to fail */
if (DisplayAllOpt) if (DisplayAllOpt)
return DisplayAll(PROC_PATH); return DisplayAll(PROC_PATH);