diff --git a/contrib/chg/chg.c b/contrib/chg/chg.c --- a/contrib/chg/chg.c +++ b/contrib/chg/chg.c @@ -372,18 +372,27 @@ TIME = 4, }; unsigned int state = 0; - int i; - for (i = 0; i < argc; ++i) { - if (strcmp(argv[i], "--") == 0) - break; - if (i == 0 && strcmp("serve", argv[i]) == 0) + + if (argc > 0) { + int i = 0; + const char *const firstarg = argv[i]; + + if (strcmp("serve", firstarg) == 0) { state |= SERVE; - else if (strcmp("-d", argv[i]) == 0 || - strcmp("--daemon", argv[i]) == 0) - state |= DAEMON; - else if (strcmp("--time", argv[i]) == 0) - state |= TIME; + ++i; + } + + for (; i < argc; ++i) { + if (strcmp(argv[i], "--") == 0) + break; + if (strcmp("-d", argv[i]) == 0 || + strcmp("--daemon", argv[i]) == 0) + state |= DAEMON; + else if (strcmp("--time", argv[i]) == 0) + state |= TIME; + } } + return (state & TIME) == TIME || (state & SERVEDAEMON) == SERVEDAEMON; }