Commit | Line | Data |
---|---|---|
bb7ba677 | 1 | m4_dnl hmacros.h.m4 |
2 | m4_dnl (part of complex test harness, not of the library) | |
3 | m4_dnl - common macros | |
4 | ||
ae8cc977 | 5 | m4_dnl This file is part of adns, which is |
6 | m4_dnl Copyright (C) 1997-2000,2003,2006 Ian Jackson | |
7 | m4_dnl Copyright (C) 1999-2000,2003,2006 Tony Finch | |
8 | m4_dnl Copyright (C) 1991 Massachusetts Institute of Technology | |
9 | m4_dnl (See the file INSTALL for full details.) | |
bb7ba677 | 10 | m4_dnl |
11 | m4_dnl This program is free software; you can redistribute it and/or modify | |
12 | m4_dnl it under the terms of the GNU General Public License as published by | |
13 | m4_dnl the Free Software Foundation; either version 2, or (at your option) | |
14 | m4_dnl any later version. | |
15 | m4_dnl | |
16 | m4_dnl This program is distributed in the hope that it will be useful, | |
17 | m4_dnl but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 | m4_dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 | m4_dnl GNU General Public License for more details. | |
20 | m4_dnl | |
21 | m4_dnl You should have received a copy of the GNU General Public License | |
22 | m4_dnl along with this program; if not, write to the Free Software Foundation, | |
23 | m4_dnl Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
24 | ||
25 | m4_define(`hm_args_massage', | |
26 | `m4_ifelse( | |
27 | m4_patsubst( | |
28 | $1, | |
29 | `hm_comma\|[ | |
30 | ]+', | |
31 | `'), | |
32 | `', | |
33 | `$2', | |
0ebff22d | 34 | `m4_dnl |
bb7ba677 | 35 | m4_patsubst(m4_patsubst(m4_patsubst(m4_translit($1, ` |
36 | ',` '), `\(hm_comma *\)*$', `'), `^\( *hm_comma\)*', `'), | |
0ebff22d | 37 | `\( *hm_comma *\)+',` hm_comma ')m4_dnl |
bb7ba677 | 38 | ')') |
39 | ||
40 | m4_define(`hm_create_nothing', ` | |
41 | m4_define(`hm_na',`') | |
bb7ba677 | 42 | m4_define(`hm_arg_nullptr', `') |
43 | m4_define(`hm_arg_int', `') | |
44 | m4_define(`hm_arg_fdset_io', `') | |
8b1171e6 | 45 | m4_define(`hm_arg_pollfds_io', `') |
bb7ba677 | 46 | m4_define(`hm_arg_timeval_in_rel_null',`') |
47 | m4_define(`hm_arg_must', `') | |
48 | m4_define(`hm_arg_socktype',`') | |
6239fc5b | 49 | m4_define(`hm_arg_addrfam',`') |
bb7ba677 | 50 | m4_define(`hm_arg_ign', `') |
51 | m4_define(`hm_arg_fd', `') | |
52 | m4_define(`hm_arg_fcntl_cmd_arg',`') | |
53 | m4_define(`hm_arg_addr_in', `') | |
54 | m4_define(`hm_arg_bytes_in', `') | |
55 | m4_define(`hm_arg_bytes_out', `') | |
56 | m4_define(`hm_arg_addr_out', `') | |
57 | ') | |
58 | ||
59 | m4_define(`hm_create_proto_h',` | |
60 | m4_define(`hm_na', `hm_comma') | |
bb7ba677 | 61 | m4_define(`hm_arg_nullptr', `$'`1 $'`2') |
62 | m4_define(`hm_arg_int', `int $'`1') | |
63 | m4_define(`hm_arg_fdset_io', `fd_set *$'`1') | |
8b1171e6 | 64 | m4_define(`hm_arg_pollfds_io', `struct pollfd *$'`1 hm_comma int $'`2') |
bb7ba677 | 65 | m4_define(`hm_arg_timeval_in_rel_null', `struct timeval *$'`1') |
66 | m4_define(`hm_arg_must', `$'`1 $'`2') | |
67 | m4_define(`hm_arg_socktype', `int $'`1') | |
6239fc5b | 68 | m4_define(`hm_arg_addrfam', `int $'`1') |
bb7ba677 | 69 | m4_define(`hm_arg_ign', `$'`1 $'`2') |
70 | m4_define(`hm_arg_fd', `int $'`1') | |
71 | m4_define(`hm_arg_fcntl_cmd_arg', `int $'`1 hm_comma ...') | |
72 | m4_define(`hm_arg_addr_in', `const struct sockaddr *$'`1 hm_comma int $'`2') | |
73 | m4_define(`hm_arg_bytes_in', `const $'`1 *$'`2 hm_comma $'`3 $'`4') | |
74 | m4_define(`hm_arg_bytes_out', `$'`1 *$'`2 hm_comma $'`3 $'`4') | |
75 | m4_define(`hm_arg_addr_out', `struct sockaddr *$'`1 hm_comma int *$'`2') | |
76 | ') | |
77 | ||
78 | m4_define(`hm_create_proto_q',` | |
79 | hm_create_proto_h | |
bb7ba677 | 80 | m4_define(`hm_arg_nullptr', `') |
81 | m4_define(`hm_arg_fdset_io', `const fd_set *$'`1') | |
8b1171e6 | 82 | m4_define(`hm_arg_pollfds_io', `const struct pollfd *$'`1 hm_comma int $'`2') |
bb7ba677 | 83 | m4_define(`hm_arg_must', `') |
84 | m4_define(`hm_arg_ign', `') | |
85 | m4_define(`hm_arg_fcntl_cmd_arg', `int $'`1 hm_comma long $'`2') | |
86 | m4_define(`hm_arg_bytes_out', `$'`3 $'`4') | |
87 | m4_define(`hm_arg_addr_out', `int $'`2') | |
88 | ') | |
89 | ||
90 | m4_define(`hm_create_hqcall_vars',` | |
91 | hm_create_nothing | |
92 | m4_define(`hm_arg_fcntl_cmd_arg',`va_list al; long $'`2;') | |
93 | ') | |
94 | ||
95 | m4_define(`hm_create_hqcall_init',` | |
96 | hm_create_nothing | |
97 | m4_define(`hm_arg_nullptr', `Tmust("$1","$'`2",!$'`2);') | |
98 | m4_define(`hm_arg_must', `Tmust("$1","$'`2",$'`2==$'`3);') | |
99 | m4_define(`hm_arg_socktype',` | |
100 | Tmust("$1","$'`1",$'`1==SOCK_STREAM || $'`1==SOCK_DGRAM);') | |
6239fc5b MW |
101 | m4_define(`hm_arg_addrfam',` |
102 | Tmust("$1","$'`1",$'`1==PF_INET || $'`1==PF_INET6);') | |
bb7ba677 | 103 | m4_define(`hm_arg_fcntl_cmd_arg',` |
104 | Tmust("$1","$'`1",$'`1==F_SETFL || $'`1==F_GETFL); | |
105 | if ($'`1 == F_SETFL) { | |
106 | va_start(al,$'`1); $'`2= va_arg(al,long); va_end(al); | |
107 | } else { | |
108 | $'`2= 0; | |
109 | }') | |
70a778e5 | 110 | m4_define(`hm_arg_addr_out',`Tmust("$1","*$'`2",*$'`2>=sizeof(struct sockaddr_in));') |
bb7ba677 | 111 | ') |
112 | ||
113 | m4_define(`hm_create_realcall_args',` | |
114 | m4_define(`hm_na',`hm_comma') | |
bb7ba677 | 115 | m4_define(`hm_arg_nullptr', `0') |
116 | m4_define(`hm_arg_int', `$'`1') | |
117 | m4_define(`hm_arg_fdset_io', `$'`1') | |
8b1171e6 | 118 | m4_define(`hm_arg_pollfds_io', `$'`1 hm_comma $'`2') |
bb7ba677 | 119 | m4_define(`hm_arg_timeval_in_rel_null', `$'`1') |
120 | m4_define(`hm_arg_must', `$'`2') | |
121 | m4_define(`hm_arg_socktype', `$'`1') | |
6239fc5b | 122 | m4_define(`hm_arg_addrfam', `$'`1') |
bb7ba677 | 123 | m4_define(`hm_arg_ign', `$'`2') |
124 | m4_define(`hm_arg_fd', `$'`1') | |
125 | m4_define(`hm_arg_fcntl_cmd_arg', `$'`1 hm_comma $'`2') | |
126 | m4_define(`hm_arg_addr_in', `$'`1 hm_comma $'`2') | |
127 | m4_define(`hm_arg_bytes_in', `$'`2 hm_comma $'`4') | |
128 | m4_define(`hm_arg_bytes_out', `$'`2 hm_comma $'`4') | |
129 | m4_define(`hm_arg_addr_out', `$'`1 hm_comma $'`2') | |
130 | ') | |
131 | ||
132 | m4_define(`hm_create_hqcall_args',` | |
133 | hm_create_realcall_args | |
bb7ba677 | 134 | m4_define(`hm_arg_nullptr', `') |
135 | m4_define(`hm_arg_must', `') | |
136 | m4_define(`hm_arg_ign', `') | |
137 | m4_define(`hm_arg_bytes_in', `$'`2 hm_comma $'`4') | |
138 | m4_define(`hm_arg_bytes_out', `$'`4') | |
139 | m4_define(`hm_arg_addr_out', `*$'`2') | |
140 | ') |