--- sysvinit-2.86.orig/src/init.c 2004-07-30 12:16:20 +0000 +++ sysvinit-2.86/src/init.c 2007-01-05 21:34:45 +0000 @@ -2493,7 +2493,7 @@ int init_main() /* * Tell the user about the syntax we expect. */ -void usage(char *s) +void __attribute__((noreturn)) usage(const char *s) { fprintf(stderr, "Usage: %s 0123456SsQqAaBbCcUu\n", s); exit(1); @@ -2509,6 +2509,9 @@ int telinit(char *progname, int argc, ch int f, fd, l; char *env = NULL; + if (!argc) + usage(progname); + memset(&request, 0, sizeof(request)); request.magic = INIT_MAGIC; @@ -2596,20 +2599,15 @@ int telinit(char *progname, int argc, ch */ int main(int argc, char **argv) { - char *p; int f; int isinit; - /* Get my own name */ - if ((p = strrchr(argv[0], '/')) != NULL) - p++; - else - p = argv[0]; - umask(022); + umask(umask(077) | 022); /* Quick check */ if (geteuid() != 0) { - fprintf(stderr, "%s: must be superuser.\n", p); + fprintf(stderr, "%s: must be superuser.\n", + program_invocation_short_name); exit(1); } @@ -2622,7 +2620,7 @@ int main(int argc, char **argv) isinit = 1; break; } - if (!isinit) exit(telinit(p, argc, argv)); + if (!isinit) exit(telinit(program_invocation_short_name, argc, argv)); /* * Check for re-exec