OSDN Git Service

make protocol table zero byte separated and add ipv6 protocols
authorTimo Teräs <timo.teras@iki.fi>
Mon, 9 Feb 2015 11:34:41 +0000 (13:34 +0200)
committerRich Felker <dalias@aerifal.cx>
Tue, 10 Feb 2015 21:54:33 +0000 (16:54 -0500)
src/network/proto.c

index 46ecca8..43aa17a 100644 (file)
@@ -4,25 +4,28 @@
 /* do we really need all these?? */
 
 static int idx;
-static const unsigned char protos[][8] = {
-       "\000ip",
-       "\001icmp",
-       "\002igmp",
-       "\003ggp",
-       "\006tcp",
-       "\014pup",
-       "\021udp",
-       "\026idp",
-       "\051ipv6",
-       "\057gre",
-       "\062esp",
-       "\063ah",
-       "\072icmpv6",
-       "\131ospf",
-       "\136ipip",
-       "\147pim",
-       "\377raw",
-       "\0\0"
+static const unsigned char protos[] = {
+       "\000ip\0"
+       "\001icmp\0"
+       "\002igmp\0"
+       "\003ggp\0"
+       "\006tcp\0"
+       "\014pup\0"
+       "\021udp\0"
+       "\026idp\0"
+       "\051ipv6\0"
+       "\053ipv6-route\0"
+       "\054ipv6-frag\0"
+       "\057gre\0"
+       "\062esp\0"
+       "\063ah\0"
+       "\072ipv6-icmp\0"
+       "\073ipv6-nonxt\0"
+       "\074ipv6-opts\0"
+       "\131ospf\0"
+       "\136ipip\0"
+       "\147pim\0"
+       "\377raw"
 };
 
 void endprotoent(void)
@@ -39,10 +42,11 @@ struct protoent *getprotoent(void)
 {
        static struct protoent p;
        static const char *aliases;
-       if (!protos[idx][1]) return NULL;
-       p.p_proto = protos[idx][0];
-       p.p_name = (char *)protos[idx++]+1;
+       if (idx >= sizeof protos) return NULL;
+       p.p_proto = protos[idx];
+       p.p_name = (char *)&protos[idx+1];
        p.p_aliases = (char **)&aliases;
+       idx += strlen(p.p_name) + 2;
        return &p;
 }