sysctl: Print lines longer than 1024 chars
as well do not open /proc/sys files if only the names of the system control names of the kernel parameters should be shown. Avoid leaking tmpname in case of a pattern mismatch. Signed-off-by: Werner Fink <werner@suse.de>
This commit is contained in:
parent
c409f5a433
commit
3fd84670b2
30
sysctl.c
30
sysctl.c
@ -209,8 +209,13 @@ static int ReadSetting(const char *restrict const name)
|
||||
}
|
||||
|
||||
if (pattern && !pattern_match(outname, pattern)) {
|
||||
free(outname);
|
||||
return 0;
|
||||
rc = 0;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (NameOnly) {
|
||||
fprintf(stdout, "%s\n", outname);
|
||||
goto out;
|
||||
}
|
||||
|
||||
fp = fopen(tmpname, "r");
|
||||
@ -239,25 +244,26 @@ static int ReadSetting(const char *restrict const name)
|
||||
* /sbin/sysctl -a | egrep -6 dev.cdrom.info
|
||||
*/
|
||||
do {
|
||||
if (NameOnly) {
|
||||
fprintf(stdout, "%s\n", outname);
|
||||
} else {
|
||||
/* already has the \n in it */
|
||||
char *nlptr;
|
||||
if (PrintName) {
|
||||
fprintf(stdout, "%s = %s",
|
||||
outname, inbuf);
|
||||
if (inbuf[strlen(inbuf) - 1] != '\n')
|
||||
fprintf(stdout, "%s = ", outname);
|
||||
do {
|
||||
fprintf(stdout, "%s", inbuf);
|
||||
nlptr = &inbuf[strlen(inbuf) - 1];
|
||||
/* already has the \n in it */
|
||||
if (*nlptr == '\n')
|
||||
break;
|
||||
} while (fgets(inbuf, sizeof inbuf - 1, fp));
|
||||
if (*nlptr != '\n')
|
||||
putchar('\n');
|
||||
} else {
|
||||
if (!PrintNewline) {
|
||||
char *nlptr =
|
||||
strchr(inbuf, '\n');
|
||||
nlptr = strchr(inbuf, '\n');
|
||||
if (nlptr)
|
||||
*nlptr = '\0';
|
||||
}
|
||||
fprintf(stdout, "%s", inbuf);
|
||||
}
|
||||
}
|
||||
} while (fgets(inbuf, sizeof inbuf - 1, fp));
|
||||
} else {
|
||||
switch (errno) {
|
||||
|
Loading…
Reference in New Issue
Block a user