Add missing zstd.h to coregrind Makefile.am noinst_HEADERS
[valgrind.git] / memcheck / tests / solaris / ioctl.c
blob9f7e53aa9a32a5942eb756ae8fc10826d873bb9d
1 /* Tests for ioctl wrappers.
2 More complicated ones than just trivial ones in scalar_ioctl. */
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <strings.h>
7 #include <unistd.h>
8 #include <net/if.h>
9 #include <sys/socket.h>
10 #include <sys/sockio.h>
12 /* sockio */
13 __attribute__((noinline))
14 static int test_SIOCGIFCONF(void)
16 int fd = socket(AF_INET, SOCK_DGRAM, 0);
17 if (fd < 0)
18 perror("socket");
20 int n_ifs;
21 if (ioctl(fd, SIOCGIFNUM, &n_ifs) < 0)
22 perror("ioctl(SIOCGIFNUM)");
24 struct ifconf ifc;
25 ifc.ifc_len = (n_ifs + 1) * sizeof(struct ifreq);
26 ifc.ifc_buf = malloc((n_ifs + 1) * sizeof(struct ifreq));
27 if (ifc.ifc_buf == NULL)
28 perror("malloc");
30 if (ioctl(fd, SIOCGIFCONF, &ifc) < 0)
31 perror("ioctl(SIOCGIFCONF)");
33 /* Check definedness of ifc attributes ... */
34 int x = 0;
35 if (ifc.ifc_len != 0) x = -1; else x = -2;
36 if (ifc.ifc_req != NULL) x = -3; else x = -4;
37 if (strcmp(ifc.ifc_req[0].ifr_name, "") != 0) x = -5; else x = -6;
38 /* ... and now one which is not defined. */
39 if (strcmp(ifc.ifc_req[n_ifs].ifr_name, "") != 0) x = -7; else x = -8;
41 free(ifc.ifc_buf);
42 close(fd);
43 return x;
46 __attribute__((noinline))
47 static int test_SIOCGLIFCONF(void)
49 int fd = socket(AF_INET, SOCK_DGRAM, 0);
50 if (fd < 0)
51 perror("socket");
53 struct lifnum lifn;
54 lifn.lifn_family = AF_INET;
55 lifn.lifn_flags = 0;
56 if (ioctl(fd, SIOCGLIFNUM, &lifn) < 0)
57 perror("ioctl(SIOCGLIFNUM)");
59 struct lifconf lifc;
60 lifc.lifc_family = AF_INET;
61 lifc.lifc_flags = 0;
62 lifc.lifc_len = (lifn.lifn_count + 1) * sizeof(struct lifreq);
63 lifc.lifc_buf = malloc((lifn.lifn_count + 1) * sizeof(struct lifreq));
64 if (lifc.lifc_buf == NULL)
65 perror("malloc");
67 if (ioctl(fd, SIOCGLIFCONF, &lifc) < 0)
68 perror("ioctl(SIOCGLIFCONF)");
70 /* Check definedness of lifc attributes ... */
71 int x = 0;
72 if (lifc.lifc_len != 0) x = -1; else x = -2;
73 if (lifc.lifc_req != NULL) x = -3; else x = -4;
74 if (strcmp(lifc.lifc_req[0].lifr_name, "") != 0) x = -5; else x = -6;
75 /* ... and now one which is not defined. */
76 if (strcmp(lifc.lifc_req[lifn.lifn_count].lifr_name, "") != 0)
77 x = -7; else x = -8;
79 free(lifc.lifc_buf);
80 close(fd);
81 return x;
84 int main(void)
86 /* sockio */
87 test_SIOCGIFCONF();
88 test_SIOCGLIFCONF();
90 return 0;