From 0fc87a9d985e8bd4f98f77d5130e2515c286518c Mon Sep 17 00:00:00 2001 From: Peter TB Brett Date: Tue, 4 Jan 2011 17:37:34 +0000 Subject: [PATCH] libgeda: Remove some exit() calls and assertions. Try to avoid assertions in libgeda; instead, emit "critical"-level log messages and fail gently. This patch removes a bunch of assertions and calls to exit() from libgeda, in favour of trying to keep going even in the face of programmer errors. Affects-bug: lp-698851 --- libgeda/src/f_print.c | 3 +-- libgeda/src/o_complex_basic.c | 5 ++++- libgeda/src/s_clib.c | 16 ++++++++-------- libgeda/src/s_log.c | 2 +- libgeda/src/s_slib.c | 9 ++------- 5 files changed, 16 insertions(+), 19 deletions(-) diff --git a/libgeda/src/f_print.c b/libgeda/src/f_print.c index 2032ddb62..a8a8261e4 100644 --- a/libgeda/src/f_print.c +++ b/libgeda/src/f_print.c @@ -338,8 +338,7 @@ void f_print_objects (TOPLEVEL *toplevel, FILE *fp, const GList *obj_list, break; default: - fprintf(stderr, "Error type!\n"); - exit(-1); + g_return_if_reached (); break; } iter = g_list_next (iter); diff --git a/libgeda/src/o_complex_basic.c b/libgeda/src/o_complex_basic.c index 48c79c579..6ae71b2de 100644 --- a/libgeda/src/o_complex_basic.c +++ b/libgeda/src/o_complex_basic.c @@ -123,7 +123,10 @@ int world_get_object_glist_bounds(TOPLEVEL *toplevel, const GList *head, /* Find the first object with bounds, and set the bounds variables, then expand as necessary */ while ( s_current != NULL ) { o_current = (OBJECT *) s_current->data; - g_assert (o_current != NULL); + + /* Sanity check */ + g_return_val_if_fail ((o_current != NULL), found); + if ( world_get_single_object_bounds( toplevel, o_current, &rleft, &rtop, &rright, &rbottom) ) { if ( found ) { *left = min( *left, rleft ); diff --git a/libgeda/src/s_clib.c b/libgeda/src/s_clib.c index ccdee58e9..eb37f2547 100644 --- a/libgeda/src/s_clib.c +++ b/libgeda/src/s_clib.c @@ -380,11 +380,11 @@ static gint compare_source_name (gconstpointer a, gconstpointer b) const CLibSource *src1 = a; const CLibSource *src2 = b; - g_assert (src1 != NULL); - g_assert (src2 != NULL); + g_return_val_if_fail ((src1 != NULL), 0); + g_return_val_if_fail ((src2 != NULL), 0); - g_assert (src1->name != NULL); - g_assert (src2->name != NULL); + g_return_val_if_fail ((src1->name != NULL), 0); + g_return_val_if_fail ((src2->name != NULL), 0); return strcasecmp(src1->name, src2->name); } @@ -405,11 +405,11 @@ static gint compare_symbol_name (gconstpointer a, gconstpointer b) const CLibSymbol *sym1 = a; const CLibSymbol *sym2 = b; - g_assert (sym1 != NULL); - g_assert (sym2 != NULL); + g_return_val_if_fail ((sym1 != NULL), 0); + g_return_val_if_fail ((sym2 != NULL), 0); - g_assert (sym1->name != NULL); - g_assert (sym2->name != NULL); + g_return_val_if_fail ((sym1->name != NULL), 0); + g_return_val_if_fail ((sym2->name != NULL), 0); return strcasecmp(sym1->name, sym2->name); } diff --git a/libgeda/src/s_log.c b/libgeda/src/s_log.c index 986180b9e..51eeb9986 100644 --- a/libgeda/src/s_log.c +++ b/libgeda/src/s_log.c @@ -258,7 +258,7 @@ static void s_log_handler (const gchar *log_domain, if (do_logging == FALSE) { return; } - g_assert (logfile_fd != -1); + g_return_if_fail (logfile_fd != -1); status = write (logfile_fd, message, strlen (message)); if (status == -1) { diff --git a/libgeda/src/s_slib.c b/libgeda/src/s_slib.c index d38e0d590..d97a1d9b9 100644 --- a/libgeda/src/s_slib.c +++ b/libgeda/src/s_slib.c @@ -121,10 +121,7 @@ char *s_slib_search_dirs(const char *basename) ptr = opendir(slib[i].dir_name); - if (ptr == NULL) { - fprintf(stderr, "Oops got a null dir_name!\n"); - exit(-1); - } + g_return_val_if_fail ((ptr != NULL), NULL); dptr = readdir(ptr); @@ -506,9 +503,7 @@ char *s_slib_getfiles(char *directory, int flag) whole_dir[count] = g_strdup (dptr->d_name); count++; } else { - fprintf(stderr, - "uggg. too many files in s_slib_getfiles!\n"); - exit(-1); + g_error ("uggg. too many files in s_slib_getfiles!\n"); } } -- 2.11.4.GIT