Annotation of embedaddon/curl/tests/libtest/mk-lib1521.pl, revision 1.1
1.1 ! misho 1: #!/usr/bin/env perl
! 2: #***************************************************************************
! 3: # _ _ ____ _
! 4: # Project ___| | | | _ \| |
! 5: # / __| | | | |_) | |
! 6: # | (__| |_| | _ <| |___
! 7: # \___|\___/|_| \_\_____|
! 8: #
! 9: # Copyright (C) 2017 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
! 10: #
! 11: # This software is licensed as described in the file COPYING, which
! 12: # you should have received as part of this distribution. The terms
! 13: # are also available at https://curl.haxx.se/docs/copyright.html.
! 14: #
! 15: # You may opt to use, copy, modify, merge, publish, distribute and/or sell
! 16: # copies of the Software, and permit persons to whom the Software is
! 17: # furnished to do so, under the terms of the COPYING file.
! 18: #
! 19: # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
! 20: # KIND, either express or implied.
! 21: #
! 22: ###########################################################################
! 23:
! 24: # Usage:
! 25: # perl mk-lib1521.pl < ../../include/curl/curl.h > lib1521.c
! 26:
! 27: # minimum and maximum long signed values
! 28: my $minlong = "LONG_MIN";
! 29: my $maxlong = "LONG_MAX";
! 30: # maximum long unsigned value
! 31: my $maxulong = "ULONG_MAX";
! 32:
! 33: print <<HEADER
! 34: /***************************************************************************
! 35: * _ _ ____ _
! 36: * Project ___| | | | _ \\| |
! 37: * / __| | | | |_) | |
! 38: * | (__| |_| | _ <| |___
! 39: * \\___|\\___/|_| \\_\\_____|
! 40: *
! 41: * Copyright (C) 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
! 42: *
! 43: * This software is licensed as described in the file COPYING, which
! 44: * you should have received as part of this distribution. The terms
! 45: * are also available at https://curl.haxx.se/docs/copyright.html.
! 46: *
! 47: * You may opt to use, copy, modify, merge, publish, distribute and/or sell
! 48: * copies of the Software, and permit persons to whom the Software is
! 49: * furnished to do so, under the terms of the COPYING file.
! 50: *
! 51: * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
! 52: * KIND, either express or implied.
! 53: *
! 54: ***************************************************************************/
! 55: #include "test.h"
! 56: #include "memdebug.h"
! 57: #include <limits.h>
! 58:
! 59: /* This source code is generated by mk-lib1521.pl ! */
! 60:
! 61: struct data {
! 62: char *blaha;
! 63: };
! 64:
! 65: #define LO $minlong
! 66: #define HI $maxlong
! 67: #define OFF_LO (curl_off_t) LO
! 68: #define OFF_HI (curl_off_t) $maxulong
! 69: #define OFF_NO (curl_off_t) 0
! 70:
! 71: /* Unexpected error.
! 72: CURLE_NOT_BUILT_IN - means disabled at build
! 73: CURLE_UNKNOWN_OPTION - means no such option (anymore?)
! 74: CURLE_SSL_ENGINE_NOTFOUND - set unknown ssl engine
! 75: CURLE_UNSUPPORTED_PROTOCOL - set bad HTTP version
! 76: CURLE_BAD_FUNCTION_ARGUMENT - unsupported value
! 77: */
! 78: #define UNEX(x) ((x) && \\
! 79: ((x) != CURLE_NOT_BUILT_IN) && \\
! 80: ((x) != CURLE_UNKNOWN_OPTION) && \\
! 81: ((x) != CURLE_SSL_ENGINE_NOTFOUND) && \\
! 82: ((x) != CURLE_UNSUPPORTED_PROTOCOL) && \\
! 83: ((x) != CURLE_BAD_FUNCTION_ARGUMENT) )
! 84:
! 85: static size_t writecb(char *buffer, size_t size, size_t nitems,
! 86: void *outstream)
! 87: {
! 88: (void)buffer;
! 89: (void)size;
! 90: (void)nitems;
! 91: (void)outstream;
! 92: return 0;
! 93: }
! 94:
! 95: static size_t readcb(char *buffer,
! 96: size_t size,
! 97: size_t nitems,
! 98: void *instream)
! 99: {
! 100: (void)buffer;
! 101: (void)size;
! 102: (void)nitems;
! 103: (void)instream;
! 104: return 0;
! 105: }
! 106:
! 107: static int err(const char *name, CURLcode val, int lineno)
! 108: {
! 109: printf("CURLOPT_%s returned %d, \\"%s\\" on line %d\\n",
! 110: name, val, curl_easy_strerror(val), lineno);
! 111: return (int)val;
! 112: }
! 113:
! 114: static int geterr(const char *name, CURLcode val, int lineno)
! 115: {
! 116: printf("CURLINFO_%s returned %d, \\"%s\\" on line %d\\n",
! 117: name, val, curl_easy_strerror(val), lineno);
! 118: return (int)val;
! 119: }
! 120:
! 121: static curl_progress_callback progresscb;
! 122: static curl_write_callback headercb;
! 123: static curl_debug_callback debugcb;
! 124: static curl_trailer_callback trailercb;
! 125: static curl_ssl_ctx_callback ssl_ctx_cb;
! 126: static curl_ioctl_callback ioctlcb;
! 127: static curl_sockopt_callback sockoptcb;
! 128: static curl_opensocket_callback opensocketcb;
! 129: static curl_seek_callback seekcb;
! 130: static curl_sshkeycallback ssh_keycb;
! 131: static curl_chunk_bgn_callback chunk_bgn_cb;
! 132: static curl_chunk_end_callback chunk_end_cb;
! 133: static curl_fnmatch_callback fnmatch_cb;
! 134: static curl_closesocket_callback closesocketcb;
! 135: static curl_xferinfo_callback xferinfocb;
! 136: static curl_resolver_start_callback resolver_start_cb;
! 137:
! 138: int test(char *URL)
! 139: {
! 140: CURL *curl = NULL;
! 141: CURL *dep = NULL;
! 142: CURLSH *share = NULL;
! 143: char errorbuffer[CURL_ERROR_SIZE];
! 144: void *conv_from_network_cb = NULL;
! 145: void *conv_to_network_cb = NULL;
! 146: void *conv_from_utf8_cb = NULL;
! 147: void *interleavecb = NULL;
! 148: char *stringpointerextra = (char *)"moooo";
! 149: struct curl_slist *slist = NULL;
! 150: struct curl_httppost *httppost = NULL;
! 151: curl_mime *mimepost = NULL;
! 152: FILE *stream = stderr;
! 153: struct data object;
! 154: char *charp;
! 155: long val;
! 156: curl_off_t oval;
! 157: double dval;
! 158: curl_socket_t sockfd;
! 159: struct curl_certinfo *certinfo;
! 160: struct curl_tlssessioninfo *tlssession;
! 161: CURLcode res = CURLE_OK;
! 162: (void)URL; /* not used */
! 163: global_init(CURL_GLOBAL_ALL);
! 164: easy_init(dep);
! 165: easy_init(curl);
! 166: share = curl_share_init();
! 167: if(!share) {
! 168: res = CURLE_OUT_OF_MEMORY;
! 169: goto test_cleanup;
! 170: }
! 171:
! 172: HEADER
! 173: ;
! 174:
! 175: while(<STDIN>) {
! 176: if($_ =~ /^ CURLOPT\(([^ ]*), ([^ ]*), (\d*)\)/) {
! 177: my ($name, $type, $val)=($1, $2, $3);
! 178: my $w=" ";
! 179: my $pref = "${w}res = curl_easy_setopt(curl, $name,";
! 180: my $i = ' ' x (length($w) + 23);
! 181: my $check = " if(UNEX(res)) {\n err(\"$name\", res, __LINE__);\n goto test_cleanup;\n }\n";
! 182: if($type eq "CURLOPTTYPE_STRINGPOINT") {
! 183: print "${pref} \"string\");\n$check";
! 184: print "${pref} NULL);\n$check";
! 185: }
! 186: elsif($type eq "CURLOPTTYPE_LONG") {
! 187: print "${pref} 0L);\n$check";
! 188: print "${pref} 22L);\n$check";
! 189: print "${pref} LO);\n$check";
! 190: print "${pref} HI);\n$check";
! 191: }
! 192: elsif($type eq "CURLOPTTYPE_OBJECTPOINT") {
! 193: if($name =~ /DEPENDS/) {
! 194: print "${pref} dep);\n$check";
! 195: }
! 196: elsif($name =~ "SHARE") {
! 197: print "${pref} share);\n$check";
! 198: }
! 199: elsif($name eq "CURLOPT_ERRORBUFFER") {
! 200: print "${pref} errorbuffer);\n$check";
! 201: }
! 202: elsif(($name eq "CURLOPT_POSTFIELDS") ||
! 203: ($name eq "CURLOPT_COPYPOSTFIELDS")) {
! 204: # set size to zero to avoid it being "illegal"
! 205: print " (void)curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0);\n";
! 206: print "${pref} stringpointerextra);\n$check";
! 207: }
! 208: elsif($name eq "CURLOPT_HTTPPOST") {
! 209: print "${pref} httppost);\n$check";
! 210: }
! 211: elsif($name eq "CURLOPT_MIMEPOST") {
! 212: print "${pref} mimepost);\n$check";
! 213: }
! 214: elsif($name eq "CURLOPT_STDERR") {
! 215: print "${pref} stream);\n$check";
! 216: }
! 217: else {
! 218: print "${pref} &object);\n$check";
! 219: }
! 220: print "${pref} NULL);\n$check";
! 221: }
! 222: elsif($type eq "CURLOPTTYPE_SLISTPOINT") {
! 223: print "${pref} slist);\n$check";
! 224: }
! 225: elsif($type eq "CURLOPTTYPE_FUNCTIONPOINT") {
! 226: if($name =~ /([^ ]*)FUNCTION/) {
! 227: my $l=lc($1);
! 228: $l =~ s/^curlopt_//;
! 229: print "${pref}\n$i${l}cb);\n$check";
! 230: }
! 231: else {
! 232: print "${pref} &func);\n$check";
! 233: }
! 234: print "${pref} NULL);\n$check";
! 235: }
! 236: elsif($type eq "CURLOPTTYPE_OFF_T") {
! 237: # play conservative to work with 32bit curl_off_t
! 238: print "${pref} OFF_NO);\n$check";
! 239: print "${pref} OFF_HI);\n$check";
! 240: print "${pref} OFF_LO);\n$check";
! 241: }
! 242: else {
! 243: print STDERR "\n---- $type\n";
! 244: }
! 245: }
! 246: elsif($_ =~ /^ CURLINFO_NONE/) {
! 247: $infomode = 1;
! 248: }
! 249: elsif($infomode &&
! 250: ($_ =~ /^ CURLINFO_([^ ]*) *= *CURLINFO_([^ ]*)/)) {
! 251: my ($info, $type)=($1, $2);
! 252: my $c = " res = curl_easy_getinfo(curl, CURLINFO_$info,";
! 253: my $check = " if(UNEX(res)) {\n geterr(\"$info\", res, __LINE__);\n goto test_cleanup;\n }\n";
! 254: if($type eq "STRING") {
! 255: print "$c &charp);\n$check";
! 256: }
! 257: elsif($type eq "LONG") {
! 258: print "$c &val);\n$check";
! 259: }
! 260: elsif($type eq "OFF_T") {
! 261: print "$c &oval);\n$check";
! 262: }
! 263: elsif($type eq "DOUBLE") {
! 264: print "$c &dval);\n$check";
! 265: }
! 266: elsif($type eq "SLIST") {
! 267: print "$c &slist);\n$check";
! 268: print " if(slist)\n curl_slist_free_all(slist);\n";
! 269: }
! 270: elsif($type eq "SOCKET") {
! 271: print "$c &sockfd);\n$check";
! 272: }
! 273: elsif($type eq "PTR") {
! 274: if($info eq "CERTINFO") {
! 275: print "$c &certinfo);\n$check";
! 276: }
! 277: elsif(($info eq "TLS_SESSION") ||
! 278: ($info eq "TLS_SSL_PTR")) {
! 279: print "$c &tlssession);\n$check";
! 280: }
! 281: else {
! 282: print STDERR "$info/$type is unsupported\n";
! 283: }
! 284: }
! 285: else {
! 286: print STDERR "$type is unsupported\n";
! 287: }
! 288: }
! 289: }
! 290:
! 291:
! 292: print <<FOOTER
! 293: curl_easy_setopt(curl, 1, 0);
! 294: res = CURLE_OK;
! 295: test_cleanup:
! 296: curl_easy_cleanup(curl);
! 297: curl_easy_cleanup(dep);
! 298: curl_share_cleanup(share);
! 299: curl_global_cleanup();
! 300:
! 301: return (int)res;
! 302: }
! 303: FOOTER
! 304: ;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>