better error handling
This commit is contained in:
parent
8617ce7b2d
commit
aa514c94eb
30
dunst.c
30
dunst.c
@ -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);
|
||||||
|
3
dunst.h
3
dunst.h
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user