summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorJon Rumsey <jrumsey@uk.ibm.com>2020-01-27 09:23:43 +0100
committerDaniel Stenberg <daniel@haxx.se>2020-01-27 09:26:58 +0100
commit42287004610f0d3386b1c08a0fff8ed149f76c4e (patch)
tree74cd647b2623bf76e94b1f3726965bb05016ac2b /packages
parent9870b80f81789d45744a6639d97c5f1595f9fd70 (diff)
downloadcurl-42287004610f0d3386b1c08a0fff8ed149f76c4e.tar.gz
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
Diffstat (limited to 'packages')
-rw-r--r--packages/OS400/ccsidcurl.c16
-rw-r--r--packages/OS400/chkstrings.c62
-rw-r--r--packages/OS400/make-lib.sh20
3 files changed, 82 insertions, 16 deletions
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, <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.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"