alarm: try /bin for command

This commit is contained in:
cinap_lenrek 2012-02-15 19:24:58 +01:00
parent 27c02488a5
commit 9f6eb984ec

View file

@ -33,27 +33,23 @@ usage(void)
exits("usage"); exits("usage");
} }
static int static void
notefun(void *, char *msg) catch(void *, char *msg)
{ {
postnote(PNGROUP, cpid, msg); postnote(PNGROUP, cpid, msg);
return 1; noted(NDFLT);
} }
void void
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
char *path, *p, *q; char buf[1024], *p, *q;
Waitmsg *w; Waitmsg *w;
long n, t; long n, t;
ARGBEGIN{ if(argc < 3)
default: usage();
}ARGEND
if(argc < 2)
usage(); usage();
n = strtol(*argv++, &p, 10); n = strtol(argv[1], &p, 10);
if(n < 0) if(n < 0)
usage(); usage();
t = n * 1000; t = n * 1000;
@ -74,18 +70,19 @@ main(int argc, char *argv[])
} }
t += n; t += n;
} }
path = *argv;
if(p = strrchr(path, '/'))
if(p[1])
*argv = p+1;
atnotify(notefun,1);
switch((cpid = rfork(RFFDG|RFREND|RFPROC|RFMEM|RFNOTEG))){ switch((cpid = rfork(RFFDG|RFREND|RFPROC|RFMEM|RFNOTEG))){
case -1: case -1:
sysfatal("%r"); sysfatal("%r");
case 0: /* child */ case 0: /* child */
exec(path, argv); exec(argv[2], &argv[2]);
sysfatal("%s: %r", *argv); if(argv[2][0] != '/' && strncmp(argv[2], "./", 2) &&
strncmp(argv[2], "../", 3)){
snprint(buf, sizeof(buf), "/bin/%s", argv[2]);
exec(argv[2] = buf, &argv[2]);
}
sysfatal("%s: %r", argv[2]);
} }
notify(catch);
alarm(t); alarm(t);
if(w = wait()) if(w = wait())
exits(w->msg); exits(w->msg);