1 // RUN: %clangxx -O0 -g %s -o %t && %run %t 2>&1 | FileCheck %s
2
3 #include <netdb.h>
4 #include <stdio.h>
5 #include <stdlib.h>
6
7 #define STRING_OR_NULL(x) ((x) ? (x) : "null")
8
test1()9 void test1() {
10 struct protoent *ptp = getprotoent();
11
12 printf("%s ", STRING_OR_NULL(ptp->p_name));
13
14 for (char **cp = ptp->p_aliases; *cp != NULL; cp++)
15 printf("%s ", STRING_OR_NULL(*cp));
16
17 printf("%d\n", ptp->p_proto);
18 endprotoent();
19 }
20
test2()21 void test2() {
22 struct protoent *ptp = getprotobyname("icmp");
23
24 printf("%s ", STRING_OR_NULL(ptp->p_name));
25
26 for (char **cp = ptp->p_aliases; *cp != NULL; cp++)
27 printf("%s ", STRING_OR_NULL(*cp));
28
29 printf("%d\n", ptp->p_proto);
30 endprotoent();
31 }
32
test3()33 void test3() {
34 struct protoent *ptp = getprotobynumber(1);
35
36 printf("%s ", STRING_OR_NULL(ptp->p_name));
37
38 for (char **cp = ptp->p_aliases; *cp != NULL; cp++)
39 printf("%s ", STRING_OR_NULL(*cp));
40
41 printf("%d\n", ptp->p_proto);
42 endprotoent();
43 }
44
test4()45 void test4() {
46 setprotoent(1);
47 struct protoent *ptp = getprotobynumber(1);
48
49 ptp = getprotobynumber(2);
50
51 printf("%s ", STRING_OR_NULL(ptp->p_name));
52
53 for (char **cp = ptp->p_aliases; *cp != NULL; cp++)
54 printf("%s ", STRING_OR_NULL(*cp));
55
56 printf("%d\n", ptp->p_proto);
57 endprotoent();
58 }
59
test5()60 void test5() {
61 struct protoent *ptp = getprotobyname("ttp");
62
63 printf("%s ", STRING_OR_NULL(ptp->p_name));
64
65 for (char **cp = ptp->p_aliases; *cp != NULL; cp++)
66 printf("%s ", STRING_OR_NULL(*cp));
67
68 printf("%d\n", ptp->p_proto);
69 endprotoent();
70 }
71
main(void)72 int main(void) {
73 printf("protoent\n");
74
75 test1();
76 test2();
77 test3();
78 test4();
79 test5();
80
81 // CHECK: protoent
82 // CHECK: hopopt HOPOPT 0
83 // CHECK: icmp ICMP 1
84 // CHECK: icmp ICMP 1
85 // CHECK: igmp IGMP 2
86 // CHECK: ttp TTP iptm IPTM 84
87
88 return 0;
89 }
90