#include <netdb.h>
#include <string.h>

/* do we really need all these?? */

static int idx;
static const unsigned char protos[] = {
    "\000ip\0"
    "\001icmp\0"
    "\002igmp\0"
    "\003ggp\0"
    "\004ipencap\0"
    "\005st\0"
    "\006tcp\0"
    "\008egp\0"
    "\014pup\0"
    "\021udp\0"
    "\024hmp\0"
    "\026xns-idp\0"
    "\033rdp\0"
    "\035iso-tp4\0"
    "\044xtp\0"
    "\045ddp\0"
    "\046idpr-cmtp\0"
    "\051ipv6\0"
    "\053ipv6-route\0"
    "\054ipv6-frag\0"
    "\055idrp\0"
    "\056rsvp\0"
    "\057gre\0"
    "\062esp\0"
    "\063ah\0"
    "\071skip\0"
    "\072ipv6-icmp\0"
    "\073ipv6-nonxt\0"
    "\074ipv6-opts\0"
    "\111rspf\0"
    "\121vmtp\0"
    "\131ospf\0"
    "\136ipip\0"
    "\142encap\0"
    "\147pim\0"
    "\377raw"};

void endprotoent(void) {
  idx = 0;
}

void setprotoent(int stayopen) {
  idx = 0;
}

struct protoent* getprotoent(void) {
  static struct protoent p;
  static const char* aliases;
  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;
}

struct protoent* getprotobyname(const char* name) {
  struct protoent* p;
  endprotoent();
  do
    p = getprotoent();
  while (p && strcmp(name, p->p_name));
  return p;
}

struct protoent* getprotobynumber(int num) {
  struct protoent* p;
  endprotoent();
  do
    p = getprotoent();
  while (p && p->p_proto != num);
  return p;
}
