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;