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