Merge change 1741

* changes:
  ACC: Arm code gen improvements ++/--, &, odds and ends
diff --git a/init/init.h b/init/init.h
index c9363da..b93eb50 100644
--- a/init/init.h
+++ b/init/init.h
@@ -137,15 +137,17 @@
     struct socketinfo *sockets;
     struct svcenvinfo *envvars;
 
-    int nargs;
-    char *args[1];
     struct action onrestart;  /* Actions to execute on restart. */
     
     /* keycodes for triggering this service via /dev/keychord */
     int *keycodes;
     int nkeycodes;
     int keychord_id;
-};
+
+    int nargs;
+    /* "MUST BE AT THE END OF THE STRUCT" */
+    char *args[1];
+}; /*     ^-------'args' MUST be at the end of this struct! */
 
 int parse_config_file(const char *fn);
 
diff --git a/toolbox/ifconfig.c b/toolbox/ifconfig.c
index dff183e..80c0e5c 100644
--- a/toolbox/ifconfig.c
+++ b/toolbox/ifconfig.c
@@ -28,26 +28,32 @@
 
 static inline void init_sockaddr_in(struct sockaddr_in *sin, const char *addr)
 {
-	sin->sin_family = AF_INET;
-	sin->sin_port = 0;
-	sin->sin_addr.s_addr = inet_addr(addr);
+    sin->sin_family = AF_INET;
+    sin->sin_port = 0;
+    sin->sin_addr.s_addr = inet_addr(addr);
 }
 
+static void setmtu(int s, struct ifreq *ifr, const char *mtu)
+{
+    int m = atoi(mtu);
+    ifr->ifr_mtu = m;
+    if(ioctl(s, SIOCSIFMTU, ifr) < 0) die("SIOCSIFMTU");
+}
 static void setdstaddr(int s, struct ifreq *ifr, const char *addr)
 {
-	init_sockaddr_in((struct sockaddr_in *) &ifr->ifr_dstaddr, addr);
+    init_sockaddr_in((struct sockaddr_in *) &ifr->ifr_dstaddr, addr);
     if(ioctl(s, SIOCSIFDSTADDR, ifr) < 0) die("SIOCSIFDSTADDR");
 }
 
 static void setnetmask(int s, struct ifreq *ifr, const char *addr)
 {
-	init_sockaddr_in((struct sockaddr_in *) &ifr->ifr_netmask, addr);
+    init_sockaddr_in((struct sockaddr_in *) &ifr->ifr_netmask, addr);
     if(ioctl(s, SIOCSIFNETMASK, ifr) < 0) die("SIOCSIFNETMASK");
 }
 
 static void setaddr(int s, struct ifreq *ifr, const char *addr)
 {
-	init_sockaddr_in((struct sockaddr_in *) &ifr->ifr_addr, addr);
+    init_sockaddr_in((struct sockaddr_in *) &ifr->ifr_addr, addr);
     if(ioctl(s, SIOCSIFADDR, ifr) < 0) die("SIOCSIFADDR");
 }
 
@@ -115,41 +121,43 @@
         running = (flags & IFF_RUNNING)      ? " running" : "";
         multi =   (flags & IFF_MULTICAST)    ? " multicast" : "";
         printf("%s%s%s%s%s%s]\n", updown, brdcst, loopbk, ppp, running, multi);
-
-
-
-/*    char *updown, *brdcst, *loopbk, *ppp, *running, *multi; */
-
         return 0;
     }
     
-    while(argc > 0){
-        if(!strcmp(argv[0], "up")) {
+    while(argc > 0) {
+        if (!strcmp(argv[0], "up")) {
             setflags(s, &ifr, IFF_UP, 0);
-        } else if(!strcmp(argv[0], "-pointopoint")) {
+        } else if (!strcmp(argv[0], "mtu")) {
+            argc--, argv++;
+            if (!argc) {
+                errno = EINVAL;
+                die("expecting a value for parameter \"mtu\"");
+            }
+            setmtu(s, &ifr, argv[0]);
+        } else if (!strcmp(argv[0], "-pointopoint")) {
             setflags(s, &ifr, IFF_POINTOPOINT, 1);
-        } else if(!strcmp(argv[0], "pointopoint")) {
-		argc--, argv++;
-		if (0 == argc) { 
-			errno = EINVAL;
-			die("expecting an IP address for parameter \"pointtopoint\"");
-		}
-		setdstaddr(s, &ifr, argv[0]);
-                setflags(s, &ifr, IFF_POINTOPOINT, 0);
-        } else if(!strcmp(argv[0], "down")) {
+        } else if (!strcmp(argv[0], "pointopoint")) {
+            argc--, argv++;
+            if (!argc) { 
+                errno = EINVAL;
+                die("expecting an IP address for parameter \"pointtopoint\"");
+            }
+            setdstaddr(s, &ifr, argv[0]);
+            setflags(s, &ifr, IFF_POINTOPOINT, 0);
+        } else if (!strcmp(argv[0], "down")) {
             setflags(s, &ifr, 0, IFF_UP);
-		} else if(!strcmp(argv[0], "netmask")) {
-			argc--, argv++;
-			if (0 == argc) { 
-				errno = EINVAL;
-				die("expecting an IP address for parameter \"netmask\"");
-			}
-			setnetmask(s, &ifr, argv[0]);
-        } else if(isdigit(argv[0][0])){
+        } else if (!strcmp(argv[0], "netmask")) {
+            argc--, argv++;
+            if (!argc) { 
+                errno = EINVAL;
+                die("expecting an IP address for parameter \"netmask\"");
+            }
+            setnetmask(s, &ifr, argv[0]);
+        } else if (isdigit(argv[0][0])) {
             setaddr(s, &ifr, argv[0]);
+            setflags(s, &ifr, IFF_UP, 0);
         }
         argc--, argv++;
     }
-
     return 0;
 }
diff --git a/toolbox/route.c b/toolbox/route.c
index 86fc35b..2fd7108 100644
--- a/toolbox/route.c
+++ b/toolbox/route.c
@@ -51,75 +51,79 @@
 {
     struct ifreq ifr;
     int s,i;
-	struct rtentry rt;
-	struct sockaddr_in ina;
+    struct rtentry rt;
+    struct sockaddr_in ina;
    
-    if(argc == 0) return 0;
-    
+    if (!argc)
+        return 0;
+
     strncpy(ifr.ifr_name, argv[0], IFNAMSIZ);
     ifr.ifr_name[IFNAMSIZ-1] = 0;
-	ADVANCE(argc, argv);
+    ADVANCE(argc, argv);
 
-    if((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+    if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
         die("cannot open control socket\n");
     }
 
     while(argc > 0){
-        if(!strcmp(argv[0], "add")) {
-			EXPECT_NEXT(argc, argv);
-			if(!strcmp(argv[0], "default")) {
-				EXPECT_NEXT(argc, argv);
-				memset((char *) &rt, 0, sizeof(struct rtentry));
-				rt.rt_dst.sa_family = AF_INET;	
-				if(!strcmp(argv[0], "dev")) {
-				  EXPECT_NEXT(argc, argv);
-				  rt.rt_flags = RTF_UP | RTF_HOST;
-				  rt.rt_dev = argv[0];
-				  if (ioctl(s, SIOCADDRT, &rt) < 0) die("SIOCADDRT\n");
-				}else if(!strcmp(argv[0], "gw")) {
-				  EXPECT_NEXT(argc, argv);
-				  rt.rt_flags = RTF_UP | RTF_GATEWAY;
-				  init_sockaddr_in((struct sockaddr_in *)&(rt.rt_genmask), "0.0.0.0");
-				  if(isdigit(argv[0][0])){
-					init_sockaddr_in((struct sockaddr_in *)&(rt.rt_gateway), argv[0]);
-				  }else{
-					die("expecting an IP address for parameter \"gw\"\n");
-				  }
-				  EXPECT_NEXT(argc, argv);
-				  if(!strcmp(argv[0], "dev")) {
-					EXPECT_NEXT(argc, argv);
-					rt.rt_dev = argv[0];
-					if (ioctl(s, SIOCADDRT, &rt) < 0){
-					  die("SIOCADDRT\n");
-					}
-				  }
-				}
-			} else  {
-                          char keywords[3][5] = { "net", "mask", "gw" };
-                          struct sockaddr_in *paddr[3] = { &rt.rt_dst, &rt.rt_genmask, &rt.rt_gateway };
-                          int k = 0;
-
-                          memset((char *) &rt, 0, sizeof(struct rtentry));
-                          rt.rt_flags = RTF_UP | RTF_GATEWAY;
-                          do {
-                            if(!strcmp(argv[0], keywords[k])) {
-                              EXPECT_NEXT(argc, argv);
-                              if(isdigit(argv[0][0])) {
-                                init_sockaddr_in(paddr[k], argv[0]);
-                              } else {
-                                die("expecting an IP/MASK address for parameter %s\n", keywords[k]);
-                              }
-                              if(k < 2) EXPECT_NEXT(argc, argv);
-                            } else {
-                              die("expecting keyword(s)\n");
-                            }
-                          } while(++k < 3);
-                          if(ioctl(s, SIOCADDRT, &rt) < 0) {
+        if (!strcmp(argv[0], "add")) {
+            EXPECT_NEXT(argc, argv);
+            if (!strcmp(argv[0], "default")) {
+                EXPECT_NEXT(argc, argv);
+                memset((char *) &rt, 0, sizeof(struct rtentry));
+                rt.rt_dst.sa_family = AF_INET;	
+                if(!strcmp(argv[0], "dev")) {
+                    EXPECT_NEXT(argc, argv);
+                    rt.rt_flags = RTF_UP | RTF_HOST;
+                    rt.rt_dev = argv[0];
+                    if (ioctl(s, SIOCADDRT, &rt) < 0)
+                        die("SIOCADDRT\n");
+                } else if (!strcmp(argv[0], "gw")) {
+                    EXPECT_NEXT(argc, argv);
+                    rt.rt_flags = RTF_UP | RTF_GATEWAY;
+                    init_sockaddr_in((struct sockaddr_in *)&(rt.rt_genmask), "0.0.0.0");
+                    if(isdigit(argv[0][0])) {
+                        init_sockaddr_in((struct sockaddr_in *)&(rt.rt_gateway), argv[0]);
+                    } else {
+                        die("expecting an IP address for parameter \"gw\"\n");
+                    }
+                    EXPECT_NEXT(argc, argv);
+                    if (!strcmp(argv[0], "dev")) {
+                        EXPECT_NEXT(argc, argv);
+                        rt.rt_dev = argv[0];
+                        if (ioctl(s, SIOCADDRT, &rt) < 0) {
                             die("SIOCADDRT\n");
-                          }
                         }
+                    }
+                }
+            } else {
+                char keywords[3][10] = { "-net", "netmask", "gw" };
+                struct sockaddr_in *paddr[3] = { &rt.rt_dst, &rt.rt_genmask, &rt.rt_gateway };
+                int k = 0;
+
+                memset((char *) &rt, 0, sizeof(struct rtentry));
+                rt.rt_flags = RTF_UP | RTF_GATEWAY;
+                do {
+                     if (!strcmp(argv[0], keywords[k])) {
+                         EXPECT_NEXT(argc, argv);
+                         if (isdigit(argv[0][0])) {
+                             init_sockaddr_in(paddr[k], argv[0]);
+                         } else {
+                            die("expecting an IP/MASK address for parameter %s\n", keywords[k]);
+                         }
+                     if (k < 2)
+                         EXPECT_NEXT(argc, argv);
+                     } else {
+                         die("expecting keyword(s)\n");
+                     }
+                 } while (++k < 3);
+
+                if (ioctl(s, SIOCADDRT, &rt) < 0) {
+                    die("SIOCADDRT\n");
+                }
+            }
         }
-		ADVANCE(argc, argv);
+        ADVANCE(argc, argv);
     }
 
     return 0;