From 0aa636b20728dfcacd0f1c28b15bb1dd26de33f7 Mon Sep 17 00:00:00 2001 From: Orestis Floros Date: Wed, 4 Apr 2018 18:12:44 +0300 Subject: [PATCH] Prefer compiler warnings to assertions for unhandled switch cases MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Using 'default:' cases can hide logical errors which would lead to i3 crashes for users. With this change the compiler will print a warning when a case is not handled. For example, if I add a new value in the Font.type enum: ../../i3/libi3/font.c: In function ‘draw_text’: ../../i3/libi3/font.c:378:5: warning: enumeration value ‘NEWFONT’ not handled in switch [-Wswitch] switch (savedFont->type) { ^~~~~~ --- libi3/font.c | 14 +------------- src/click.c | 3 --- src/con.c | 12 ++++-------- src/ipc.c | 4 ---- 4 files changed, 5 insertions(+), 28 deletions(-) diff --git a/libi3/font.c b/libi3/font.c index 81091ea7..aedd4b32 100644 --- a/libi3/font.c +++ b/libi3/font.c @@ -283,9 +283,6 @@ void free_font(void) { /* Free the font description */ pango_font_description_free(savedFont->specific.pango_desc); break; - default: - assert(false); - break; } savedFont = NULL; @@ -315,9 +312,6 @@ void set_font_colors(xcb_gcontext_t gc, color_t foreground, color_t background) pango_font_green = foreground.green; pango_font_blue = foreground.blue; break; - default: - assert(false); - break; } } @@ -388,8 +382,6 @@ void draw_text(i3String *text, xcb_drawable_t drawable, xcb_gcontext_t gc, draw_text_pango(i3string_as_utf8(text), i3string_get_num_bytes(text), drawable, visual, x, y, max_width, i3string_is_markup(text)); return; - default: - assert(false); } } @@ -425,8 +417,6 @@ void draw_text_ascii(const char *text, xcb_drawable_t drawable, draw_text_pango(text, strlen(text), drawable, root_visual_type, x, y, max_width, false); return; - default: - assert(false); } } @@ -519,8 +509,6 @@ int predict_text_width(i3String *text) { /* Calculate extents using Pango */ return predict_text_width_pango(i3string_as_utf8(text), i3string_get_num_bytes(text), i3string_is_markup(text)); - default: - assert(false); - return 0; } + assert(false); } diff --git a/src/click.c b/src/click.c index 656fb8db..c2b38d4d 100644 --- a/src/click.c +++ b/src/click.c @@ -44,9 +44,6 @@ static bool tiling_resize_for_border(Con *con, border_t border, xcb_button_press case BORDER_BOTTOM: search_direction = D_DOWN; break; - default: - assert(false); - break; } bool res = resize_find_tiling_participants(&first, &second, search_direction, false); diff --git a/src/con.c b/src/con.c index f57f0cb3..2180ad88 100644 --- a/src/con.c +++ b/src/con.c @@ -1413,20 +1413,16 @@ orientation_t con_orientation(Con *con) { return HORIZ; case L_DEFAULT: - DLOG("Someone called con_orientation() on a con with L_DEFAULT, this is a bug in the code.\n"); + ELOG("Someone called con_orientation() on a con with L_DEFAULT, this is a bug in the code.\n"); assert(false); - return HORIZ; case L_DOCKAREA: case L_OUTPUT: - DLOG("con_orientation() called on dockarea/output (%d) container %p\n", con->layout, con); - assert(false); - return HORIZ; - - default: - DLOG("con_orientation() ran into default\n"); + ELOG("con_orientation() called on dockarea/output (%d) container %p\n", con->layout, con); assert(false); } + /* should not be reached */ + assert(false); } /* diff --git a/src/ipc.c b/src/ipc.c index d422217e..25da1617 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -268,10 +268,6 @@ void dump_node(yajl_gen gen, struct Con *con, bool inplace_restart) { case CT_DOCKAREA: ystr("dockarea"); break; - default: - DLOG("About to dump unknown container type=%d. This is a bug.\n", con->type); - assert(false); - break; } /* provided for backwards compatibility only. */ -- 2.39.5