131e6fee267e894b5dde7e881e921dd47a38d46f
[perl.git] / do / gnent
1 int
2 do_gnent(which,gimme,arglast)
3 int which;
4 int gimme;
5 int *arglast;
6 {
7     register ARRAY *ary = stack;
8     register int sp = arglast[0];
9     register char **elem;
10     register STR *TARG;
11     struct netent *getnetbyname();
12     struct netent *getnetbyaddr();
13     struct netent *getnetent();
14     struct netent *nent;
15
16     if (which == O_GNBYNAME) {
17         char *name = str_get(ary->ary_array[sp+1]);
18
19         nent = getnetbyname(name);
20     }
21     else if (which == O_GNBYADDR) {
22         unsigned long addr = U_L(str_gnum(ary->ary_array[sp+1]));
23         int addrtype = (int)str_gnum(ary->ary_array[sp+2]);
24
25         nent = getnetbyaddr((long)addr,addrtype);
26     }
27     else
28         nent = getnetent();
29
30     if (gimme != G_ARRAY) {
31         astore(ary, ++sp, TARG = str_mortal(&str_undef));
32         if (nent) {
33             if (which == O_GNBYNAME)
34                 str_numset(TARG, (double)nent->n_net);
35             else
36                 str_set(TARG, nent->n_name);
37         }
38         return sp;
39     }
40
41     if (nent) {
42 #ifndef lint
43         (void)astore(ary, ++sp, TARG = str_mortal(&str_no));
44         str_set(TARG, nent->n_name);
45         (void)astore(ary, ++sp, TARG = str_mortal(&str_no));
46         for (elem = nent->n_aliases; *elem; elem++) {
47             str_cat(TARG, *elem);
48             if (elem[1])
49                 str_ncat(TARG," ",1);
50         }
51         (void)astore(ary, ++sp, TARG = str_mortal(&str_no));
52         str_numset(TARG, (double)nent->n_addrtype);
53         (void)astore(ary, ++sp, TARG = str_mortal(&str_no));
54         str_numset(TARG, (double)nent->n_net);
55 #else /* lint */
56         elem = Nullch;
57         elem = elem;
58         (void)astore(ary, ++sp, str_mortal(&str_no));
59 #endif /* lint */
60     }
61
62     return sp;
63 }
64