Xinqi Bao's Git
projects
/
slstatus.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
inititalize run_command()'s buf to UNKNOWN_STR by default
[slstatus.git]
/
slstatus.c
diff --git
a/slstatus.c
b/slstatus.c
index
2b63be4
..
b593765
100644
(file)
--- a/
slstatus.c
+++ b/
slstatus.c
@@
-30,7
+30,6
@@
#include "extern/arg.h"
#include "extern/strlcat.h"
#include "extern/arg.h"
#include "extern/strlcat.h"
-#include "extern/strlcpy.h"
#include "extern/concat.h"
struct arg {
#include "extern/concat.h"
struct arg {
@@
-406,19
+405,22
@@
ram_used(void)
static char *
run_command(const char *cmd)
{
static char *
run_command(const char *cmd)
{
+ char *nlptr;
FILE *fp;
FILE *fp;
- char buf[1024] =
"n/a"
;
+ char buf[1024] =
UNKNOWN_STR
;
fp = popen(cmd, "r");
if (fp == NULL) {
warn("Failed to get command output for %s", cmd);
return smprintf(UNKNOWN_STR);
}
fp = popen(cmd, "r");
if (fp == NULL) {
warn("Failed to get command output for %s", cmd);
return smprintf(UNKNOWN_STR);
}
- fgets(buf, sizeof(buf)
-1
, fp);
+ fgets(buf, sizeof(buf), fp);
pclose(fp);
pclose(fp);
-
buf[strlen(buf)] = '\0';
buf[strlen(buf)] = '\0';
- strtok(buf, "\n");
+
+ if ((nlptr = strstr(buf, "\n")) != NULL) {
+ nlptr[0] = '\0';
+ }
return smprintf("%s", buf);
}
return smprintf("%s", buf);
}
@@
-759,7
+761,7
@@
int
main(int argc, char *argv[])
{
unsigned short int i;
main(int argc, char *argv[])
{
unsigned short int i;
- char status_string[
4096
];
+ char status_string[
2048
];
char *res, *element;
struct arg argument;
struct sigaction act;
char *res, *element;
struct arg argument;
struct sigaction act;
@@
-811,7
+813,8
@@
main(int argc, char *argv[])
element = smprintf(UNKNOWN_STR);
warnx("Failed to format output");
}
element = smprintf(UNKNOWN_STR);
warnx("Failed to format output");
}
- strlcat(status_string, element, sizeof(status_string));
+ if (strlcat(status_string, element, sizeof(status_string)) >= sizeof(status_string))
+ warnx("Output too long");
free(res);
free(element);
}
free(res);
free(element);
}