X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fsighandler.c;h=ceaa4842286ec14f27567fdf56c29188853719f9;hb=94a09b3cac98a3bc1ed580fce16aa9869f83bbaa;hp=988927f01c0c254627e84fd1646d963edb3a7b87;hpb=9c3ece56d20db392610ae3106d570ee47c5831e8;p=i3%2Fi3 diff --git a/src/sighandler.c b/src/sighandler.c index 988927f0..ceaa4842 100644 --- a/src/sighandler.c +++ b/src/sighandler.c @@ -4,8 +4,8 @@ * vim:ts=4:sw=4:expandtab * * i3 - an improved dynamic tiling window manager - * © 2009-2011 Michael Stapelberg and contributors (see also: LICENSE) - * © 2009-2010 Jan-Erik Rediger + * © 2009 Michael Stapelberg and contributors (see also: LICENSE) + * © 2009 Jan-Erik Rediger * * sighandler.c: Interactive crash dialog upon SIGSEGV/SIGABRT/SIGFPE (offers * to restart inplace). @@ -34,8 +34,7 @@ static char *crash_text[] = { "or press", "- 'b' to save a backtrace (needs GDB),", "- 'r' to restart i3 in-place or", - "- 'f' to forget the current layout and restart" -}; + "- 'f' to forget the current layout and restart"}; static int crash_text_longest = 5; static int backtrace_string_index = 3; static int backtrace_done = 0; @@ -71,8 +70,14 @@ static int backtrace(void) { int stdin_pipe[2], stdout_pipe[2]; - pipe(stdin_pipe); - pipe(stdout_pipe); + if (pipe(stdin_pipe) == -1) { + ELOG("Failed to init stdin_pipe\n"); + return -1; + } + if (pipe(stdout_pipe) == -1) { + ELOG("Failed to init stdout_pipe\n"); + return -1; + } /* close standard streams in case i3 is started from a terminal; gdb * needs to run without controlling terminal for it to work properly in @@ -102,8 +107,7 @@ static int backtrace(void) { "-ex", "set logging on", "-ex", "bt full", "-ex", "quit", - NULL - }; + NULL}; execvp(args[0], args); DLOG("Failed to exec GDB\n"); exit(1); @@ -117,7 +121,7 @@ static int backtrace(void) { DLOG("GDB did not run properly\n"); return -1; } else if (stat(filename, &bt) == -1) { - DLOG("GDB executed succesfully, but no backtrace was generated\n"); + DLOG("GDB executed successfully, but no backtrace was generated\n"); return -1; } return 1; @@ -129,11 +133,11 @@ static int backtrace(void) { */ static int sig_draw_window(xcb_window_t win, int width, int height, int font_height, i3String **crash_text_i3strings) { /* re-draw the background */ - xcb_rectangle_t border = { 0, 0, width, height}, - inner = { 2, 2, width - 4, height - 4}; - xcb_change_gc(conn, pixmap_gc, XCB_GC_FOREGROUND, (uint32_t[]){ get_colorpixel("#FF0000") }); + xcb_rectangle_t border = {0, 0, width, height}, + inner = {2, 2, width - 4, height - 4}; + xcb_change_gc(conn, pixmap_gc, XCB_GC_FOREGROUND, (uint32_t[]){get_colorpixel("#FF0000")}); xcb_poly_fill_rectangle(conn, pixmap, pixmap_gc, 1, &border); - xcb_change_gc(conn, pixmap_gc, XCB_GC_FOREGROUND, (uint32_t[]){ get_colorpixel("#000000") }); + xcb_change_gc(conn, pixmap_gc, XCB_GC_FOREGROUND, (uint32_t[]){get_colorpixel("#000000")}); xcb_poly_fill_rectangle(conn, pixmap, pixmap_gc, 1, &inner); /* restore font color */ @@ -151,7 +155,7 @@ static int sig_draw_window(xcb_window_t win, int width, int height, int font_hei set_font_colors(pixmap_gc, get_colorpixel(bt_colour), get_colorpixel("#000000")); draw_text(crash_text_i3strings[i], pixmap, pixmap_gc, - 8, 5 + i * font_height, width - 16); + 8, 5 + i * font_height, width - 16); /* and reset the colour again for other lines */ if (i == backtrace_string_index) @@ -221,10 +225,10 @@ static xcb_window_t open_input_window(xcb_connection_t *conn, Rect screen_rect, xcb_create_window(conn, XCB_COPY_FROM_PARENT, - win, /* the window id */ - root, /* parent == root */ + win, /* the window id */ + root, /* parent == root */ x, y, width, height, /* dimensions */ - 0, /* border = 0, we draw our own */ + 0, /* border = 0, we draw our own */ XCB_WINDOW_CLASS_INPUT_OUTPUT, XCB_WINDOW_CLASS_COPY_FROM_PARENT, /* copy visual from parent */ mask, @@ -238,10 +242,10 @@ static xcb_window_t open_input_window(xcb_connection_t *conn, Rect screen_rect, static void open_popups() { /* width and height of the popup window, so that the text fits in */ - int crash_text_num = sizeof(crash_text) / sizeof(char*); + int crash_text_num = sizeof(crash_text) / sizeof(char *); int height = 13 + (crash_text_num * config.font.height); - int crash_text_length = sizeof(crash_text) / sizeof(char*); + int crash_text_length = sizeof(crash_text) / sizeof(char *); i3String **crash_text_i3strings = smalloc(sizeof(i3String *) * (crash_text_length + 1)); /* Pre-compute i3Strings for our text */ for (int i = 0; i < crash_text_length; ++i) { @@ -300,7 +304,7 @@ void handle_signal(int sig, siginfo_t *info, void *data) { /* Strip off the highest bit (set if the event is generated) */ int type = (event->response_type & 0x7F); if (type == XCB_KEY_PRESS) { - sig_handle_key_press(NULL, conn, (xcb_key_press_event_t*)event); + sig_handle_key_press(NULL, conn, (xcb_key_press_event_t *)event); } free(event); } @@ -323,5 +327,5 @@ void setup_signal_handler(void) { sigaction(SIGABRT, &action, NULL) == -1 || sigaction(SIGFPE, &action, NULL) == -1 || sigaction(SIGSEGV, &action, NULL) == -1) - ELOG("Could not setup signal handler"); + ELOG("Could not setup signal handler.\n"); }