top: fix "top -d 1" (bug 5144)
authorDenis Vlasenko <vda.linux@googlemail.com>
Thu, 25 Sep 2008 11:42:10 +0000 (11:42 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Thu, 25 Sep 2008 11:42:10 +0000 (11:42 -0000)
procps/top.c

index b481d39..908ae81 100644 (file)
@@ -894,7 +894,7 @@ int top_main(int argc UNUSED_PARAM, char **argv)
        unsigned lines, col;
        int lines_rem;
        unsigned interval;
-       char *sinterval;
+       char *str_interval, *str_iterations;
        SKIP_FEATURE_TOPMEM(const) unsigned scan_mask = TOP_MASK;
 #if ENABLE_FEATURE_USE_TERMIOS
        struct termios new_settings;
@@ -917,10 +917,19 @@ int top_main(int argc UNUSED_PARAM, char **argv)
 #endif
 
        /* all args are options; -n NUM */
-       opt_complementary = "-:n+";
-       if (getopt32(argv, "d:n:b", &sinterval, &iterations) & OPT_d) {
+       opt_complementary = "-";
+       col = getopt32(argv, "d:n:b", &str_interval, &str_iterations);
+       if (col & OPT_d) {
+               /* work around for "-d 1" -> "-d -1" done by getopt32 */
+               if (str_interval[0] == '-')
+                       str_interval++;
                /* Need to limit it to not overflow poll timeout */
-               interval = xatou16(sinterval); /* -d */
+               interval = xatou16(str_interval);
+       }
+       if (col & OPT_n) {
+               if (str_iterations[0] == '-')
+                       str_iterations++;
+               iterations = xatou(str_iterations);
        }
 
        /* change to /proc */