Op Thu, 31 Aug 2017 14:08:07 +0200 schreef Otto Moerbeek <o...@drijf.net>:
/usr/src/usr.sbin/sasyncd/carp.c:157:12: warning: comparison of
unsigned enum expression < 0 is always false [-Wtautological-compare]
if (state < 0 || state > FAIL)
~~~~~ ^ ~
/usr/src/usr.sbin/sasyncd/carp.c:166:20: warning: comparison of
unsigned enum expression < 0 is always false [-Wtautological-compare]
if (current_state < 0 || current_state > FAIL) {
~~~~~~~~~~~~~ ^ ~
this warning is a tiny bit interesting. A compiler is free to choose
the type of the enum, as long as it can represent all given values.
So another compiler might choose not to make it unsigned. So I came up
with this fix that is not depending on the signedness of the type. But
most of the time avoiding enum is better, I suppose.
-Otto
Index: carp.c
===================================================================
RCS file: /cvs/src/usr.sbin/sasyncd/carp.c,v
retrieving revision 1.15
diff -u -p -r1.15 carp.c
--- carp.c 27 Aug 2016 04:21:08 -0000 1.15
+++ carp.c 31 Aug 2017 12:03:59 -0000
@@ -154,7 +154,7 @@ carp_state_name(enum RUNSTATE state)
{
static const char *carpstate[] = CARPSTATES;
- if (state < 0 || state > FAIL)
+ if ((unsigned)state > FAIL)
state = FAIL;
return carpstate[state];
}
@@ -163,7 +163,7 @@ void
carp_update_state(enum RUNSTATE current_state)
{
- if (current_state < 0 || current_state > FAIL) {
+ if ((unsigned)current_state > FAIL) {
log_err("carp_update_state: invalid carp state, abort");
cfgstate.runstate = FAIL;
return;
Doesn't the compiler warn about enum non-member assignment? If it does,
then checking it would be redundant here, no?
--
Gemaakt met Opera's e-mailprogramma: http://www.opera.com/mail/