[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.
- [gnurl] 24/282: wolfSSH: new SSH backend, (continued)
- [gnurl] 24/282: wolfSSH: new SSH backend, gnunet, 2020/04/01
- [gnurl] 45/282: http: move "oauth_bearer" from connectdata to Curl_easy, gnunet, 2020/04/01
- [gnurl] 40/282: HTTP: increase EXPECT_100_THRESHOLD to 1Mb, gnunet, 2020/04/01
- [gnurl] 32/282: wolfssh: remove fprintf() calls (and uses of __func__), gnunet, 2020/04/01
- [gnurl] 46/282: copyright: fix year ranges, gnunet, 2020/04/01
- [gnurl] 34/282: curl:progressbarinit: ignore column width from terminals < 20, gnunet, 2020/04/01
- [gnurl] 29/282: HTTP-COOKIES.md: describe the cookie file format, gnunet, 2020/04/01
- [gnurl] 51/282: openssl: make CURLINFO_CERTINFO not truncate x509v3 fields, gnunet, 2020/04/01
- [gnurl] 60/282: curl: make the -# spaceship bar not wrap the line, gnunet, 2020/04/01
- [gnurl] 50/282: CURLOPT_PROXY_SSL_OPTIONS.3: Sync with CURLOPT_SSL_OPTIONS.3, gnunet, 2020/04/01
- [gnurl] 61/282: urldata: do string enums without #ifdefs for build scripts,
gnunet <=
- [gnurl] 47/282: smtp: Allow RCPT TO command to fail for some recipients, gnunet, 2020/04/01
- [gnurl] 62/282: RELEASE-NOTES: synced, gnunet, 2020/04/01
- [gnurl] 48/282: RELEASE-NOTES: synced, gnunet, 2020/04/01
- [gnurl] 58/282: conn: do not reuse connection if SOCKS proxy credentials differ, gnunet, 2020/04/01
- [gnurl] 37/282: wolfssl: use the wc-prefixed symbol alternatives, gnunet, 2020/04/01
- [gnurl] 28/282: CMake: Add support for CMAKE_LTO option., gnunet, 2020/04/01
- [gnurl] 38/282: RELEASE-NOTES: synced, gnunet, 2020/04/01
- [gnurl] 44/282: curl: Let -D merge headers in one file again, gnunet, 2020/04/01
- [gnurl] 41/282: http.h: Copyright year out of date, should be 2020, gnunet, 2020/04/01
- [gnurl] 52/282: form.d: fix two minor typos, gnunet, 2020/04/01