char *ep;
int endchar;
- if (!*argp) { badusage("missing number %s\n",what); }
+ if (!*argp) { badusage("missing number %s",what); }
rv= strtoul(*argp,&ep,0);
if ((endchar= *ep)) {
- if (!endchars) badusage("junk after number %s\n",what);
+ if (!endchars) badusage("junk after number %s",what);
if (!strchr(endchars,endchar))
badusage("invalid character or delimiter `%c' in or after number, %s:"
- " expected %s (or none?)\n", endchar,what,endchars);
+ " expected %s (or none?)", endchar,what,endchars);
*argp= ep+1;
} else {
*argp= 0;
len= eat_number(argp,whatbuf, 0,32, endchars,endchar_r);
mask= (~0UL << (32-len));
- if (prefix & ~mask) badusage("%s prefix %08lx not fully contained in mask %08lx\n",
+ if (prefix & ~mask) badusage("%s prefix %08lx not fully contained in mask %08lx",
what,prefix,mask);
*prefix_r= prefix;
if (mask_r) *mask_r= mask;
carg= *++argv;
for (nexroutes=0;
- carg;
+ carg && *carg;
nexroutes++) {
if (nexroutes == MAXEXROUTES)
fatal("too many extra routes (only %d allowed)",MAXEXROUTES);
sysfatal("cannot exec ifconfig");
}
- if (task()) {
- execlp("route","route", "add", "-host",localtxt,
- "dev",ifname, (char*)0);
- sysfatal("cannot exec route (for local)");
- }
-
- if (task()) {
- execlp("route","route", "add", "-host",peertxt,
- "dev",ifname, (char*)0);
- sysfatal("cannot exec route (for peer)");
- }
-
for (i=0; i<nexroutes; i++) {
if (task()) {
execlp("route","route", "add", "-net",exroutes[i].prefixtxt,
}
static void copydata(void) __attribute__((noreturn));
-static void copydata(void) {
+static void copydata(void) {
+ int r;
+
pids.byname.cin= makesubproc(cin_entry);
+ for (;;) {
+ r= write(1, "\300", 1); if (r==1) break;
+ assert(r==-1); if (errno != EINTR) sysfatal("send initial delim to confirm");
+ }
pids.byname.cout= makesubproc(cout_entry);
for (;;) sigsuspend(&emptyset);