xref: /aosp_15_r20/external/curl/tests/libtest/mk-lib1521.pl (revision 6236dae45794135f37c4eb022389c904c8b0090d)
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