chiark / gitweb /
shutdownd: shut up bogus gcc warning
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 21 Mar 2013 23:20:41 +0000 (19:20 -0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 22 Mar 2013 02:39:23 +0000 (22:39 -0400)
This one is fake. But let's kill it, avoiding two condition checks
in the process.

src/shutdownd/shutdownd.c: In function 'when_wall':
src/shutdownd/shutdownd.c:182:44: warning: 'sub' may be used uninitialized in this function [-Wmaybe-uninitialized]
         return elapse > sub ? elapse - sub : 1;
                                            ^

src/shutdownd/shutdownd.c

index 0464c89..119385d 100644 (file)
@@ -157,29 +157,26 @@ static usec_t when_wall(usec_t n, usec_t elapse) {
                 usec_t delay;
                 usec_t interval;
         } table[] = {
-                { 10 * USEC_PER_MINUTE, USEC_PER_MINUTE      },
-                { USEC_PER_HOUR,        15 * USEC_PER_MINUTE },
-                { 3 * USEC_PER_HOUR,    30 * USEC_PER_MINUTE }
+                { 0,                    USEC_PER_MINUTE      },
+                { 10 * USEC_PER_MINUTE, 15 * USEC_PER_MINUTE },
+                { USEC_PER_HOUR,        30 * USEC_PER_MINUTE },
+                { 3 * USEC_PER_HOUR,    USEC_PER_HOUR        },
         };
 
         usec_t left, sub;
-        unsigned i;
+        unsigned i = ELEMENTSOF(table) - 1;
 
         /* If the time is already passed, then don't announce */
         if (n >= elapse)
                 return 0;
 
         left = elapse - n;
-        for (i = 0; i < ELEMENTSOF(table); i++)
-                if (n + table[i].delay >= elapse) {
-                        sub = ((left / table[i].interval) * table[i].interval);
-                        break;
-                }
-
-        if (i >= ELEMENTSOF(table))
-                sub = ((left / USEC_PER_HOUR) * USEC_PER_HOUR);
+        while (left < table[i].delay)
+                i--;
+        sub = (left / table[i].interval) * table[i].interval;
 
-        return elapse > sub ? elapse - sub : 1;
+        assert(sub < elapse);
+        return elapse - sub;
 }
 
 static usec_t when_nologin(usec_t elapse) {