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/

Reply via email to