mirror of
https://github.com/curl/curl.git
synced 2025-02-17 14:59:45 +08:00
strtok: use namespaced strtok_r
macro instead of redefining it
krb5 defines `strtok_r` for Windows unconditionally in its public
header:
dc5554394e/src/include/win-mac.h (L214-L215)
resulting in this warning:
```
lib\strtok.h(31,9): warning C4005: 'strtok_r': macro redefinition
C:\vcpkg\installed\x64-windows\include\win-mac.h(215,9):
see previous definition of 'strtok_r'
```
The krb5 macro collides with curl's internal definition, in case
the `strtok_r` function is undetected and falling back to a local
replacement.
Reported-by: Tal Regev
Bug: https://github.com/curl/curl/pull/15549#issuecomment-2468251761
Closes #15564
This commit is contained in:
parent
92124838c6
commit
22c45844af
@ -833,14 +833,16 @@ parse_netscape(struct Cookie *co,
|
||||
if(ptr)
|
||||
*ptr = 0; /* clear it */
|
||||
|
||||
firstptr = strtok_r((char *)lineptr, "\t", &tok_buf); /* tokenize on TAB */
|
||||
/* tokenize on TAB */
|
||||
firstptr = Curl_strtok_r((char *)lineptr, "\t", &tok_buf);
|
||||
|
||||
/*
|
||||
* Now loop through the fields and init the struct we already have
|
||||
* allocated
|
||||
*/
|
||||
fields = 0;
|
||||
for(ptr = firstptr; ptr; ptr = strtok_r(NULL, "\t", &tok_buf), fields++) {
|
||||
for(ptr = firstptr; ptr;
|
||||
ptr = Curl_strtok_r(NULL, "\t", &tok_buf), fields++) {
|
||||
switch(fields) {
|
||||
case 0:
|
||||
if(ptr[0]=='.') /* skip preceding dots */
|
||||
|
@ -365,7 +365,7 @@ static CURLcode trc_opt(const char *config)
|
||||
if(!tmp)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
token = strtok_r(tmp, ", ", &tok_buf);
|
||||
token = Curl_strtok_r(tmp, ", ", &tok_buf);
|
||||
while(token) {
|
||||
switch(*token) {
|
||||
case '-':
|
||||
@ -391,7 +391,7 @@ static CURLcode trc_opt(const char *config)
|
||||
else
|
||||
trc_apply_level_by_name(token, lvl);
|
||||
|
||||
token = strtok_r(NULL, ", ", &tok_buf);
|
||||
token = Curl_strtok_r(NULL, ", ", &tok_buf);
|
||||
}
|
||||
free(tmp);
|
||||
return CURLE_OK;
|
||||
|
@ -825,8 +825,8 @@ static bool split_str(char *str, char ***out, size_t *count)
|
||||
if(!res)
|
||||
return FALSE;
|
||||
|
||||
for(i = 0, s = strtok_r(str, ",", &lasts); s && i < items;
|
||||
s = strtok_r(NULL, ",", &lasts), i++)
|
||||
for(i = 0, s = Curl_strtok_r(str, ",", &lasts); s && i < items;
|
||||
s = Curl_strtok_r(NULL, ",", &lasts), i++)
|
||||
res[i] = s;
|
||||
|
||||
*out = res;
|
||||
|
@ -26,11 +26,11 @@
|
||||
#include "curl_setup.h"
|
||||
#include <stddef.h>
|
||||
|
||||
#ifndef HAVE_STRTOK_R
|
||||
char *Curl_strtok_r(char *s, const char *delim, char **last);
|
||||
#define strtok_r Curl_strtok_r
|
||||
#else
|
||||
#ifdef HAVE_STRTOK_R
|
||||
#include <string.h>
|
||||
#define Curl_strtok_r strtok_r
|
||||
#else
|
||||
char *Curl_strtok_r(char *s, const char *delim, char **last);
|
||||
#endif
|
||||
|
||||
#endif /* HEADER_CURL_STRTOK_H */
|
||||
|
@ -227,12 +227,12 @@ static CURLcode auth_digest_get_qop_values(const char *options, int *value)
|
||||
*value = 0;
|
||||
|
||||
/* Tokenise the list of qop values. Use a temporary clone of the buffer since
|
||||
strtok_r() ruins it. */
|
||||
Curl_strtok_r() ruins it. */
|
||||
tmp = strdup(options);
|
||||
if(!tmp)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
token = strtok_r(tmp, ",", &tok_buf);
|
||||
token = Curl_strtok_r(tmp, ",", &tok_buf);
|
||||
while(token) {
|
||||
if(strcasecompare(token, DIGEST_QOP_VALUE_STRING_AUTH))
|
||||
*value |= DIGEST_QOP_VALUE_AUTH;
|
||||
@ -241,7 +241,7 @@ static CURLcode auth_digest_get_qop_values(const char *options, int *value)
|
||||
else if(strcasecompare(token, DIGEST_QOP_VALUE_STRING_AUTH_CONF))
|
||||
*value |= DIGEST_QOP_VALUE_AUTH_CONF;
|
||||
|
||||
token = strtok_r(NULL, ",", &tok_buf);
|
||||
token = Curl_strtok_r(NULL, ",", &tok_buf);
|
||||
}
|
||||
|
||||
free(tmp);
|
||||
@ -553,12 +553,12 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg,
|
||||
else if(strcasecompare(value, "qop")) {
|
||||
char *tok_buf = NULL;
|
||||
/* Tokenize the list and choose auth if possible, use a temporary
|
||||
clone of the buffer since strtok_r() ruins it */
|
||||
clone of the buffer since Curl_strtok_r() ruins it */
|
||||
tmp = strdup(content);
|
||||
if(!tmp)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
token = strtok_r(tmp, ",", &tok_buf);
|
||||
token = Curl_strtok_r(tmp, ",", &tok_buf);
|
||||
while(token) {
|
||||
/* Pass additional spaces here */
|
||||
while(*token && ISBLANK(*token))
|
||||
@ -569,7 +569,7 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg,
|
||||
else if(strcasecompare(token, DIGEST_QOP_VALUE_STRING_AUTH_INT)) {
|
||||
foundAuthInt = TRUE;
|
||||
}
|
||||
token = strtok_r(NULL, ",", &tok_buf);
|
||||
token = Curl_strtok_r(NULL, ",", &tok_buf);
|
||||
}
|
||||
|
||||
free(tmp);
|
||||
|
@ -354,8 +354,8 @@ CF_INLINE void GetDarwinVersionNumber(int *major, int *minor)
|
||||
}
|
||||
|
||||
/* Parse the version: */
|
||||
os_version_major = strtok_r(os_version, ".", &tok_buf);
|
||||
os_version_minor = strtok_r(NULL, ".", &tok_buf);
|
||||
os_version_major = Curl_strtok_r(os_version, ".", &tok_buf);
|
||||
os_version_minor = Curl_strtok_r(NULL, ".", &tok_buf);
|
||||
*major = atoi(os_version_major);
|
||||
*minor = atoi(os_version_minor);
|
||||
free(os_version);
|
||||
|
Loading…
Reference in New Issue
Block a user