diff options
-rw-r--r-- | src/network/proto.c | 48 |
1 files changed, 26 insertions, 22 deletions
diff --git a/src/network/proto.c b/src/network/proto.c index 46ecca89..43aa17a4 100644 --- a/src/network/proto.c +++ b/src/network/proto.c @@ -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; } |