gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnurl] 61/282: urldata: do string enums without #ifdefs for build scrip


From: gnunet
Subject: [gnurl] 61/282: urldata: do string enums without #ifdefs for build scripts
Date: Wed, 01 Apr 2020 14:28:46 +0200

This is an automated email from the git hooks/post-receive script.

ng0 pushed a commit to branch master
in repository gnurl.

commit 42287004610f0d3386b1c08a0fff8ed149f76c4e
Author: Jon Rumsey <address@hidden>
AuthorDate: Mon Jan 27 09:23:43 2020 +0100

    urldata: do string enums without #ifdefs for build scripts
    
    ... and check for inconsistencies for OS400 at build time with the new
    chkstrings tool.
    
    Closes #4822
---
 lib/urldata.h               | 27 ++++++++++++--------
 packages/OS400/ccsidcurl.c  | 16 ------------
 packages/OS400/chkstrings.c | 62 +++++++++++++++++++++++++++++++++++++++++++++
 packages/OS400/make-lib.sh  | 20 +++++++++++++++
 4 files changed, 99 insertions(+), 26 deletions(-)

diff --git a/lib/urldata.h b/lib/urldata.h
index 6882e0a65..208ae0f42 100644
--- a/lib/urldata.h
+++ b/lib/urldata.h
@@ -1450,6 +1450,14 @@ struct DynamicStatic {
 
 struct Curl_multi;    /* declared and used only in multi.c */
 
+/*
+ * This enumeration MUST not use conditional directives (#ifdefs), new
+ * null terminated strings MUST be added to the enumeration immediately
+ * before STRING_LASTZEROTERMINATED, binary fields immediately before
+ * STRING_LAST. When doing so, ensure that the packages/OS400/chkstring.c
+ * test is updated and applicable changes for EBCDIC to ASCII conversion
+ * are catered for in curl_easy_setopt_ccsid()
+ */
 enum dupstring {
   STRING_CERT_ORIG,       /* client certificate file name */
   STRING_CERT_PROXY,      /* client certificate file name */
@@ -1506,36 +1514,35 @@ enum dupstring {
   STRING_RTSP_SESSION_ID, /* Session ID to use */
   STRING_RTSP_STREAM_URI, /* Stream URI for this request */
   STRING_RTSP_TRANSPORT,  /* Transport for this session */
-#ifdef USE_SSH
+
   STRING_SSH_PRIVATE_KEY, /* path to the private key file for auth */
   STRING_SSH_PUBLIC_KEY,  /* path to the public key file for auth */
   STRING_SSH_HOST_PUBLIC_KEY_MD5, /* md5 of host public key in ascii hex */
   STRING_SSH_KNOWNHOSTS,  /* file name of knownhosts file */
-#endif
+
   STRING_PROXY_SERVICE_NAME, /* Proxy service name */
   STRING_SERVICE_NAME,    /* Service name */
   STRING_MAIL_FROM,
   STRING_MAIL_AUTH,
 
-#ifdef USE_TLS_SRP
   STRING_TLSAUTH_USERNAME_ORIG,  /* TLS auth <username> */
   STRING_TLSAUTH_USERNAME_PROXY, /* TLS auth <username> */
   STRING_TLSAUTH_PASSWORD_ORIG,  /* TLS auth <password> */
   STRING_TLSAUTH_PASSWORD_PROXY, /* TLS auth <password> */
-#endif
+
   STRING_BEARER,                /* <bearer>, if used */
-#ifdef USE_UNIX_SOCKETS
+
   STRING_UNIX_SOCKET_PATH,      /* path to Unix socket, if used */
-#endif
+
   STRING_TARGET,                /* CURLOPT_REQUEST_TARGET */
   STRING_DOH,                   /* CURLOPT_DOH_URL */
-#ifdef USE_ALTSVC
+
   STRING_ALTSVC,                /* CURLOPT_ALTSVC */
-#endif
+
   STRING_SASL_AUTHZID,          /* CURLOPT_SASL_AUTHZID */
-#ifndef CURL_DISABLE_PROXY
+
   STRING_TEMP_URL,              /* temp URL storage for proxy use */
-#endif
+
   /* -- end of zero-terminated strings -- */
 
   STRING_LASTZEROTERMINATED,
diff --git a/packages/OS400/ccsidcurl.c b/packages/OS400/ccsidcurl.c
index 11e4c777e..64fb7393d 100644
--- a/packages/OS400/ccsidcurl.c
+++ b/packages/OS400/ccsidcurl.c
@@ -1130,22 +1130,6 @@ curl_easy_setopt_ccsid(CURL *curl, CURLoption tag, ...)
   char *cp;
   unsigned int ccsid;
   curl_off_t pfsize;
-  static char testwarn = 1;
-
-  /* Warns if this procedure has not been updated when the dupstring enum
-     changes.
-     We (try to) do it only once: there is no need to issue several times
-     the same message; but since threadsafeness is not handled here,
-     this may occur (and we don't care!). */
-
-  if(testwarn) {
-    testwarn = 0;
-
-    if((int) STRING_LASTZEROTERMINATED != (int) STRING_SASL_AUTHZID + 1 ||
-       (int) STRING_LAST != (int) STRING_COPYPOSTFIELDS + 1)
-      curl_mfprintf(stderr,
-       "*** WARNING: curl_easy_setopt_ccsid() should be reworked ***\n");
-  }
 
   data = (struct Curl_easy *) curl;
   va_start(arg, tag);
diff --git a/packages/OS400/chkstrings.c b/packages/OS400/chkstrings.c
new file mode 100644
index 000000000..613540e42
--- /dev/null
+++ b/packages/OS400/chkstrings.c
@@ -0,0 +1,62 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2020, Daniel Stenberg, <address@hidden>, 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.haxx.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.
+ *
+ ***************************************************************************/
+
+#include <stdlib.h>
+#pragma enum(int)
+#include "curl_setup.h"
+#include "urldata.h"
+
+/* The following defines indicate the expected dupstring enum values
+ * in curl_easy_setopt_ccsid() in packages/OS400/ccsidcurl.c. If a
+ * mismatch is flagged during the build, it indicates that 
curl_easy_setopt_ccsid()
+ * may need updating to perform data EBCDIC to ASCII data conversion on 
+ * the string.
+ * Once any applicable changes to curl_easy_setopt_ccsid() have been
+ * made, the EXPECTED_STRING_LASTZEROTERMINATED/EXPECTED_STRING_LAST
+ * values can be updated to match the latest enum values in urldata.h.
+ */
+#define EXPECTED_STRING_LASTZEROTERMINATED  (STRING_TEMP_URL + 1)
+#define EXPECTED_STRING_LAST                (STRING_COPYPOSTFIELDS + 1)
+
+int main(int argc, char *argv[])
+{
+  int rc = 0;
+
+  if (STRING_LASTZEROTERMINATED != EXPECTED_STRING_LASTZEROTERMINATED)
+  {
+    fprintf(stderr,"STRING_LASTZEROTERMINATED(%d) is not expected 
value(%d).\n", 
+            STRING_LASTZEROTERMINATED, EXPECTED_STRING_LASTZEROTERMINATED);
+    rc += 1;
+  }
+  if (STRING_LAST != EXPECTED_STRING_LAST)
+  {
+    fprintf(stderr,"STRING_LAST(%d) is not expected value(%d).\n", 
+            STRING_LAST, EXPECTED_STRING_LAST);
+    rc += 2;
+  }
+  if (rc != 0)
+  {
+    fprintf(stderr,"curl_easy_setopt_ccsid() in packages/OS400/ccsidcurl.c"
+            " may need updating if new strings are provided as input via the 
curl API.\n");
+  }
+  return rc;
+}
\ No newline at end of file
diff --git a/packages/OS400/make-lib.sh b/packages/OS400/make-lib.sh
index 410bef05b..fadb4c5f6 100644
--- a/packages/OS400/make-lib.sh
+++ b/packages/OS400/make-lib.sh
@@ -46,6 +46,26 @@ sed -e ':begin'                                              
           \
 
 INCLUDES="'`pwd`'"
 
+# Create a small C program to check ccsidcurl.c is up to date
+if action_needed "${LIBIFSNAME}/CHKSTRINGS.PGM"
+then
+  CMD="CRTBNDC PGM(${TARGETLIB}/CHKSTRINGS) 
SRCSTMF('${SCRIPTDIR}/chkstrings.c')"
+  CMD="${CMD} INCDIR('${TOPDIR}/include/curl' '${TOPDIR}/include' '${SRCDIR}' 
${INCLUDES})"
+  system -i "${CMD}"
+  if [ $? -ne 0 ]
+  then
+    echo "ERROR: Failed to build CHKSTRINGS *PGM object!"
+    exit 2
+  else
+    ${LIBIFSNAME}/CHKSTRINGS.PGM
+    if [ $? -ne 0 ]
+    then
+      echo "ERROR: CHKSTRINGS failed!"
+      exit 2
+    fi
+  fi
+fi
+
 make_module     OS400SYS        "${SCRIPTDIR}/os400sys.c"
 make_module     CCSIDCURL       "${SCRIPTDIR}/ccsidcurl.c"
 

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]