File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / curl / tests / libtest / mk-lib1521.pl
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jun 3 10:01:16 2020 UTC (5 years ago) by misho
Branches: curl, MAIN
CVS tags: v7_70_0p4, HEAD
curl

    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:     ;
  305: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>