Beispiel #1
0
static value alloc_host_entry(struct hostent *entry)
{
  value res;
  value name = Val_unit, aliases = Val_unit;
  value addr_list = Val_unit, adr = Val_unit;

  Begin_roots4 (name, aliases, addr_list, adr);
    name = copy_string((char *)(entry->h_name));
    /* PR#4043: protect against buggy implementations of gethostbyname()
       that return a NULL pointer in h_aliases */
    if (entry->h_aliases)
      aliases = copy_string_array((const char**)entry->h_aliases);
    else
      aliases = Atom(0);
    entry_h_length = entry->h_length;
#ifdef h_addr
    addr_list = alloc_array(alloc_one_addr, (const char**)entry->h_addr_list);
#else
    adr = alloc_one_addr(entry->h_addr);
    addr_list = caml_alloc_1(0, adr);
#endif
    int addrtype;
    switch (entry->h_addrtype) {
    case PF_UNIX:          addrtype = 0; break;
    case PF_INET:          addrtype = 1; break;
    default: /*PF_INET6 */ addrtype = 2; break;
    }
    res = caml_alloc_4(0, name, aliases,
                       Val_int(addrtype), addr_list);
  End_roots();
  return res;
}
Beispiel #2
0
static value alloc_group_entry(struct group *entry)
{
  value res;
  value name = Val_unit, pass = Val_unit, mem = Val_unit;

  Begin_roots3 (name, pass, mem);
    name = caml_copy_string(entry->gr_name);
    pass = caml_copy_string(entry->gr_passwd);
    mem = caml_copy_string_array((const char**)entry->gr_mem);
    res = caml_alloc_4(0, name, pass,
                       Val_int(entry->gr_gid), mem);
  End_roots();
  return res;
}