summaryrefslogtreecommitdiff
path: root/sys/src/cmd/alarm.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@rei2.9hal>2012-02-15 19:24:58 +0100
committercinap_lenrek <cinap_lenrek@rei2.9hal>2012-02-15 19:24:58 +0100
commit9f6eb984ece407fcd501492023af13f1ede5e08b (patch)
tree32cdcb1c9c972867de16f4cc6ef71e9f6529a54d /sys/src/cmd/alarm.c
parent27c02488a5dde0f8786e2646e2984525db791faf (diff)
alarm: try /bin for command
Diffstat (limited to 'sys/src/cmd/alarm.c')
-rw-r--r--sys/src/cmd/alarm.c31
1 files changed, 14 insertions, 17 deletions
diff --git a/sys/src/cmd/alarm.c b/sys/src/cmd/alarm.c
index 4ce5f0623..04bae6415 100644
--- a/sys/src/cmd/alarm.c
+++ b/sys/src/cmd/alarm.c
@@ -33,27 +33,23 @@ usage(void)
exits("usage");
}
-static int
-notefun(void *, char *msg)
+static void
+catch(void *, char *msg)
{
postnote(PNGROUP, cpid, msg);
- return 1;
+ noted(NDFLT);
}
void
main(int argc, char *argv[])
{
- char *path, *p, *q;
+ char buf[1024], *p, *q;
Waitmsg *w;
long n, t;
- ARGBEGIN{
- default: usage();
- }ARGEND
-
- if(argc < 2)
+ if(argc < 3)
usage();
- n = strtol(*argv++, &p, 10);
+ n = strtol(argv[1], &p, 10);
if(n < 0)
usage();
t = n * 1000;
@@ -74,18 +70,19 @@ main(int argc, char *argv[])
}
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))){
case -1:
sysfatal("%r");
case 0: /* child */
- exec(path, argv);
- sysfatal("%s: %r", *argv);
+ exec(argv[2], &argv[2]);
+ 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);
if(w = wait())
exits(w->msg);