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:
parent
03f5e2b7c5
commit
58ae084c27
10
sysctl.c
10
sysctl.c
@ -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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user