From: Ben Pfaff Date: Thu, 24 Jan 2013 22:17:21 +0000 (-0800) Subject: vlog: New function vlog_set_levels_from_string_assert(). X-Git-Tag: sliver-openvswitch-1.10.90-1~11^2~97 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=316bd0f8229ec252ce714ca2ece8367a49d929c3;p=sliver-openvswitch.git vlog: New function vlog_set_levels_from_string_assert(). Two of the users of vlog_set_levels_from_string() in the tests could have silently failed, if their arguments were invalid. This avoids that problem (and a memory leak). Found by Coverity. Signed-off-by: Ben Pfaff Acked-by: Ethan Jackson --- diff --git a/lib/vlog.c b/lib/vlog.c index 7867b070a..8bc993873 100644 --- a/lib/vlog.c +++ b/lib/vlog.c @@ -431,6 +431,16 @@ exit: return msg; } +/* Set debugging levels. Abort with an error message if 's' is invalid. */ +void +vlog_set_levels_from_string_assert(const char *s) +{ + char *error = vlog_set_levels_from_string(s); + if (error) { + ovs_fatal(0, "%s", error); + } +} + /* If 'arg' is null, configure maximum verbosity. Otherwise, sets * configuration according to 'arg' (see vlog_set_levels_from_string()). */ void diff --git a/lib/vlog.h b/lib/vlog.h index 259577206..ab746c8ec 100644 --- a/lib/vlog.h +++ b/lib/vlog.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc. + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -114,7 +114,8 @@ struct vlog_rate_limit { enum vlog_level vlog_get_level(const struct vlog_module *, enum vlog_facility); void vlog_set_levels(struct vlog_module *, enum vlog_facility, enum vlog_level); -char *vlog_set_levels_from_string(const char *); +char *vlog_set_levels_from_string(const char *) WARN_UNUSED_RESULT; +void vlog_set_levels_from_string_assert(const char *); char *vlog_get_levels(void); bool vlog_is_enabled(const struct vlog_module *, enum vlog_level); bool vlog_should_drop(const struct vlog_module *, enum vlog_level, diff --git a/tests/test-odp.c b/tests/test-odp.c index 5ed31a9e1..268a10518 100644 --- a/tests/test-odp.c +++ b/tests/test-odp.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012 Nicira, Inc. + * Copyright (c) 2011, 2012, 2013 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,7 +32,7 @@ parse_keys(void) struct ds in; ds_init(&in); - vlog_set_levels_from_string("odp_util:console:dbg"); + vlog_set_levels_from_string_assert("odp_util:console:dbg"); while (!ds_get_test_line(&in, stdin)) { enum odp_key_fitness fitness; struct ofpbuf odp_key; @@ -98,7 +98,7 @@ parse_actions(void) struct ds in; ds_init(&in); - vlog_set_levels_from_string("odp_util:console:dbg"); + vlog_set_levels_from_string_assert("odp_util:console:dbg"); while (!ds_get_test_line(&in, stdin)) { struct ofpbuf odp_actions; struct ds out;