1e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/*************************************************************************** 29bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * _ _ ____ _ 39bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * Project ___| | | | _ \| | 49bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * / __| | | | |_) | | 59bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * | (__| |_| | _ <| |___ 69bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * \___|\___/|_| \_\_____| 79bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * 8e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. 9e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 10e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * This software is licensed as described in the file COPYING, which 11e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * you should have received as part of this distribution. The terms 12e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * are also available at http://curl.haxx.se/docs/copyright.html. 13e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 14e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * You may opt to use, copy, modify, merge, publish, distribute and/or sell 15e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * copies of the Software, and permit persons to whom the Software is 16e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * furnished to do so, under the terms of the COPYING file. 17e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 18e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 19e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * KIND, either express or implied. 20e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 21e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET ***************************************************************************/ 229bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 23e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* Now include the curl_setup.h file from libcurl's private libdir (the source 249bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels version, but that might include "curl_config.h" from the build dir so we 259bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels need both of them in the include path), so that we get good in-depth 269bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels knowledge about the system we're building this on */ 279bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 289bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#define CURL_NO_OLDIES 299bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 30e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#include "curl_setup.h" 319bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 329bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <curl/curl.h> 339bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 349bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef HAVE_SYS_SELECT_H 359bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* since so many tests use select(), we can just as well include it here */ 369bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include <sys/select.h> 379bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif 389bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 399bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef TPF 409bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels# include "select.h" 419bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif 429bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 43e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define _MPRINTF_REPLACE 44e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#include <curl/mprintf.h> 45e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 469bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 479bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#define test_setopt(A,B,C) \ 489bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels if((res = curl_easy_setopt((A),(B),(C))) != CURLE_OK) goto test_cleanup 499bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 50e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define test_multi_setopt(A,B,C) \ 51e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if((res = curl_multi_setopt((A),(B),(C))) != CURLE_OK) goto test_cleanup 52e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 539bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsextern char *libtest_arg2; /* set by first.c to the argv[2] or NULL */ 549bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsextern char *libtest_arg3; /* set by first.c to the argv[3] or NULL */ 559bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 569bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels/* argc and argv as passed in to the main() function */ 579bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsextern int test_argc; 589bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsextern char **test_argv; 599bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 60e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETextern struct timeval tv_test_start; /* for test timing */ 61e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 62e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETextern int select_wrapper(int nfds, fd_set *rd, fd_set *wr, fd_set *exc, 63e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET struct timeval *tv); 64e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 65e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETextern void wait_ms(int ms); /* wait this many milliseconds */ 669bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 679bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsextern int test(char *URL); /* the actual test function provided by each 689bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels individual libXXX.c file */ 699bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 70e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETextern char *hexdump(unsigned char *buffer, size_t len); 71e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 72e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#ifdef UNITTESTS 73e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETextern int unitfail; 74e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#endif 75e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 76e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* 77e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** TEST_ERR_* values must be greater than CURL_LAST CURLcode in order 78e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** to avoid confusion with any CURLcode or CURLMcode. These TEST_ERR_* 79e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** codes are returned to signal test specific situations and should 80e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** not get mixed with CURLcode or CURLMcode values. 81e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** 82e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** For portability reasons TEST_ERR_* values should be less than 127. 83e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET*/ 84e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 85e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define TEST_ERR_MAJOR_BAD 126 86e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define TEST_ERR_RUNS_FOREVER 125 87e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define TEST_ERR_EASY_INIT 124 88e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define TEST_ERR_MULTI_INIT 123 89e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define TEST_ERR_NUM_HANDLES 122 90e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define TEST_ERR_SELECT 121 91e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define TEST_ERR_SUCCESS 120 92e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define TEST_ERR_FAILURE 119 93e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define TEST_ERR_USAGE 118 94e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define TEST_ERR_FOPEN 117 95e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define TEST_ERR_FSTAT 116 96e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define TEST_ERR_BAD_TIMEOUT 115 97e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 98e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* 99e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** Macros for test source code readability/maintainability. 100e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** 101e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** All of the following macros require that an int data type 'res' variable 102e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** exists in scope where macro is used, and that it has been initialized to 103e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** zero before the macro is used. 104e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** 105e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** exe_* and chk_* macros are helper macros not intended to be used from 106e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** outside of this header file. Arguments 'Y' and 'Z' of these represent 107e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** source code file and line number, while Arguments 'A', 'B', etc, are 108e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** the arguments used to actually call a libcurl function. 109e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** 110e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** All easy_* and multi_* macros call a libcurl function and evaluate if 111e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** the function has succeeded or failed. When the function succeeds 'res' 112e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** variable is not set nor cleared and program continues normal flow. On 113e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** the other hand if function fails 'res' variable is set and a jump to 114e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** label 'test_cleanup' is performed. 115e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** 116e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** Every easy_* and multi_* macros have a res_easy_* and res_multi_* macro 117e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** counterpart that operates in tha same way with the exception that no 118e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** jump takes place in case of failure. res_easy_* and res_multi_* macros 119e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** should be immediately followed by checking if 'res' variable has been 120e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** set. 121e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** 122e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** 'res' variable when set will hold a CURLcode, CURLMcode, or any of the 123e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** TEST_ERR_* values defined above. It is advisable to return this value 124e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET** as test result. 125e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET*/ 126e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 127e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* ---------------------------------------------------------------- */ 128e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 129e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define exe_easy_init(A,Y,Z) do { \ 130e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(((A) = curl_easy_init()) == NULL) { \ 131e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET fprintf(stderr, "%s:%d curl_easy_init() failed\n", (Y), (Z)); \ 132e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET res = TEST_ERR_EASY_INIT; \ 133e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET } \ 134e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 135e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 136e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define res_easy_init(A) \ 137e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_easy_init((A),(__FILE__),(__LINE__)) 138e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 139e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define chk_easy_init(A,Y,Z) do { \ 140e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_easy_init((A),(Y),(Z)); \ 141e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(res) \ 142e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET goto test_cleanup; \ 143e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 144e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 145e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define easy_init(A) \ 146e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET chk_easy_init((A),(__FILE__),(__LINE__)) 147e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 148e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* ---------------------------------------------------------------- */ 149e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 150e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define exe_multi_init(A,Y,Z) do { \ 151e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(((A) = curl_multi_init()) == NULL) { \ 152e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET fprintf(stderr, "%s:%d curl_multi_init() failed\n", (Y), (Z)); \ 153e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET res = TEST_ERR_MULTI_INIT; \ 154e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET } \ 155e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 156e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 157e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define res_multi_init(A) \ 158e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_multi_init((A),(__FILE__),(__LINE__)) 159e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 160e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define chk_multi_init(A,Y,Z) do { \ 161e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_multi_init((A),(Y),(Z)); \ 162e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(res) \ 163e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET goto test_cleanup; \ 164e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 165e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 166e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define multi_init(A) \ 167e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET chk_multi_init((A),(__FILE__),(__LINE__)) 168e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 169e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* ---------------------------------------------------------------- */ 170e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 171e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define exe_easy_setopt(A,B,C,Y,Z) do { \ 172e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET CURLcode ec; \ 173e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if((ec = curl_easy_setopt((A),(B),(C))) != CURLE_OK) { \ 174e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET fprintf(stderr, "%s:%d curl_easy_setopt() failed, " \ 175e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET "with code %d (%s)\n", \ 176e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET (Y), (Z), (int)ec, curl_easy_strerror(ec)); \ 177e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET res = (int)ec; \ 178e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET } \ 179e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 180e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 181e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define res_easy_setopt(A,B,C) \ 182e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_easy_setopt((A),(B),(C),(__FILE__),(__LINE__)) 183e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 184e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define chk_easy_setopt(A,B,C,Y,Z) do { \ 185e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_easy_setopt((A),(B),(C),(Y),(Z)); \ 186e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(res) \ 187e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET goto test_cleanup; \ 188e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 189e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 190e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define easy_setopt(A,B,C) \ 191e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET chk_easy_setopt((A),(B),(C),(__FILE__),(__LINE__)) 192e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 193e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* ---------------------------------------------------------------- */ 194e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 195e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define exe_multi_setopt(A,B,C,Y,Z) do { \ 196e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET CURLMcode ec; \ 197e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if((ec = curl_multi_setopt((A),(B),(C))) != CURLM_OK) { \ 198e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET fprintf(stderr, "%s:%d curl_multi_setopt() failed, " \ 199e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET "with code %d (%s)\n", \ 200e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 201e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET res = (int)ec; \ 202e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET } \ 203e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 204e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 205e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define res_multi_setopt(A,B,C) \ 206e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_multi_setopt((A),(B),(C),(__FILE__),(__LINE__)) 207e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 208e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define chk_multi_setopt(A,B,C,Y,Z) do { \ 209e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_multi_setopt((A),(B),(C),(Y),(Z)); \ 210e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(res) \ 211e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET goto test_cleanup; \ 212e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 213e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 214e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define multi_setopt(A,B,C) \ 215e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET chk_multi_setopt((A),(B),(C),(__FILE__),(__LINE__)) 216e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 217e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* ---------------------------------------------------------------- */ 218e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 219e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define exe_multi_add_handle(A,B,Y,Z) do { \ 220e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET CURLMcode ec; \ 221e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if((ec = curl_multi_add_handle((A),(B))) != CURLM_OK) { \ 222e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET fprintf(stderr, "%s:%d curl_multi_add_handle() failed, " \ 223e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET "with code %d (%s)\n", \ 224e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 225e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET res = (int)ec; \ 226e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET } \ 227e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 228e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 229e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define res_multi_add_handle(A,B) \ 230e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_multi_add_handle((A),(B),(__FILE__),(__LINE__)) 231e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 232e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define chk_multi_add_handle(A,B,Y,Z) do { \ 233e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_multi_add_handle((A),(B),(Y),(Z)); \ 234e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(res) \ 235e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET goto test_cleanup; \ 236e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 237e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 238e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define multi_add_handle(A,B) \ 239e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET chk_multi_add_handle((A),(B),(__FILE__),(__LINE__)) 240e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 241e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* ---------------------------------------------------------------- */ 242e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 243e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define exe_multi_remove_handle(A,B,Y,Z) do { \ 244e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET CURLMcode ec; \ 245e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if((ec = curl_multi_remove_handle((A),(B))) != CURLM_OK) { \ 246e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET fprintf(stderr, "%s:%d curl_multi_remove_handle() failed, " \ 247e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET "with code %d (%s)\n", \ 248e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 249e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET res = (int)ec; \ 250e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET } \ 251e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 252e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 253e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define res_multi_remove_handle(A,B) \ 254e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_multi_remove_handle((A),(B),(__FILE__),(__LINE__)) 255e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 256e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define chk_multi_remove_handle(A,B,Y,Z) do { \ 257e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_multi_remove_handle((A),(B),(Y),(Z)); \ 258e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(res) \ 259e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET goto test_cleanup; \ 260e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 261e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 262e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 263e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define multi_remove_handle(A,B) \ 264e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET chk_multi_remove_handle((A),(B),(__FILE__),(__LINE__)) 265e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 266e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* ---------------------------------------------------------------- */ 267e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 268e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define exe_multi_perform(A,B,Y,Z) do { \ 269e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET CURLMcode ec; \ 270e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if((ec = curl_multi_perform((A),(B))) != CURLM_OK) { \ 271e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET fprintf(stderr, "%s:%d curl_multi_perform() failed, " \ 272e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET "with code %d (%s)\n", \ 273e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 274e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET res = (int)ec; \ 275e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET } \ 276e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET else if(*((B)) < 0) { \ 277e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET fprintf(stderr, "%s:%d curl_multi_perform() succeeded, " \ 278e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET "but returned invalid running_handles value (%d)\n", \ 279e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET (Y), (Z), (int)*((B))); \ 280e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET res = TEST_ERR_NUM_HANDLES; \ 281e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET } \ 282e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 283e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 284e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define res_multi_perform(A,B) \ 285e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_multi_perform((A),(B),(__FILE__),(__LINE__)) 286e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 287e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define chk_multi_perform(A,B,Y,Z) do { \ 288e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_multi_perform((A),(B),(Y),(Z)); \ 289e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(res) \ 290e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET goto test_cleanup; \ 291e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 292e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 293e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define multi_perform(A,B) \ 294e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET chk_multi_perform((A),(B),(__FILE__),(__LINE__)) 295e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 296e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* ---------------------------------------------------------------- */ 297e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 298e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define exe_multi_fdset(A,B,C,D,E,Y,Z) do { \ 299e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET CURLMcode ec; \ 300e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if((ec = curl_multi_fdset((A),(B),(C),(D),(E))) != CURLM_OK) { \ 301e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET fprintf(stderr, "%s:%d curl_multi_fdset() failed, " \ 302e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET "with code %d (%s)\n", \ 303e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 304e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET res = (int)ec; \ 305e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET } \ 306e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET else if(*((E)) < -1) { \ 307e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET fprintf(stderr, "%s:%d curl_multi_fdset() succeeded, " \ 308e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET "but returned invalid max_fd value (%d)\n", \ 309e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET (Y), (Z), (int)*((E))); \ 310e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET res = TEST_ERR_NUM_HANDLES; \ 311e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET } \ 312e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 313e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 314e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define res_multi_fdset(A,B,C,D,E) \ 315e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_multi_fdset((A),(B),(C),(D),(E),(__FILE__),(__LINE__)) 316e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 317e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define chk_multi_fdset(A,B,C,D,E,Y,Z) do { \ 318e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_multi_fdset((A),(B),(C),(D),(E),(Y),(Z)); \ 319e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(res) \ 320e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET goto test_cleanup; \ 321e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 322e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 323e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define multi_fdset(A,B,C,D,E) \ 324e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET chk_multi_fdset((A),(B),(C),(D),(E),(__FILE__),(__LINE__)) 325e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 326e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* ---------------------------------------------------------------- */ 327e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 328e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define exe_multi_timeout(A,B,Y,Z) do { \ 329e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET CURLMcode ec; \ 330e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if((ec = curl_multi_timeout((A),(B))) != CURLM_OK) { \ 331e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET fprintf(stderr, "%s:%d curl_multi_timeout() failed, " \ 332e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET "with code %d (%s)\n", \ 333e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ 334e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET res = (int)ec; \ 335e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET } \ 336e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET else if(*((B)) < -1L) { \ 337e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET fprintf(stderr, "%s:%d curl_multi_timeout() succeeded, " \ 338e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET "but returned invalid timeout value (%ld)\n", \ 339e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET (Y), (Z), (long)*((B))); \ 340e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET res = TEST_ERR_BAD_TIMEOUT; \ 341e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET } \ 342e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 343e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 344e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define res_multi_timeout(A,B) \ 345e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_multi_timeout((A),(B),(__FILE__),(__LINE__)) 346e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 347e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define chk_multi_timeout(A,B,Y,Z) do { \ 348e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_multi_timeout((A),(B),(Y),(Z)); \ 349e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(res) \ 350e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET goto test_cleanup; \ 351e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 352e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 353e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define multi_timeout(A,B) \ 354e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET chk_multi_timeout((A),(B),(__FILE__),(__LINE__)) 355e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 356e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* ---------------------------------------------------------------- */ 357e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 358e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define exe_select_test(A,B,C,D,E,Y,Z) do { \ 359e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET int ec; \ 360e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(select_wrapper((A),(B),(C),(D),(E)) == -1 ) { \ 361e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET ec = SOCKERRNO; \ 362e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET fprintf(stderr, "%s:%d select() failed, with " \ 363e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET "errno %d (%s)\n", \ 364e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET (Y), (Z), ec, strerror(ec)); \ 365e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET res = TEST_ERR_SELECT; \ 366e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET } \ 367e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 368e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 369e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define res_select_test(A,B,C,D,E) \ 370e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_select_test((A),(B),(C),(D),(E),(__FILE__),(__LINE__)) 371e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 372e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define chk_select_test(A,B,C,D,E,Y,Z) do { \ 373e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_select_test((A),(B),(C),(D),(E),(Y),(Z)); \ 374e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(res) \ 375e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET goto test_cleanup; \ 376e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 377e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 378e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define select_test(A,B,C,D,E) \ 379e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET chk_select_test((A),(B),(C),(D),(E),(__FILE__),(__LINE__)) 380e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 381e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* ---------------------------------------------------------------- */ 382e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 383e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define start_test_timing() do { \ 384e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET tv_test_start = tutil_tvnow(); \ 385e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 386e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 387e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define exe_test_timedout(Y,Z) do { \ 388e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(tutil_tvdiff(tutil_tvnow(), tv_test_start) > TEST_HANG_TIMEOUT) { \ 389e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET fprintf(stderr, "%s:%d ABORTING TEST, since it seems " \ 390e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET "that it would have run forever.\n", (Y), (Z)); \ 391e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET res = TEST_ERR_RUNS_FOREVER; \ 392e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET } \ 393e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 394e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 395e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define res_test_timedout() \ 396e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_test_timedout((__FILE__),(__LINE__)) 397e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 398e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define chk_test_timedout(Y,Z) do { \ 399e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_test_timedout(Y,Z); \ 400e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(res) \ 401e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET goto test_cleanup; \ 402e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 403e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 404e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define abort_on_test_timeout() \ 405e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET chk_test_timedout((__FILE__),(__LINE__)) 406e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 407e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* ---------------------------------------------------------------- */ 408e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 409e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define exe_global_init(A,Y,Z) do { \ 410e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET CURLcode ec; \ 411e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if((ec = curl_global_init((A))) != CURLE_OK) { \ 412e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET fprintf(stderr, "%s:%d curl_global_init() failed, " \ 413e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET "with code %d (%s)\n", \ 414e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET (Y), (Z), (int)ec, curl_easy_strerror(ec)); \ 415e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET res = (int)ec; \ 416e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET } \ 417e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 418e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 419e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define res_global_init(A) \ 420e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_global_init((A),(__FILE__),(__LINE__)) 421e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 422e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define chk_global_init(A,Y,Z) do { \ 423e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET exe_global_init((A),(Y),(Z)); \ 424e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET if(res) \ 425e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET return res; \ 426e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} WHILE_FALSE 427e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 428e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* global_init() is different than other macros. In case of 429e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET failure it 'return's instead of going to 'test_cleanup'. */ 430e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 431e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define global_init(A) \ 432e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET chk_global_init((A),(__FILE__),(__LINE__)) 433e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET 434e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* ---------------------------------------------------------------- */ 435