1
0
mirror of https://github.com/moparisthebest/curl synced 2024-08-13 17:03:50 -04:00

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
This commit is contained in:
Jon Rumsey 2020-01-27 09:23:43 +01:00 committed by Daniel Stenberg
parent 9870b80f81
commit 4228700461
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
4 changed files with 99 additions and 26 deletions

View File

@ -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,

View File

@ -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);

View File

@ -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;
}

View File

@ -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"