Xinqi Bao's Git
projects
/
slstatus.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
Fixed possible NULL-deref and removed unnecessary XOpenDisplay()
[slstatus.git]
/
slstatus.c
diff --git
a/slstatus.c
b/slstatus.c
index
c4a9e92
..
47bd4c9
100644
(file)
--- a/
slstatus.c
+++ b/
slstatus.c
@@
-28,6
+28,8
@@
#include "arg.h"
#include "arg.h"
+#define LEN(x) (sizeof (x) / sizeof *(x))
+
struct arg {
const char *(*func)();
const char *fmt;
struct arg {
const char *(*func)();
const char *fmt;
@@
-167,13
+169,13
@@
battery_state(const char *bat)
if (n != 1)
return UNKNOWN_STR;
if (n != 1)
return UNKNOWN_STR;
- for (i = 0; i <
sizeof(map) / sizeof(*
map); i++) {
+ for (i = 0; i <
LEN(
map); i++) {
if (!strcmp(map[i].state, state)) {
break;
}
}
if (!strcmp(map[i].state, state)) {
break;
}
}
- return (i ==
sizeof(map) / sizeof(*
map)) ? "?" : map[i].symbol;
+ return (i ==
LEN(
map)) ? "?" : map[i].symbol;
}
static const char *
}
static const char *
@@
-378,10
+380,9
@@
kernel_release(void)
static const char *
keyboard_indicators(void)
{
static const char *
keyboard_indicators(void)
{
- Display *dpy = XOpenDisplay(NULL);
XKeyboardState state;
XKeyboardState state;
+
XGetKeyboardControl(dpy, &state);
XGetKeyboardControl(dpy, &state);
- XCloseDisplay(dpy);
switch (state.led_mask) {
case 1:
switch (state.led_mask) {
case 1:
@@
-745,7
+746,7
@@
vol_perc(const char *card)
close(afd);
return UNKNOWN_STR;
}
close(afd);
return UNKNOWN_STR;
}
- for (i = 0; i <
(sizeof(vnames) / sizeof((vnames[0]))
); i++) {
+ for (i = 0; i <
LEN(vnames
); i++) {
if (devmask & (1 << i) && !strcmp("vol", vnames[i])) {
if (ioctl(afd, MIXER_READ(i), &v) == -1) {
warn("vol_perc: ioctl");
if (devmask & (1 << i) && !strcmp("vol", vnames[i])) {
if (ioctl(afd, MIXER_READ(i), &v) == -1) {
warn("vol_perc: ioctl");
@@
-877,6
+878,10
@@
main(int argc, char *argv[])
if (!sflag) {
dpy = XOpenDisplay(NULL);
if (!sflag) {
dpy = XOpenDisplay(NULL);
+ if (!dpy) {
+ fprintf(stderr, "slstatus: cannot open display");
+ exit(1);
+ }
}
setlocale(LC_ALL, "");
}
setlocale(LC_ALL, "");
@@
-884,8
+889,7
@@
main(int argc, char *argv[])
while (!done) {
status_string[0] = '\0';
while (!done) {
status_string[0] = '\0';
- for (element = status_string, i = len = 0;
- i < sizeof(args) / sizeof(args[0]);
+ for (element = status_string, i = len = 0; i < LEN(args);
++i, element += len) {
argument = args[i];
len = snprintf(element, sizeof(status_string)-1 - len,
++i, element += len) {
argument = args[i];
len = snprintf(element, sizeof(status_string)-1 - len,