From 58ae084c2737cdee395915d45dbcb364648ac615 Mon Sep 17 00:00:00 2001 From: Werner Fink Date: Fri, 7 Jul 2017 14:09:11 +0200 Subject: [PATCH] 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 --- sysctl.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sysctl.c b/sysctl.c index 29f31af6..be057229 100644 --- a/sysctl.c +++ b/sysctl.c @@ -158,6 +158,8 @@ static char *StripLeadingAndTrailingSpaces(char *oneline) /* * Read a sysctl setting */ +#define IOBUFSIZ (128<<10) +static char *iobuf; static int ReadSetting(const char *restrict const name) { int rc = 0; @@ -220,6 +222,9 @@ static int ReadSetting(const char *restrict const name) fp = fopen(tmpname, "r"); + if (iobuf) + setvbuf(fp, iobuf, _IOFBF, IOBUFSIZ); + if (!fp) { switch (errno) { case ENOENT: @@ -430,6 +435,9 @@ static int WriteSetting(const char *setting) fp = fopen(tmpname, "w"); + if (iobuf) + setvbuf(fp, iobuf, _IOFBF, IOBUFSIZ); + if (!fp) { switch (errno) { case ENOENT: @@ -793,6 +801,8 @@ int main(int argc, char *argv[]) argc -= optind; argv += optind; + iobuf = (char*)malloc(IOBUFSIZ); /* Allow to fail */ + if (DisplayAllOpt) return DisplayAll(PROC_PATH);