better error handling

This commit is contained in:
Sascha Kruse 2012-12-19 22:23:40 +01:00
parent 8617ce7b2d
commit aa514c94eb
2 changed files with 27 additions and 6 deletions

30
dunst.c
View File

@ -13,6 +13,7 @@
#include <sys/time.h> #include <sys/time.h>
#include <regex.h> #include <regex.h>
#include <math.h> #include <math.h>
#include <errno.h>
#include <signal.h> #include <signal.h>
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <X11/XKBlib.h> #include <X11/XKBlib.h>
@ -33,6 +34,7 @@
#include "options.h" #include "options.h"
#define INRECT(x,y,rx,ry,rw,rh) ((x) >= (rx) && (x) < (rx)+(rw) && (y) >= (ry) && (y) < (ry)+(rh)) #define INRECT(x,y,rx,ry,rw,rh) ((x) >= (rx) && (x) < (rx)+(rw) && (y) >= (ry) && (y) < (ry)+(rh))
#define LENGTH(X) (sizeof X / sizeof X[0]) #define LENGTH(X) (sizeof X / sizeof X[0])
#define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MIN(a,b) ((a) < (b) ? (a) : (b))
@ -175,22 +177,37 @@ void context_menu(void) {
char buf[1024]; char buf[1024];
int child_io[2]; int child_io[2];
int parent_io[2]; int parent_io[2];
pipe(child_io); if (pipe(child_io) != 0) {
pipe(parent_io); PERR("pipe()", errno);
return;
}
if (pipe(parent_io) != 0) {
PERR("pipe()", errno);
return;
}
int pid = fork(); int pid = fork();
if (pid == 0) { if (pid == 0) {
close(child_io[1]); close(child_io[1]);
close(parent_io[0]); close(parent_io[0]);
close(0); close(0);
dup(child_io[0]); if (dup(child_io[0]) == -1) {
PERR("dup()", errno);
exit(EXIT_FAILURE);
}
close(1); close(1);
dup(parent_io[1]); if (dup(parent_io[1]) == -1) {
PERR("dup()", errno);
exit(EXIT_FAILURE);
}
execvp(dmenu_cmd[0], dmenu_cmd); execvp(dmenu_cmd[0], dmenu_cmd);
} else { } else {
close(child_io[0]); close(child_io[0]);
close(parent_io[1]); close(parent_io[1]);
write(child_io[1], dmenu_input, strlen(dmenu_input)); size_t wlen = strlen(dmenu_input);
if (write(child_io[1], dmenu_input, wlen) != wlen) {
PERR("write()", errno);
}
close(child_io[1]); close(child_io[1]);
size_t len = read(parent_io[0], buf, 1023); size_t len = read(parent_io[0], buf, 1023);
@ -199,7 +216,7 @@ void context_menu(void) {
buf[len - 1] = '\0'; buf[len - 1] = '\0';
} }
close(child_io[1]); close(parent_io[0]);
int browser_pid = fork(); int browser_pid = fork();
@ -1691,6 +1708,7 @@ void load_options(char *cmdline_config_path)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
now = time(&now); now = time(&now);
r_line_cache_init(&line_cache); r_line_cache_init(&line_cache);

View File

@ -6,6 +6,9 @@
#include "draw.h" #include "draw.h"
#define ERR(msg) printf("%s : %d\n", (msg), __LINE__)
#define PERR(msg, errnum) printf("(%d) %s : %s\n", __LINE__, (msg), (strerror(errnum)))
#define LOW 0 #define LOW 0
#define NORM 1 #define NORM 1
#define CRIT 2 #define CRIT 2