1*6236dae4SAndroid Build Coastguard Worker#!/usr/bin/env perl 2*6236dae4SAndroid Build Coastguard Worker#*************************************************************************** 3*6236dae4SAndroid Build Coastguard Worker# _ _ ____ _ 4*6236dae4SAndroid Build Coastguard Worker# Project ___| | | | _ \| | 5*6236dae4SAndroid Build Coastguard Worker# / __| | | | |_) | | 6*6236dae4SAndroid Build Coastguard Worker# | (__| |_| | _ <| |___ 7*6236dae4SAndroid Build Coastguard Worker# \___|\___/|_| \_\_____| 8*6236dae4SAndroid Build Coastguard Worker# 9*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al. 10*6236dae4SAndroid Build Coastguard Worker# 11*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which 12*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms 13*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html. 14*6236dae4SAndroid Build Coastguard Worker# 15*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell 16*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is 17*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file. 18*6236dae4SAndroid Build Coastguard Worker# 19*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 20*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied. 21*6236dae4SAndroid Build Coastguard Worker# 22*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl 23*6236dae4SAndroid Build Coastguard Worker# 24*6236dae4SAndroid Build Coastguard Worker########################################################################### 25*6236dae4SAndroid Build Coastguard Worker 26*6236dae4SAndroid Build Coastguard Worker# Usage: 27*6236dae4SAndroid Build Coastguard Worker# perl mk-lib1521.pl < ../../include/curl/curl.h lib1521.c 28*6236dae4SAndroid Build Coastguard Worker 29*6236dae4SAndroid Build Coastguard Worker# minimum and maximum long signed values 30*6236dae4SAndroid Build Coastguard Workermy $minlong = "LONG_MIN"; 31*6236dae4SAndroid Build Coastguard Workermy $maxlong = "LONG_MAX"; 32*6236dae4SAndroid Build Coastguard Worker# maximum curl_off_t 33*6236dae4SAndroid Build Coastguard Workermy $maxofft = "CURL_OFF_T_MAX"; 34*6236dae4SAndroid Build Coastguard Workermy $line = ""; 35*6236dae4SAndroid Build Coastguard Workermy $incomment = 0; 36*6236dae4SAndroid Build Coastguard Worker 37*6236dae4SAndroid Build Coastguard Worker# Options allowed to return CURLE_BAD_FUNCTION_ARGUMENT if given a string they 38*6236dae4SAndroid Build Coastguard Worker# do not recognize as valid 39*6236dae4SAndroid Build Coastguard Workermy @bad_function_argument = ( 40*6236dae4SAndroid Build Coastguard Worker 'CURLOPT_DNS_LOCAL_IP4', 41*6236dae4SAndroid Build Coastguard Worker 'CURLOPT_DNS_LOCAL_IP6', 42*6236dae4SAndroid Build Coastguard Worker 'CURLOPT_DNS_SERVERS', 43*6236dae4SAndroid Build Coastguard Worker 'CURLOPT_PROXY_TLSAUTH_TYPE', 44*6236dae4SAndroid Build Coastguard Worker 'CURLOPT_SSLENGINE', 45*6236dae4SAndroid Build Coastguard Worker 'CURLOPT_TLSAUTH_TYPE', 46*6236dae4SAndroid Build Coastguard Worker); 47*6236dae4SAndroid Build Coastguard Worker 48*6236dae4SAndroid Build Coastguard Worker# Options allowed to return CURLE_UNSUPPORTED_PROTOCOL if given a string they 49*6236dae4SAndroid Build Coastguard Worker# do not recognize as valid 50*6236dae4SAndroid Build Coastguard Workermy @unsupported_protocol = ( 51*6236dae4SAndroid Build Coastguard Worker 'CURLOPT_PROTOCOLS_STR', 52*6236dae4SAndroid Build Coastguard Worker 'CURLOPT_REDIR_PROTOCOLS_STR', 53*6236dae4SAndroid Build Coastguard Worker ); 54*6236dae4SAndroid Build Coastguard Worker 55*6236dae4SAndroid Build Coastguard Worker# Options allowed to return CURLE_SSL_ENGINE_NOTFOUND if given a string they 56*6236dae4SAndroid Build Coastguard Worker# do not recognize as valid 57*6236dae4SAndroid Build Coastguard Workermy @ssl_engine_notfound = ( 58*6236dae4SAndroid Build Coastguard Worker 'CURLOPT_SSLENGINE', 59*6236dae4SAndroid Build Coastguard Worker ); 60*6236dae4SAndroid Build Coastguard Worker 61*6236dae4SAndroid Build Coastguard Worker# Options allowed to return CURLE_UNSUPPORTED_PROTOCOL if given a bad 62*6236dae4SAndroid Build Coastguard Worker# numerical input they do not recognize as valid 63*6236dae4SAndroid Build Coastguard Workermy @unsupported_protocol_num = ( 64*6236dae4SAndroid Build Coastguard Worker 'CURLOPT_HTTP_VERSION', 65*6236dae4SAndroid Build Coastguard Worker ); 66*6236dae4SAndroid Build Coastguard Worker 67*6236dae4SAndroid Build Coastguard Worker# Options allowed to return CURLE_NOT_BUILT_IN if given a bad 68*6236dae4SAndroid Build Coastguard Worker# numerical input they do not recognize as valid 69*6236dae4SAndroid Build Coastguard Workermy @not_built_in_num = ( 70*6236dae4SAndroid Build Coastguard Worker 'CURLOPT_HTTPAUTH', 71*6236dae4SAndroid Build Coastguard Worker 'CURLOPT_PROXYAUTH', 72*6236dae4SAndroid Build Coastguard Worker 'CURLOPT_SOCKS5_AUTH', 73*6236dae4SAndroid Build Coastguard Worker ); 74*6236dae4SAndroid Build Coastguard Worker 75*6236dae4SAndroid Build Coastguard Worker 76*6236dae4SAndroid Build Coastguard Worker# 77*6236dae4SAndroid Build Coastguard Worker# Generate a set of string checks 78*6236dae4SAndroid Build Coastguard Worker# 79*6236dae4SAndroid Build Coastguard Worker 80*6236dae4SAndroid Build Coastguard Workermy $allowedstringerrors = <<MOO 81*6236dae4SAndroid Build Coastguard Worker switch(code) { 82*6236dae4SAndroid Build Coastguard Worker case CURLE_BAD_FUNCTION_ARGUMENT: 83*6236dae4SAndroid Build Coastguard WorkerMOO 84*6236dae4SAndroid Build Coastguard Worker ; 85*6236dae4SAndroid Build Coastguard Worker 86*6236dae4SAndroid Build Coastguard Workerfor my $o (@bad_function_argument) { 87*6236dae4SAndroid Build Coastguard Worker $allowedstringerrors .= <<MOO 88*6236dae4SAndroid Build Coastguard Worker if(!strcmp("$o", name)) 89*6236dae4SAndroid Build Coastguard Worker return; 90*6236dae4SAndroid Build Coastguard WorkerMOO 91*6236dae4SAndroid Build Coastguard Worker ; 92*6236dae4SAndroid Build Coastguard Worker} 93*6236dae4SAndroid Build Coastguard Worker 94*6236dae4SAndroid Build Coastguard Worker$allowedstringerrors .= <<MOO 95*6236dae4SAndroid Build Coastguard Worker break; 96*6236dae4SAndroid Build Coastguard WorkerMOO 97*6236dae4SAndroid Build Coastguard Worker ; 98*6236dae4SAndroid Build Coastguard Worker 99*6236dae4SAndroid Build Coastguard Worker$allowedstringerrors .= <<MOO 100*6236dae4SAndroid Build Coastguard Worker case CURLE_UNSUPPORTED_PROTOCOL: 101*6236dae4SAndroid Build Coastguard WorkerMOO 102*6236dae4SAndroid Build Coastguard Worker ; 103*6236dae4SAndroid Build Coastguard Workerfor my $o (@unsupported_protocol) { 104*6236dae4SAndroid Build Coastguard Worker $allowedstringerrors .= <<MOO 105*6236dae4SAndroid Build Coastguard Worker if(!strcmp("$o", name)) 106*6236dae4SAndroid Build Coastguard Worker return; 107*6236dae4SAndroid Build Coastguard WorkerMOO 108*6236dae4SAndroid Build Coastguard Worker ; 109*6236dae4SAndroid Build Coastguard Worker} 110*6236dae4SAndroid Build Coastguard Worker$allowedstringerrors .= <<MOO 111*6236dae4SAndroid Build Coastguard Worker break; 112*6236dae4SAndroid Build Coastguard WorkerMOO 113*6236dae4SAndroid Build Coastguard Worker ; 114*6236dae4SAndroid Build Coastguard Worker 115*6236dae4SAndroid Build Coastguard Worker$allowedstringerrors .= <<MOO 116*6236dae4SAndroid Build Coastguard Worker case CURLE_SSL_ENGINE_NOTFOUND: 117*6236dae4SAndroid Build Coastguard WorkerMOO 118*6236dae4SAndroid Build Coastguard Worker ; 119*6236dae4SAndroid Build Coastguard Workerfor my $o (@ssl_engine_notfound) { 120*6236dae4SAndroid Build Coastguard Worker $allowedstringerrors .= <<MOO 121*6236dae4SAndroid Build Coastguard Worker if(!strcmp("$o", name)) 122*6236dae4SAndroid Build Coastguard Worker return; 123*6236dae4SAndroid Build Coastguard WorkerMOO 124*6236dae4SAndroid Build Coastguard Worker ; 125*6236dae4SAndroid Build Coastguard Worker} 126*6236dae4SAndroid Build Coastguard Worker$allowedstringerrors .= <<MOO 127*6236dae4SAndroid Build Coastguard Worker break; 128*6236dae4SAndroid Build Coastguard Worker default: 129*6236dae4SAndroid Build Coastguard Worker break; 130*6236dae4SAndroid Build Coastguard Worker } 131*6236dae4SAndroid Build Coastguard WorkerMOO 132*6236dae4SAndroid Build Coastguard Worker ; 133*6236dae4SAndroid Build Coastguard Worker 134*6236dae4SAndroid Build Coastguard Worker# 135*6236dae4SAndroid Build Coastguard Worker# Generate a set of string checks 136*6236dae4SAndroid Build Coastguard Worker# 137*6236dae4SAndroid Build Coastguard Worker 138*6236dae4SAndroid Build Coastguard Workermy $allowednumerrors = <<MOO 139*6236dae4SAndroid Build Coastguard Worker switch(code) { 140*6236dae4SAndroid Build Coastguard Worker case CURLE_UNSUPPORTED_PROTOCOL: 141*6236dae4SAndroid Build Coastguard WorkerMOO 142*6236dae4SAndroid Build Coastguard Worker ; 143*6236dae4SAndroid Build Coastguard Worker 144*6236dae4SAndroid Build Coastguard Workerfor my $o (@unsupported_protocol_num) { 145*6236dae4SAndroid Build Coastguard Worker $allowednumerrors .= <<MOO 146*6236dae4SAndroid Build Coastguard Worker if(!strcmp("$o", name)) 147*6236dae4SAndroid Build Coastguard Worker return; 148*6236dae4SAndroid Build Coastguard WorkerMOO 149*6236dae4SAndroid Build Coastguard Worker ; 150*6236dae4SAndroid Build Coastguard Worker} 151*6236dae4SAndroid Build Coastguard Worker 152*6236dae4SAndroid Build Coastguard Worker$allowednumerrors .= <<MOO 153*6236dae4SAndroid Build Coastguard Worker break; 154*6236dae4SAndroid Build Coastguard Worker case CURLE_NOT_BUILT_IN: 155*6236dae4SAndroid Build Coastguard WorkerMOO 156*6236dae4SAndroid Build Coastguard Worker ; 157*6236dae4SAndroid Build Coastguard Worker 158*6236dae4SAndroid Build Coastguard Workerfor my $o (@not_built_in_num) { 159*6236dae4SAndroid Build Coastguard Worker $allowednumerrors .= <<MOO 160*6236dae4SAndroid Build Coastguard Worker if(!strcmp("$o", name)) 161*6236dae4SAndroid Build Coastguard Worker return; 162*6236dae4SAndroid Build Coastguard WorkerMOO 163*6236dae4SAndroid Build Coastguard Worker ; 164*6236dae4SAndroid Build Coastguard Worker} 165*6236dae4SAndroid Build Coastguard Worker 166*6236dae4SAndroid Build Coastguard Worker$allowednumerrors .= <<MOO 167*6236dae4SAndroid Build Coastguard Worker break; 168*6236dae4SAndroid Build Coastguard Worker default: 169*6236dae4SAndroid Build Coastguard Worker break; 170*6236dae4SAndroid Build Coastguard Worker } 171*6236dae4SAndroid Build Coastguard WorkerMOO 172*6236dae4SAndroid Build Coastguard Worker ; 173*6236dae4SAndroid Build Coastguard Worker 174*6236dae4SAndroid Build Coastguard Workerif(!$ARGV[0]) { 175*6236dae4SAndroid Build Coastguard Worker die "missing target file name"; 176*6236dae4SAndroid Build Coastguard Worker} 177*6236dae4SAndroid Build Coastguard Worker 178*6236dae4SAndroid Build Coastguard Workeruse File::Temp qw/ :mktemp /; 179*6236dae4SAndroid Build Coastguard Worker 180*6236dae4SAndroid Build Coastguard Workermy ($fh, $tempfile) = mkstemp("lib1521-XXXXX"); 181*6236dae4SAndroid Build Coastguard Worker 182*6236dae4SAndroid Build Coastguard Workerprint $fh <<HEADER 183*6236dae4SAndroid Build Coastguard Worker/*************************************************************************** 184*6236dae4SAndroid Build Coastguard Worker * _ _ ____ _ 185*6236dae4SAndroid Build Coastguard Worker * Project ___| | | | _ \\| | 186*6236dae4SAndroid Build Coastguard Worker * / __| | | | |_) | | 187*6236dae4SAndroid Build Coastguard Worker * | (__| |_| | _ <| |___ 188*6236dae4SAndroid Build Coastguard Worker * \\___|\\___/|_| \\_\\_____| 189*6236dae4SAndroid Build Coastguard Worker * 190*6236dae4SAndroid Build Coastguard Worker * Copyright (C) Daniel Stenberg, <daniel\@haxx.se>, et al. 191*6236dae4SAndroid Build Coastguard Worker * 192*6236dae4SAndroid Build Coastguard Worker * This software is licensed as described in the file COPYING, which 193*6236dae4SAndroid Build Coastguard Worker * you should have received as part of this distribution. The terms 194*6236dae4SAndroid Build Coastguard Worker * are also available at https://curl.se/docs/copyright.html. 195*6236dae4SAndroid Build Coastguard Worker * 196*6236dae4SAndroid Build Coastguard Worker * You may opt to use, copy, modify, merge, publish, distribute and/or sell 197*6236dae4SAndroid Build Coastguard Worker * copies of the Software, and permit persons to whom the Software is 198*6236dae4SAndroid Build Coastguard Worker * furnished to do so, under the terms of the COPYING file. 199*6236dae4SAndroid Build Coastguard Worker * 200*6236dae4SAndroid Build Coastguard Worker * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 201*6236dae4SAndroid Build Coastguard Worker * KIND, either express or implied. 202*6236dae4SAndroid Build Coastguard Worker * 203*6236dae4SAndroid Build Coastguard Worker * SPDX-License-Identifier: curl 204*6236dae4SAndroid Build Coastguard Worker * 205*6236dae4SAndroid Build Coastguard Worker ***************************************************************************/ 206*6236dae4SAndroid Build Coastguard Worker#include "test.h" 207*6236dae4SAndroid Build Coastguard Worker#include "memdebug.h" 208*6236dae4SAndroid Build Coastguard Worker#include <limits.h> 209*6236dae4SAndroid Build Coastguard Worker 210*6236dae4SAndroid Build Coastguard Worker/* This source code is generated by mk-lib1521.pl ! */ 211*6236dae4SAndroid Build Coastguard Worker 212*6236dae4SAndroid Build Coastguard Workerstruct testdata { 213*6236dae4SAndroid Build Coastguard Worker char *blaha; 214*6236dae4SAndroid Build Coastguard Worker}; 215*6236dae4SAndroid Build Coastguard Worker 216*6236dae4SAndroid Build Coastguard Worker#define LO $minlong 217*6236dae4SAndroid Build Coastguard Worker#define HI $maxlong 218*6236dae4SAndroid Build Coastguard Worker#define OFF_LO (curl_off_t) LO 219*6236dae4SAndroid Build Coastguard Worker#define OFF_HI (curl_off_t) $maxofft 220*6236dae4SAndroid Build Coastguard Worker#define OFF_NO (curl_off_t) 0 221*6236dae4SAndroid Build Coastguard Worker 222*6236dae4SAndroid Build Coastguard Workerstatic size_t writecb(char *buffer, size_t size, size_t nitems, 223*6236dae4SAndroid Build Coastguard Worker void *outstream) 224*6236dae4SAndroid Build Coastguard Worker{ 225*6236dae4SAndroid Build Coastguard Worker (void)buffer; 226*6236dae4SAndroid Build Coastguard Worker (void)size; 227*6236dae4SAndroid Build Coastguard Worker (void)nitems; 228*6236dae4SAndroid Build Coastguard Worker (void)outstream; 229*6236dae4SAndroid Build Coastguard Worker return 0; 230*6236dae4SAndroid Build Coastguard Worker} 231*6236dae4SAndroid Build Coastguard Worker 232*6236dae4SAndroid Build Coastguard Workerstatic size_t readcb(char *buffer, 233*6236dae4SAndroid Build Coastguard Worker size_t size, 234*6236dae4SAndroid Build Coastguard Worker size_t nitems, 235*6236dae4SAndroid Build Coastguard Worker void *instream) 236*6236dae4SAndroid Build Coastguard Worker{ 237*6236dae4SAndroid Build Coastguard Worker (void)buffer; 238*6236dae4SAndroid Build Coastguard Worker (void)size; 239*6236dae4SAndroid Build Coastguard Worker (void)nitems; 240*6236dae4SAndroid Build Coastguard Worker (void)instream; 241*6236dae4SAndroid Build Coastguard Worker return 0; 242*6236dae4SAndroid Build Coastguard Worker} 243*6236dae4SAndroid Build Coastguard Worker 244*6236dae4SAndroid Build Coastguard Workerstatic void errlongzero(const char *name, CURLcode code, int lineno) 245*6236dae4SAndroid Build Coastguard Worker{ 246*6236dae4SAndroid Build Coastguard Worker printf("%s set to 0 returned %d, \\"%s\\" on line %d\\n", 247*6236dae4SAndroid Build Coastguard Worker name, code, curl_easy_strerror(code), lineno); 248*6236dae4SAndroid Build Coastguard Worker} 249*6236dae4SAndroid Build Coastguard Worker 250*6236dae4SAndroid Build Coastguard Workerstatic void errlong(const char *name, CURLcode code, int lineno) 251*6236dae4SAndroid Build Coastguard Worker{ 252*6236dae4SAndroid Build Coastguard Worker$allowednumerrors 253*6236dae4SAndroid Build Coastguard Worker printf("%s set to non-zero returned %d, \\"%s\\" on line %d\\n", 254*6236dae4SAndroid Build Coastguard Worker name, code, curl_easy_strerror(code), lineno); 255*6236dae4SAndroid Build Coastguard Worker} 256*6236dae4SAndroid Build Coastguard Worker 257*6236dae4SAndroid Build Coastguard Workerstatic void errstring(const char *name, CURLcode code, int lineno) 258*6236dae4SAndroid Build Coastguard Worker{ 259*6236dae4SAndroid Build Coastguard Worker /* allow this set of options to return CURLE_BAD_FUNCTION_ARGUMENT 260*6236dae4SAndroid Build Coastguard Worker when given a strange string input */ 261*6236dae4SAndroid Build Coastguard Worker$allowedstringerrors 262*6236dae4SAndroid Build Coastguard Worker printf("%s set to a string returned %d, \\"%s\\" on line %d\\n", 263*6236dae4SAndroid Build Coastguard Worker name, code, curl_easy_strerror(code), lineno); 264*6236dae4SAndroid Build Coastguard Worker} 265*6236dae4SAndroid Build Coastguard Worker 266*6236dae4SAndroid Build Coastguard Workerstatic void err(const char *name, CURLcode val, int lineno) 267*6236dae4SAndroid Build Coastguard Worker{ 268*6236dae4SAndroid Build Coastguard Worker printf("%s returned %d, \\"%s\\" on line %d\\n", 269*6236dae4SAndroid Build Coastguard Worker name, val, curl_easy_strerror(val), lineno); 270*6236dae4SAndroid Build Coastguard Worker} 271*6236dae4SAndroid Build Coastguard Worker 272*6236dae4SAndroid Build Coastguard Workerstatic void errnull(const char *name, CURLcode val, int lineno) 273*6236dae4SAndroid Build Coastguard Worker{ 274*6236dae4SAndroid Build Coastguard Worker printf("%s set to NULL returned %d, \\"%s\\" on line %d\\n", 275*6236dae4SAndroid Build Coastguard Worker name, val, curl_easy_strerror(val), lineno); 276*6236dae4SAndroid Build Coastguard Worker} 277*6236dae4SAndroid Build Coastguard Worker 278*6236dae4SAndroid Build Coastguard Workerstatic void geterr(const char *name, CURLcode val, int lineno) 279*6236dae4SAndroid Build Coastguard Worker{ 280*6236dae4SAndroid Build Coastguard Worker printf("CURLINFO_%s returned %d, \\"%s\\" on line %d\\n", 281*6236dae4SAndroid Build Coastguard Worker name, val, curl_easy_strerror(val), lineno); 282*6236dae4SAndroid Build Coastguard Worker} 283*6236dae4SAndroid Build Coastguard Worker 284*6236dae4SAndroid Build Coastguard Workerstatic curl_progress_callback progresscb; 285*6236dae4SAndroid Build Coastguard Workerstatic curl_write_callback headercb; 286*6236dae4SAndroid Build Coastguard Workerstatic curl_debug_callback debugcb; 287*6236dae4SAndroid Build Coastguard Workerstatic curl_trailer_callback trailercb; 288*6236dae4SAndroid Build Coastguard Workerstatic curl_ssl_ctx_callback ssl_ctx_cb; 289*6236dae4SAndroid Build Coastguard Workerstatic curl_ioctl_callback ioctlcb; 290*6236dae4SAndroid Build Coastguard Workerstatic curl_sockopt_callback sockoptcb; 291*6236dae4SAndroid Build Coastguard Workerstatic curl_opensocket_callback opensocketcb; 292*6236dae4SAndroid Build Coastguard Workerstatic curl_seek_callback seekcb; 293*6236dae4SAndroid Build Coastguard Workerstatic curl_sshkeycallback ssh_keycb; 294*6236dae4SAndroid Build Coastguard Workerstatic curl_sshhostkeycallback ssh_hostkeycb; 295*6236dae4SAndroid Build Coastguard Workerstatic curl_chunk_bgn_callback chunk_bgn_cb; 296*6236dae4SAndroid Build Coastguard Workerstatic curl_chunk_end_callback chunk_end_cb; 297*6236dae4SAndroid Build Coastguard Workerstatic curl_fnmatch_callback fnmatch_cb; 298*6236dae4SAndroid Build Coastguard Workerstatic curl_closesocket_callback closesocketcb; 299*6236dae4SAndroid Build Coastguard Workerstatic curl_xferinfo_callback xferinfocb; 300*6236dae4SAndroid Build Coastguard Workerstatic curl_hstsread_callback hstsreadcb; 301*6236dae4SAndroid Build Coastguard Workerstatic curl_hstswrite_callback hstswritecb; 302*6236dae4SAndroid Build Coastguard Workerstatic curl_resolver_start_callback resolver_start_cb; 303*6236dae4SAndroid Build Coastguard Workerstatic curl_prereq_callback prereqcb; 304*6236dae4SAndroid Build Coastguard Worker 305*6236dae4SAndroid Build Coastguard Worker/* long options that are okay to return 306*6236dae4SAndroid Build Coastguard Worker CURLE_BAD_FUNCTION_ARGUMENT */ 307*6236dae4SAndroid Build Coastguard Workerstatic bool bad_long(CURLcode res, int check) 308*6236dae4SAndroid Build Coastguard Worker{ 309*6236dae4SAndroid Build Coastguard Worker if(res != CURLE_BAD_FUNCTION_ARGUMENT) 310*6236dae4SAndroid Build Coastguard Worker return 0; /* not okay */ 311*6236dae4SAndroid Build Coastguard Worker 312*6236dae4SAndroid Build Coastguard Worker if(check < CURLOPTTYPE_OBJECTPOINT) { 313*6236dae4SAndroid Build Coastguard Worker /* LONG */ 314*6236dae4SAndroid Build Coastguard Worker return 1; 315*6236dae4SAndroid Build Coastguard Worker } 316*6236dae4SAndroid Build Coastguard Worker else if((check >= CURLOPTTYPE_OFF_T) && 317*6236dae4SAndroid Build Coastguard Worker (check < CURLOPTTYPE_BLOB)) { 318*6236dae4SAndroid Build Coastguard Worker /* OFF_T */ 319*6236dae4SAndroid Build Coastguard Worker return 1; 320*6236dae4SAndroid Build Coastguard Worker } 321*6236dae4SAndroid Build Coastguard Worker return 0; 322*6236dae4SAndroid Build Coastguard Worker} 323*6236dae4SAndroid Build Coastguard Worker 324*6236dae4SAndroid Build Coastguard Worker/* macro to check the first setopt of an option which then is allowed to get a 325*6236dae4SAndroid Build Coastguard Worker non-existing function return code back */ 326*6236dae4SAndroid Build Coastguard Worker#define present(x) ((x != CURLE_NOT_BUILT_IN) && (x != CURLE_UNKNOWN_OPTION)) 327*6236dae4SAndroid Build Coastguard Worker 328*6236dae4SAndroid Build Coastguard WorkerCURLcode test(char *URL) 329*6236dae4SAndroid Build Coastguard Worker{ 330*6236dae4SAndroid Build Coastguard Worker CURL *curl = NULL; 331*6236dae4SAndroid Build Coastguard Worker CURL *dep = NULL; 332*6236dae4SAndroid Build Coastguard Worker CURLSH *share = NULL; 333*6236dae4SAndroid Build Coastguard Worker char errorbuffer[CURL_ERROR_SIZE]; 334*6236dae4SAndroid Build Coastguard Worker void *conv_from_network_cb = NULL; 335*6236dae4SAndroid Build Coastguard Worker void *conv_to_network_cb = NULL; 336*6236dae4SAndroid Build Coastguard Worker void *conv_from_utf8_cb = NULL; 337*6236dae4SAndroid Build Coastguard Worker void *interleavecb = NULL; 338*6236dae4SAndroid Build Coastguard Worker char *stringpointerextra = (char *)"moooo"; 339*6236dae4SAndroid Build Coastguard Worker struct curl_slist *slist = NULL; 340*6236dae4SAndroid Build Coastguard Worker struct curl_httppost *httppost = NULL; 341*6236dae4SAndroid Build Coastguard Worker curl_mime *mimepost = NULL; 342*6236dae4SAndroid Build Coastguard Worker FILE *stream = stderr; 343*6236dae4SAndroid Build Coastguard Worker struct testdata object; 344*6236dae4SAndroid Build Coastguard Worker char *charp; 345*6236dae4SAndroid Build Coastguard Worker long val; 346*6236dae4SAndroid Build Coastguard Worker curl_off_t oval; 347*6236dae4SAndroid Build Coastguard Worker double dval; 348*6236dae4SAndroid Build Coastguard Worker curl_socket_t sockfd; 349*6236dae4SAndroid Build Coastguard Worker struct curl_certinfo *certinfo; 350*6236dae4SAndroid Build Coastguard Worker struct curl_tlssessioninfo *tlssession; 351*6236dae4SAndroid Build Coastguard Worker struct curl_blob blob = { (void *)"silly", 5, 0}; 352*6236dae4SAndroid Build Coastguard Worker CURLcode res = CURLE_OK; 353*6236dae4SAndroid Build Coastguard Worker (void)URL; /* not used */ 354*6236dae4SAndroid Build Coastguard Worker global_init(CURL_GLOBAL_ALL); 355*6236dae4SAndroid Build Coastguard Worker easy_init(dep); 356*6236dae4SAndroid Build Coastguard Worker easy_init(curl); 357*6236dae4SAndroid Build Coastguard Worker share = curl_share_init(); 358*6236dae4SAndroid Build Coastguard Worker if(!share) { 359*6236dae4SAndroid Build Coastguard Worker res = CURLE_OUT_OF_MEMORY; 360*6236dae4SAndroid Build Coastguard Worker goto test_cleanup; 361*6236dae4SAndroid Build Coastguard Worker } 362*6236dae4SAndroid Build Coastguard Worker 363*6236dae4SAndroid Build Coastguard Worker CURL_IGNORE_DEPRECATION( 364*6236dae4SAndroid Build Coastguard WorkerHEADER 365*6236dae4SAndroid Build Coastguard Worker ; 366*6236dae4SAndroid Build Coastguard Worker 367*6236dae4SAndroid Build Coastguard Workerwhile(<STDIN>) { 368*6236dae4SAndroid Build Coastguard Worker s/^\s*(.*?)\s*$/$1/; # Trim. 369*6236dae4SAndroid Build Coastguard Worker # Remove multi-line comment trail. 370*6236dae4SAndroid Build Coastguard Worker if($incomment) { 371*6236dae4SAndroid Build Coastguard Worker if($_ !~ /.*?\*\/\s*(.*)$/) { 372*6236dae4SAndroid Build Coastguard Worker next; 373*6236dae4SAndroid Build Coastguard Worker } 374*6236dae4SAndroid Build Coastguard Worker $_ = $1; 375*6236dae4SAndroid Build Coastguard Worker $incomment = 0; 376*6236dae4SAndroid Build Coastguard Worker } 377*6236dae4SAndroid Build Coastguard Worker if($line ne "") { 378*6236dae4SAndroid Build Coastguard Worker # Unfold line. 379*6236dae4SAndroid Build Coastguard Worker $_ = "$line $1"; 380*6236dae4SAndroid Build Coastguard Worker $line = ""; 381*6236dae4SAndroid Build Coastguard Worker } 382*6236dae4SAndroid Build Coastguard Worker # Remove comments. 383*6236dae4SAndroid Build Coastguard Worker while($_ =~ /^(.*?)\/\*.*?\*\/(.*)$/) { 384*6236dae4SAndroid Build Coastguard Worker $_ = "$1 $2"; 385*6236dae4SAndroid Build Coastguard Worker } 386*6236dae4SAndroid Build Coastguard Worker s/^\s*(.*?)\s*$/$1/; # Trim again. 387*6236dae4SAndroid Build Coastguard Worker if($_ =~ /^(.*)\/\*/) { 388*6236dae4SAndroid Build Coastguard Worker $_ = $1; 389*6236dae4SAndroid Build Coastguard Worker $incomment = 1; 390*6236dae4SAndroid Build Coastguard Worker } 391*6236dae4SAndroid Build Coastguard Worker # Ignore preprocessor directives and blank lines. 392*6236dae4SAndroid Build Coastguard Worker if($_ =~ /^(?:#|$)/) { 393*6236dae4SAndroid Build Coastguard Worker next; 394*6236dae4SAndroid Build Coastguard Worker } 395*6236dae4SAndroid Build Coastguard Worker # Handle lines that may be continued as if they were folded. 396*6236dae4SAndroid Build Coastguard Worker if($_ !~ /[;,{}]$/) { 397*6236dae4SAndroid Build Coastguard Worker # Folded line. 398*6236dae4SAndroid Build Coastguard Worker $line = $_; 399*6236dae4SAndroid Build Coastguard Worker next; 400*6236dae4SAndroid Build Coastguard Worker } 401*6236dae4SAndroid Build Coastguard Worker if($_ =~ / CURL_DEPRECATED\(/) { 402*6236dae4SAndroid Build Coastguard Worker # Drop deprecation info. 403*6236dae4SAndroid Build Coastguard Worker if($_ !~ /^(.*?) CURL_DEPRECATED\(.*?"\)(.*)$/) { 404*6236dae4SAndroid Build Coastguard Worker # Needs unfolding. 405*6236dae4SAndroid Build Coastguard Worker $line = $_; 406*6236dae4SAndroid Build Coastguard Worker next; 407*6236dae4SAndroid Build Coastguard Worker } 408*6236dae4SAndroid Build Coastguard Worker $_ = $1 . $2; 409*6236dae4SAndroid Build Coastguard Worker } 410*6236dae4SAndroid Build Coastguard Worker if($_ =~ /^CURLOPT(?:DEPRECATED)?\(/ && $_ !~ /\),$/) { 411*6236dae4SAndroid Build Coastguard Worker # Multi-line CURLOPTs need unfolding. 412*6236dae4SAndroid Build Coastguard Worker $line = $_; 413*6236dae4SAndroid Build Coastguard Worker next; 414*6236dae4SAndroid Build Coastguard Worker } 415*6236dae4SAndroid Build Coastguard Worker if($_ =~ /^CURLOPT(?:DEPRECATED)?\(([^ ]*), ([^ ]*), (\d*)[,)]/) { 416*6236dae4SAndroid Build Coastguard Worker my ($name, $type, $val)=($1, $2, $3); 417*6236dae4SAndroid Build Coastguard Worker my $w=" "; 418*6236dae4SAndroid Build Coastguard Worker my $w2="$w$w"; 419*6236dae4SAndroid Build Coastguard Worker my $w3="$w$w$w"; 420*6236dae4SAndroid Build Coastguard Worker my $opt = $name; 421*6236dae4SAndroid Build Coastguard Worker $opt =~ s/^CURLOPT_//; 422*6236dae4SAndroid Build Coastguard Worker my $exists = "${w}{\n"; 423*6236dae4SAndroid Build Coastguard Worker # the first check for an option 424*6236dae4SAndroid Build Coastguard Worker my $fpref = "${exists}${w2}CURLcode first =\n${w3}curl_easy_setopt(curl, $name,"; 425*6236dae4SAndroid Build Coastguard Worker my $ifpresent = "${w2}if(present(first)) {\n"; 426*6236dae4SAndroid Build Coastguard Worker my $pref = "${w3}res = curl_easy_setopt(curl, $name,"; 427*6236dae4SAndroid Build Coastguard Worker my $i = ' ' x (length($w) + 25); 428*6236dae4SAndroid Build Coastguard Worker my $fcheck = <<MOO 429*6236dae4SAndroid Build Coastguard Worker if(first && present(first)) /* first setopt check only */ 430*6236dae4SAndroid Build Coastguard Worker err("$name", first, __LINE__); 431*6236dae4SAndroid Build Coastguard WorkerMOO 432*6236dae4SAndroid Build Coastguard Worker ; 433*6236dae4SAndroid Build Coastguard Worker my $fstringcheck = <<MOO 434*6236dae4SAndroid Build Coastguard Worker if(first && present(first)) /* first setopt check only */ 435*6236dae4SAndroid Build Coastguard Worker errstring("$name", first, __LINE__); 436*6236dae4SAndroid Build Coastguard WorkerMOO 437*6236dae4SAndroid Build Coastguard Worker ; 438*6236dae4SAndroid Build Coastguard Worker my $check = <<MOO 439*6236dae4SAndroid Build Coastguard Worker if(res) 440*6236dae4SAndroid Build Coastguard Worker err("$name", res, __LINE__); 441*6236dae4SAndroid Build Coastguard WorkerMOO 442*6236dae4SAndroid Build Coastguard Worker ; 443*6236dae4SAndroid Build Coastguard Worker my $flongcheckzero = <<MOO 444*6236dae4SAndroid Build Coastguard Worker if(first && present(first) && !bad_long(first, 445*6236dae4SAndroid Build Coastguard Worker $name)) 446*6236dae4SAndroid Build Coastguard Worker errlongzero("$name", first, __LINE__); 447*6236dae4SAndroid Build Coastguard WorkerMOO 448*6236dae4SAndroid Build Coastguard Worker ; 449*6236dae4SAndroid Build Coastguard Worker 450*6236dae4SAndroid Build Coastguard Worker my $longcheck = <<MOO 451*6236dae4SAndroid Build Coastguard Worker if(res && !bad_long(res, $name)) 452*6236dae4SAndroid Build Coastguard Worker errlong("$name", res, __LINE__); 453*6236dae4SAndroid Build Coastguard WorkerMOO 454*6236dae4SAndroid Build Coastguard Worker ; 455*6236dae4SAndroid Build Coastguard Worker 456*6236dae4SAndroid Build Coastguard Worker my $nullcheck = <<MOO 457*6236dae4SAndroid Build Coastguard Worker if(res) 458*6236dae4SAndroid Build Coastguard Worker errnull(\"$name\", res, __LINE__); 459*6236dae4SAndroid Build Coastguard WorkerMOO 460*6236dae4SAndroid Build Coastguard Worker ; 461*6236dae4SAndroid Build Coastguard Worker 462*6236dae4SAndroid Build Coastguard Worker print $fh "\n /****** Verify $name ******/\n"; 463*6236dae4SAndroid Build Coastguard Worker if($type eq "CURLOPTTYPE_STRINGPOINT") { 464*6236dae4SAndroid Build Coastguard Worker print $fh "${fpref} \"string\");\n$fstringcheck"; 465*6236dae4SAndroid Build Coastguard Worker print $fh "$ifpresent"; 466*6236dae4SAndroid Build Coastguard Worker print $fh "${pref} NULL);\n$nullcheck"; 467*6236dae4SAndroid Build Coastguard Worker } 468*6236dae4SAndroid Build Coastguard Worker elsif(($type eq "CURLOPTTYPE_LONG") || 469*6236dae4SAndroid Build Coastguard Worker ($type eq "CURLOPTTYPE_VALUES")) { 470*6236dae4SAndroid Build Coastguard Worker print $fh "${fpref} 0L);\n$flongcheckzero"; 471*6236dae4SAndroid Build Coastguard Worker print $fh "$ifpresent"; 472*6236dae4SAndroid Build Coastguard Worker print $fh "${pref} 22L);\n$longcheck"; 473*6236dae4SAndroid Build Coastguard Worker print $fh "${pref} LO);\n$longcheck"; 474*6236dae4SAndroid Build Coastguard Worker print $fh "${pref} HI);\n$longcheck"; 475*6236dae4SAndroid Build Coastguard Worker } 476*6236dae4SAndroid Build Coastguard Worker elsif($type eq "CURLOPTTYPE_OFF_T") { 477*6236dae4SAndroid Build Coastguard Worker print $fh "${fpref} OFF_NO);\n$flongcheckzero"; 478*6236dae4SAndroid Build Coastguard Worker print $fh "$ifpresent"; 479*6236dae4SAndroid Build Coastguard Worker my $lvl = " " x 29; 480*6236dae4SAndroid Build Coastguard Worker print $fh "${pref}\n${lvl}(curl_off_t)22);\n$longcheck"; 481*6236dae4SAndroid Build Coastguard Worker print $fh "${pref} OFF_HI);\n$longcheck"; 482*6236dae4SAndroid Build Coastguard Worker print $fh "${pref} OFF_LO);\n$longcheck"; 483*6236dae4SAndroid Build Coastguard Worker } 484*6236dae4SAndroid Build Coastguard Worker elsif(($type eq "CURLOPTTYPE_OBJECTPOINT") || 485*6236dae4SAndroid Build Coastguard Worker ($type eq "CURLOPTTYPE_CBPOINT")) { 486*6236dae4SAndroid Build Coastguard Worker if($name =~ /DEPENDS/) { 487*6236dae4SAndroid Build Coastguard Worker print $fh "${fpref} dep);\n$fcheck"; 488*6236dae4SAndroid Build Coastguard Worker } 489*6236dae4SAndroid Build Coastguard Worker elsif($name =~ "SHARE") { 490*6236dae4SAndroid Build Coastguard Worker print $fh "${fpref} share);\n$fcheck"; 491*6236dae4SAndroid Build Coastguard Worker } 492*6236dae4SAndroid Build Coastguard Worker elsif($name eq "CURLOPT_ERRORBUFFER") { 493*6236dae4SAndroid Build Coastguard Worker print $fh "${fpref} errorbuffer);\n$fcheck"; 494*6236dae4SAndroid Build Coastguard Worker } 495*6236dae4SAndroid Build Coastguard Worker elsif(($name eq "CURLOPT_POSTFIELDS") || 496*6236dae4SAndroid Build Coastguard Worker ($name eq "CURLOPT_COPYPOSTFIELDS")) { 497*6236dae4SAndroid Build Coastguard Worker # set size to zero to avoid it being "illegal" 498*6236dae4SAndroid Build Coastguard Worker print $fh " (void)curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0);\n"; 499*6236dae4SAndroid Build Coastguard Worker print $fh "${fpref} stringpointerextra);\n$fcheck"; 500*6236dae4SAndroid Build Coastguard Worker } 501*6236dae4SAndroid Build Coastguard Worker elsif($name eq "CURLOPT_HTTPPOST") { 502*6236dae4SAndroid Build Coastguard Worker print $fh "${fpref} httppost);\n$fcheck"; 503*6236dae4SAndroid Build Coastguard Worker } 504*6236dae4SAndroid Build Coastguard Worker elsif($name eq "CURLOPT_MIMEPOST") { 505*6236dae4SAndroid Build Coastguard Worker print $fh "${fpref} mimepost);\n$fcheck"; 506*6236dae4SAndroid Build Coastguard Worker } 507*6236dae4SAndroid Build Coastguard Worker elsif($name eq "CURLOPT_STDERR") { 508*6236dae4SAndroid Build Coastguard Worker print $fh "${fpref} stream);\n$fcheck"; 509*6236dae4SAndroid Build Coastguard Worker } 510*6236dae4SAndroid Build Coastguard Worker else { 511*6236dae4SAndroid Build Coastguard Worker print $fh "${fpref} &object);\n$fcheck"; 512*6236dae4SAndroid Build Coastguard Worker } 513*6236dae4SAndroid Build Coastguard Worker print $fh "$ifpresent"; 514*6236dae4SAndroid Build Coastguard Worker print $fh "${pref} NULL);\n$nullcheck"; 515*6236dae4SAndroid Build Coastguard Worker } 516*6236dae4SAndroid Build Coastguard Worker elsif($type eq "CURLOPTTYPE_SLISTPOINT") { 517*6236dae4SAndroid Build Coastguard Worker print $fh "${fpref} slist);\n$fcheck"; 518*6236dae4SAndroid Build Coastguard Worker print $fh "$ifpresent"; 519*6236dae4SAndroid Build Coastguard Worker print $fh "${pref} NULL);\n$nullcheck"; 520*6236dae4SAndroid Build Coastguard Worker } 521*6236dae4SAndroid Build Coastguard Worker elsif($type eq "CURLOPTTYPE_FUNCTIONPOINT") { 522*6236dae4SAndroid Build Coastguard Worker if($name =~ /([^ ]*)FUNCTION/) { 523*6236dae4SAndroid Build Coastguard Worker my $l=lc($1); 524*6236dae4SAndroid Build Coastguard Worker $l =~ s/^curlopt_//; 525*6236dae4SAndroid Build Coastguard Worker print $fh "${fpref}\n$i${l}cb);\n$fcheck"; 526*6236dae4SAndroid Build Coastguard Worker } 527*6236dae4SAndroid Build Coastguard Worker else { 528*6236dae4SAndroid Build Coastguard Worker print $fh "${fpref} &func);\n$fcheck"; 529*6236dae4SAndroid Build Coastguard Worker } 530*6236dae4SAndroid Build Coastguard Worker print $fh "$ifpresent"; 531*6236dae4SAndroid Build Coastguard Worker print $fh "${pref} NULL);\n$nullcheck"; 532*6236dae4SAndroid Build Coastguard Worker } 533*6236dae4SAndroid Build Coastguard Worker elsif($type eq "CURLOPTTYPE_BLOB") { 534*6236dae4SAndroid Build Coastguard Worker print $fh "${fpref} &blob);\n$check"; 535*6236dae4SAndroid Build Coastguard Worker print $fh "$ifpresent"; 536*6236dae4SAndroid Build Coastguard Worker print $fh "${pref} NULL);\n$nullcheck"; 537*6236dae4SAndroid Build Coastguard Worker } 538*6236dae4SAndroid Build Coastguard Worker else { 539*6236dae4SAndroid Build Coastguard Worker print STDERR "\nUnknown type: $type\n"; 540*6236dae4SAndroid Build Coastguard Worker exit 22; # exit to make this noticed! 541*6236dae4SAndroid Build Coastguard Worker } 542*6236dae4SAndroid Build Coastguard Worker 543*6236dae4SAndroid Build Coastguard Worker print $fh <<MOO 544*6236dae4SAndroid Build Coastguard Worker } /* end of secondary checks */ 545*6236dae4SAndroid Build Coastguard Worker } /* end of single setopt */ 546*6236dae4SAndroid Build Coastguard WorkerMOO 547*6236dae4SAndroid Build Coastguard Worker ; 548*6236dae4SAndroid Build Coastguard Worker } 549*6236dae4SAndroid Build Coastguard Worker elsif($_ =~ /^CURLINFO_NONE/) { 550*6236dae4SAndroid Build Coastguard Worker $infomode = 1; 551*6236dae4SAndroid Build Coastguard Worker } 552*6236dae4SAndroid Build Coastguard Worker elsif($infomode && 553*6236dae4SAndroid Build Coastguard Worker ($_ =~ /^CURLINFO_([^ ]*) *= *CURLINFO_([^ ]*)/)) { 554*6236dae4SAndroid Build Coastguard Worker my ($info, $type)=($1, $2); 555*6236dae4SAndroid Build Coastguard Worker my $c = " res = curl_easy_getinfo(curl, CURLINFO_$info,"; 556*6236dae4SAndroid Build Coastguard Worker my $check = " if(res)\n geterr(\"$info\", res, __LINE__);\n"; 557*6236dae4SAndroid Build Coastguard Worker if($type eq "STRING") { 558*6236dae4SAndroid Build Coastguard Worker print $fh "$c &charp);\n$check"; 559*6236dae4SAndroid Build Coastguard Worker } 560*6236dae4SAndroid Build Coastguard Worker elsif($type eq "LONG") { 561*6236dae4SAndroid Build Coastguard Worker print $fh "$c &val);\n$check"; 562*6236dae4SAndroid Build Coastguard Worker } 563*6236dae4SAndroid Build Coastguard Worker elsif($type eq "OFF_T") { 564*6236dae4SAndroid Build Coastguard Worker print $fh "$c &oval);\n$check"; 565*6236dae4SAndroid Build Coastguard Worker } 566*6236dae4SAndroid Build Coastguard Worker elsif($type eq "DOUBLE") { 567*6236dae4SAndroid Build Coastguard Worker print $fh "$c &dval);\n$check"; 568*6236dae4SAndroid Build Coastguard Worker } 569*6236dae4SAndroid Build Coastguard Worker elsif($type eq "SLIST") { 570*6236dae4SAndroid Build Coastguard Worker print $fh "$c &slist);\n$check"; 571*6236dae4SAndroid Build Coastguard Worker print $fh " if(slist)\n curl_slist_free_all(slist);\n"; 572*6236dae4SAndroid Build Coastguard Worker } 573*6236dae4SAndroid Build Coastguard Worker elsif($type eq "SOCKET") { 574*6236dae4SAndroid Build Coastguard Worker print $fh "$c &sockfd);\n$check"; 575*6236dae4SAndroid Build Coastguard Worker } 576*6236dae4SAndroid Build Coastguard Worker elsif($type eq "PTR") { 577*6236dae4SAndroid Build Coastguard Worker if($info eq "CERTINFO") { 578*6236dae4SAndroid Build Coastguard Worker print $fh "$c &certinfo);\n$check"; 579*6236dae4SAndroid Build Coastguard Worker } 580*6236dae4SAndroid Build Coastguard Worker elsif(($info eq "TLS_SESSION") || 581*6236dae4SAndroid Build Coastguard Worker ($info eq "TLS_SSL_PTR")) { 582*6236dae4SAndroid Build Coastguard Worker print $fh "$c &tlssession);\n$check"; 583*6236dae4SAndroid Build Coastguard Worker } 584*6236dae4SAndroid Build Coastguard Worker else { 585*6236dae4SAndroid Build Coastguard Worker print STDERR "$info/$type is unsupported\n"; 586*6236dae4SAndroid Build Coastguard Worker } 587*6236dae4SAndroid Build Coastguard Worker } 588*6236dae4SAndroid Build Coastguard Worker else { 589*6236dae4SAndroid Build Coastguard Worker print STDERR "$type is unsupported\n"; 590*6236dae4SAndroid Build Coastguard Worker } 591*6236dae4SAndroid Build Coastguard Worker } 592*6236dae4SAndroid Build Coastguard Worker} 593*6236dae4SAndroid Build Coastguard Worker 594*6236dae4SAndroid Build Coastguard Worker 595*6236dae4SAndroid Build Coastguard Workerprint $fh <<FOOTER 596*6236dae4SAndroid Build Coastguard Worker ) 597*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(curl, (CURLoption)1, 0); 598*6236dae4SAndroid Build Coastguard Worker res = CURLE_OK; 599*6236dae4SAndroid Build Coastguard Workertest_cleanup: 600*6236dae4SAndroid Build Coastguard Worker curl_easy_cleanup(curl); 601*6236dae4SAndroid Build Coastguard Worker curl_easy_cleanup(dep); 602*6236dae4SAndroid Build Coastguard Worker curl_share_cleanup(share); 603*6236dae4SAndroid Build Coastguard Worker curl_global_cleanup(); 604*6236dae4SAndroid Build Coastguard Worker 605*6236dae4SAndroid Build Coastguard Worker if(!res) 606*6236dae4SAndroid Build Coastguard Worker puts("ok"); 607*6236dae4SAndroid Build Coastguard Worker return res; 608*6236dae4SAndroid Build Coastguard Worker} 609*6236dae4SAndroid Build Coastguard WorkerFOOTER 610*6236dae4SAndroid Build Coastguard Worker ; 611*6236dae4SAndroid Build Coastguard Worker 612*6236dae4SAndroid Build Coastguard Workerclose($fh); 613*6236dae4SAndroid Build Coastguard Workerrename($tempfile, $ARGV[0]); 614