]> git.sur5r.net Git - i3/i3/commitdiff
Prefer compiler warnings to assertions for unhandled switch cases 3223/head
authorOrestis Floros <orestisf1993@gmail.com>
Wed, 4 Apr 2018 15:12:44 +0000 (18:12 +0300)
committerOrestis Floros <orestisf1993@gmail.com>
Wed, 4 Apr 2018 16:20:55 +0000 (19:20 +0300)
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
src/click.c
src/con.c
src/ipc.c

index 81091ea74a31da11d392864c1158ed387b0da1cd..aedd4b321f5ea73f2e8e0b8fb1134e532afe8420 100644 (file)
@@ -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);
 }
index 656fb8db399d03bb0b6c3b9da4cbf4afd05177f1..c2b38d4dd69d1ebfe5774e223df1ccb88e02d12a 100644 (file)
@@ -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);
index f57f0cb39bd094ef67da6904e0bbd60e5e6a24c1..2180ad8816ab005af8fd3e1b5175e112a4de897d 100644 (file)
--- 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);
 }
 
 /*
index d422217e69ba3b23281ab48e47f71fa29c3ddc48..25da16170129594f75416ec2bb76cc0ccec4f253 100644 (file)
--- 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. */