chiark / gitweb /
Files found and checked in.
[userv-utils.git] / ipif / service.c
index b76c75473b04a5a1e98129c7997fc6f750beec92..ad55e30c29407341527235865208591233f18d6b 100644 (file)
@@ -202,13 +202,13 @@ static unsigned long eat_number(const char **argp, const char *what,
   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;
@@ -259,7 +259,7 @@ static void eat_prefixmask(const char **argp, const char *what,
   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;
@@ -432,7 +432,7 @@ static void parseargs(int argc, const char *const *argv) {
   
   carg= *++argv;
   for (nexroutes=0;
-       carg;
+       carg && *carg;
        nexroutes++) {
     if (nexroutes == MAXEXROUTES)
       fatal("too many extra routes (only %d allowed)",MAXEXROUTES);
@@ -695,18 +695,6 @@ static void netconfigure(void) {
     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,
@@ -718,8 +706,14 @@ static void netconfigure(void) {
 }
 
 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);