[Feature][ZXW-88]merge P50 version

Only Configure: No
Affected branch: master
Affected module: unknown
Is it affected on both ZXIC and MTK: only ZXIC
Self-test: Yes
Doc Update: No

Change-Id: I34667719d9e0e7e29e8e4368848601cde0a48408
diff --git a/ap/lib/libcurl/curl-7.86.0/tests/libtest/mk-lib1521.pl b/ap/lib/libcurl/curl-7.86.0/tests/libtest/mk-lib1521.pl
new file mode 100755
index 0000000..1e00be8
--- /dev/null
+++ b/ap/lib/libcurl/curl-7.86.0/tests/libtest/mk-lib1521.pl
@@ -0,0 +1,319 @@
+#!/usr/bin/env perl
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
+#
+# Copyright (C) 2017 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at https://curl.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+# SPDX-License-Identifier: curl
+#
+###########################################################################
+
+# Usage:
+#   perl mk-lib1521.pl < ../../include/curl/curl.h > lib1521.c
+
+# minimum and maximum long signed values
+my $minlong = "LONG_MIN";
+my $maxlong = "LONG_MAX";
+# maximum long unsigned value
+my $maxulong = "ULONG_MAX";
+
+print <<HEADER
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \\| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \\___|\\___/|_| \\_\\_____|
+ *
+ * Copyright (C) 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include "test.h"
+#include "memdebug.h"
+#include <limits.h>
+
+/* This source code is generated by mk-lib1521.pl ! */
+
+struct data {
+    char *blaha;
+};
+
+#define LO $minlong
+#define HI $maxlong
+#define OFF_LO (curl_off_t) LO
+#define OFF_HI (curl_off_t) $maxulong
+#define OFF_NO (curl_off_t) 0
+
+/* Unexpected error.
+    CURLE_NOT_BUILT_IN   - means disabled at build
+    CURLE_UNKNOWN_OPTION - means no such option (anymore?)
+    CURLE_SSL_ENGINE_NOTFOUND - set unknown ssl engine
+    CURLE_UNSUPPORTED_PROTOCOL - set bad HTTP version
+    CURLE_BAD_FUNCTION_ARGUMENT - unsupported value
+   */
+#define UNEX(x) ((x) && \\
+                 ((x) != CURLE_NOT_BUILT_IN) && \\
+                 ((x) != CURLE_UNKNOWN_OPTION) && \\
+                 ((x) != CURLE_SSL_ENGINE_NOTFOUND) && \\
+                 ((x) != CURLE_UNSUPPORTED_PROTOCOL) && \\
+                 ((x) != CURLE_BAD_FUNCTION_ARGUMENT) )
+
+static size_t writecb(char *buffer, size_t size, size_t nitems,
+                      void *outstream)
+{
+  (void)buffer;
+  (void)size;
+  (void)nitems;
+  (void)outstream;
+  return 0;
+}
+
+static size_t readcb(char *buffer,
+              size_t size,
+              size_t nitems,
+              void *instream)
+{
+  (void)buffer;
+  (void)size;
+  (void)nitems;
+  (void)instream;
+  return 0;
+}
+
+static int err(const char *name, CURLcode val, int lineno)
+{
+  printf("CURLOPT_%s returned %d, \\"%s\\" on line %d\\n",
+         name, val, curl_easy_strerror(val), lineno);
+  return (int)val;
+}
+
+static int geterr(const char *name, CURLcode val, int lineno)
+{
+  printf("CURLINFO_%s returned %d, \\"%s\\" on line %d\\n",
+         name, val, curl_easy_strerror(val), lineno);
+  return (int)val;
+}
+
+static curl_progress_callback progresscb;
+static curl_write_callback headercb;
+static curl_debug_callback debugcb;
+static curl_trailer_callback trailercb;
+static curl_ssl_ctx_callback ssl_ctx_cb;
+static curl_ioctl_callback ioctlcb;
+static curl_sockopt_callback sockoptcb;
+static curl_opensocket_callback opensocketcb;
+static curl_seek_callback seekcb;
+static curl_sshkeycallback ssh_keycb;
+static curl_sshhostkeycallback ssh_hostkeycb;
+static curl_chunk_bgn_callback chunk_bgn_cb;
+static curl_chunk_end_callback chunk_end_cb;
+static curl_fnmatch_callback fnmatch_cb;
+static curl_closesocket_callback closesocketcb;
+static curl_xferinfo_callback xferinfocb;
+static curl_hstsread_callback hstsreadcb;
+static curl_hstswrite_callback hstswritecb;
+static curl_resolver_start_callback resolver_start_cb;
+static curl_prereq_callback prereqcb;
+
+int test(char *URL)
+{
+  CURL *curl = NULL;
+  CURL *dep = NULL;
+  CURLSH *share = NULL;
+  char errorbuffer[CURL_ERROR_SIZE];
+  void *conv_from_network_cb = NULL;
+  void *conv_to_network_cb = NULL;
+  void *conv_from_utf8_cb = NULL;
+  void *interleavecb = NULL;
+  char *stringpointerextra = (char *)"moooo";
+  struct curl_slist *slist = NULL;
+  struct curl_httppost *httppost = NULL;
+  curl_mime *mimepost = NULL;
+  FILE *stream = stderr;
+  struct data object;
+  char *charp;
+  long val;
+  curl_off_t oval;
+  double dval;
+  curl_socket_t sockfd;
+  struct curl_certinfo *certinfo;
+  struct curl_tlssessioninfo *tlssession;
+  struct curl_blob blob = { (void *)"silly", 5, 0};
+  CURLcode res = CURLE_OK;
+  (void)URL; /* not used */
+  global_init(CURL_GLOBAL_ALL);
+  easy_init(dep);
+  easy_init(curl);
+  share = curl_share_init();
+  if(!share) {
+    res = CURLE_OUT_OF_MEMORY;
+    goto test_cleanup;
+  }
+
+HEADER
+    ;
+
+while(<STDIN>) {
+    if($_ =~ /^  CURLOPT\(([^ ]*), ([^ ]*), (\d*)\)/) {
+        my ($name, $type, $val)=($1, $2, $3);
+        my $w="  ";
+        my $pref = "${w}res = curl_easy_setopt(curl, $name,";
+        my $i = ' ' x (length($w) + 23);
+        my $check = "  if(UNEX(res)) {\n    err(\"$name\", res, __LINE__);\n    goto test_cleanup;\n  }\n";
+        if($type eq "CURLOPTTYPE_STRINGPOINT") {
+            print "${pref} \"string\");\n$check";
+            print "${pref} NULL);\n$check";
+        }
+        elsif(($type eq "CURLOPTTYPE_LONG") ||
+              ($type eq "CURLOPTTYPE_VALUES")) {
+            print "${pref} 0L);\n$check";
+            print "${pref} 22L);\n$check";
+            print "${pref} LO);\n$check";
+            print "${pref} HI);\n$check";
+        }
+        elsif(($type eq "CURLOPTTYPE_OBJECTPOINT") ||
+              ($type eq "CURLOPTTYPE_CBPOINT")) {
+            if($name =~ /DEPENDS/) {
+              print "${pref} dep);\n$check";
+            }
+            elsif($name =~ "SHARE") {
+              print "${pref} share);\n$check";
+            }
+            elsif($name eq "CURLOPT_ERRORBUFFER") {
+              print "${pref} errorbuffer);\n$check";
+            }
+            elsif(($name eq "CURLOPT_POSTFIELDS") ||
+                  ($name eq "CURLOPT_COPYPOSTFIELDS")) {
+                # set size to zero to avoid it being "illegal"
+                print "  (void)curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0);\n";
+                print "${pref} stringpointerextra);\n$check";
+            }
+            elsif($name eq "CURLOPT_HTTPPOST") {
+              print "${pref} httppost);\n$check";
+            }
+            elsif($name eq "CURLOPT_MIMEPOST") {
+              print "${pref} mimepost);\n$check";
+            }
+            elsif($name eq "CURLOPT_STDERR") {
+              print "${pref} stream);\n$check";
+            }
+            else {
+              print "${pref} &object);\n$check";
+            }
+            print "${pref} NULL);\n$check";
+        }
+        elsif($type eq "CURLOPTTYPE_SLISTPOINT") {
+            print "${pref} slist);\n$check";
+        }
+        elsif($type eq "CURLOPTTYPE_FUNCTIONPOINT") {
+            if($name =~ /([^ ]*)FUNCTION/) {
+                my $l=lc($1);
+                $l =~ s/^curlopt_//;
+                print "${pref}\n$i${l}cb);\n$check";
+            }
+            else {
+                print "${pref} &func);\n$check";
+            }
+            print "${pref} NULL);\n$check";
+        }
+        elsif($type eq "CURLOPTTYPE_OFF_T") {
+            # play conservative to work with 32bit curl_off_t
+            print "${pref} OFF_NO);\n$check";
+            print "${pref} OFF_HI);\n$check";
+            print "${pref} OFF_LO);\n$check";
+        }
+        elsif($type eq "CURLOPTTYPE_BLOB") {
+            print "${pref} &blob);\n$check";
+        }
+        else {
+            print STDERR "\nUnknown type: $type\n";
+            exit 22; # exit to make this noticed!
+        }
+    }
+    elsif($_ =~ /^  CURLINFO_NONE/) {
+       $infomode = 1;
+    }
+    elsif($infomode &&
+          ($_ =~ /^  CURLINFO_([^ ]*) *= *CURLINFO_([^ ]*)/)) {
+       my ($info, $type)=($1, $2);
+       my $c = "  res = curl_easy_getinfo(curl, CURLINFO_$info,";
+       my $check = "  if(UNEX(res)) {\n    geterr(\"$info\", res, __LINE__);\n    goto test_cleanup;\n  }\n";
+       if($type eq "STRING") {
+         print "$c &charp);\n$check";
+       }
+       elsif($type eq "LONG") {
+         print "$c &val);\n$check";
+       }
+       elsif($type eq "OFF_T") {
+         print "$c &oval);\n$check";
+       }
+       elsif($type eq "DOUBLE") {
+         print "$c &dval);\n$check";
+       }
+       elsif($type eq "SLIST") {
+         print "$c &slist);\n$check";
+         print "  if(slist)\n    curl_slist_free_all(slist);\n";
+       }
+       elsif($type eq "SOCKET") {
+         print "$c &sockfd);\n$check";
+       }
+       elsif($type eq "PTR") {
+         if($info eq "CERTINFO") {
+            print "$c &certinfo);\n$check";
+         }
+         elsif(($info eq "TLS_SESSION") ||
+               ($info eq "TLS_SSL_PTR")) {
+            print "$c &tlssession);\n$check";
+         }
+         else {
+            print STDERR "$info/$type is unsupported\n";
+         }
+       }
+       else {
+         print STDERR "$type is unsupported\n";
+       }
+    }
+}
+
+
+print <<FOOTER
+  curl_easy_setopt(curl, (CURLoption)1, 0);
+  res = CURLE_OK;
+test_cleanup:
+  curl_easy_cleanup(curl);
+  curl_easy_cleanup(dep);
+  curl_share_cleanup(share);
+  curl_global_cleanup();
+
+  return (int)res;
+}
+FOOTER
+    ;