Skip to content
Snippets Groups Projects
Commit 84ff5b5d authored by Michael Meskes's avatar Michael Meskes
Browse files

In ecpglib rewrote code that used strtok_r to not use library functions

anymore. This way we don't have to worry which compiler on which OS offers
which version of strtok.
parent 759c95c4
No related branches found
No related tags found
No related merge requests found
...@@ -10,10 +10,6 @@ ...@@ -10,10 +10,6 @@
#include "extern.h" #include "extern.h"
#include "sqlca.h" #include "sqlca.h"
#ifdef WIN32_ONLY_COMPILER
#define strtok_r(s,d,p) strtok_s(s,d,p)
#endif
#ifdef ENABLE_THREAD_SAFETY #ifdef ENABLE_THREAD_SAFETY
static pthread_mutex_t connections_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t connections_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_key_t actual_connection_key; static pthread_key_t actual_connection_key;
...@@ -560,25 +556,37 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p ...@@ -560,25 +556,37 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p
} }
if (options) if (options)
{ {
char *saveptr, *token1, *token2, *str; char *str;
/* options look like this "option1 = value1 option2 = value2 ... */ /* options look like this "option1 = value1 option2 = value2 ... */
/* we have to break up the string into single options */ /* we have to break up the string into single options */
for (str = options; ; str = NULL) for (str = options; *str;)
{ {
token1 = strtok_r(str, "=", &saveptr); int e, a;
if (token1 == NULL) char *token1, *token2;
break;
/* strip leading blanks */
for (; *token1 && *token1 == ' '; token1++);
token2 = strtok_r(NULL, "&", &saveptr); for (token1 = str; *token1 && *token1 == ' '; token1++);
if (token2 == NULL) for (e = 0; token1[e] && token1[e] != '='; e++);
break; if (token1[e]) /* found "=" */
{
token1[e] = '\0';
for (token2 = token1 + e + 1; *token2 && *token2 == ' '; token2++);
for (a = 0; token2[a] && token2[a] != '&'; a++);
if (token2[a]) /* found "&" => another option follows */
{
token2[a] = '\0';
str = token2 + a + 1;
}
else
str = token2 + a;
conn_keywords[i] = token1; conn_keywords[i] = token1;
conn_values[i] = token2; conn_values[i] = token2;
i++; i++;
}
else
/* the parser should not be able to create this invalid option */
str = token1 + e;
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment