2 do_ghent(which,gimme,arglast)
7 register ARRAY *ary = stack;
8 register int sp = arglast[0];
11 struct hostent *gethostbyname();
12 struct hostent *gethostbyaddr();
14 struct hostent *gethostent();
19 if (which == O_GHBYNAME) {
20 char *name = str_get(ary->ary_array[sp+1]);
22 hent = gethostbyname(name);
24 else if (which == O_GHBYADDR) {
25 STR *addrstr = ary->ary_array[sp+1];
26 int addrtype = (int)str_gnum(ary->ary_array[sp+2]);
27 char *addr = str_get(addrstr);
29 hent = gethostbyaddr(addr,addrstr->str_cur,addrtype);
35 fatal("gethostent not implemented");
40 statusvalue = (unsigned short)h_errno & 0xffff;
43 if (gimme != G_ARRAY) {
44 astore(ary, ++sp, TARG = str_mortal(&str_undef));
46 if (which == O_GHBYNAME) {
48 str_nset(TARG, *hent->h_addr, hent->h_length);
50 str_nset(TARG, hent->h_addr, hent->h_length);
54 str_set(TARG, hent->h_name);
61 (void)astore(ary, ++sp, TARG = str_mortal(&str_no));
62 str_set(TARG, hent->h_name);
63 (void)astore(ary, ++sp, TARG = str_mortal(&str_no));
64 for (elem = hent->h_aliases; *elem; elem++) {
69 (void)astore(ary, ++sp, TARG = str_mortal(&str_no));
70 str_numset(TARG, (double)hent->h_addrtype);
71 (void)astore(ary, ++sp, TARG = str_mortal(&str_no));
73 str_numset(TARG, (double)len);
75 for (elem = hent->h_addr_list; *elem; elem++) {
76 (void)astore(ary, ++sp, TARG = str_mortal(&str_no));
77 str_nset(TARG, *elem, len);
80 (void)astore(ary, ++sp, TARG = str_mortal(&str_no));
81 str_nset(TARG, hent->h_addr, len);
86 (void)astore(ary, ++sp, str_mortal(&str_no));