Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit84ff5b5

Browse files
author
Michael Meskes
committed
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 offerswhich version of strtok.
1 parent759c95c commit84ff5b5

File tree

1 file changed

+25
-17
lines changed

1 file changed

+25
-17
lines changed

‎src/interfaces/ecpg/ecpglib/connect.c

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@
1010
#include"extern.h"
1111
#include"sqlca.h"
1212

13-
#ifdefWIN32_ONLY_COMPILER
14-
#definestrtok_r(s,d,p) strtok_s(s,d,p)
15-
#endif
16-
1713
#ifdefENABLE_THREAD_SAFETY
1814
staticpthread_mutex_tconnections_mutex=PTHREAD_MUTEX_INITIALIZER;
1915
staticpthread_key_tactual_connection_key;
@@ -560,25 +556,37 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p
560556
}
561557
if (options)
562558
{
563-
char*saveptr,*token1,*token2,*str;
559+
char*str;
564560

565561
/* options look like this "option1 = value1 option2 = value2 ... */
566562
/* we have to break up the string into single options */
567-
for (str=options;;str=NULL)
563+
for (str=options;*str;)
568564
{
569-
token1=strtok_r(str,"=",&saveptr);
570-
if (token1==NULL)
571-
break;
572-
/* strip leading blanks */
573-
for (;*token1&&*token1==' ';token1++);
565+
inte,a;
566+
char*token1,*token2;
574567

575-
token2=strtok_r(NULL,"&",&saveptr);
576-
if (token2==NULL)
577-
break;
568+
for (token1=str;*token1&&*token1==' ';token1++);
569+
for (e=0;token1[e]&&token1[e]!='=';e++);
570+
if (token1[e])/* found "=" */
571+
{
572+
token1[e]='\0';
573+
for (token2=token1+e+1;*token2&&*token2==' ';token2++);
574+
for (a=0;token2[a]&&token2[a]!='&';a++);
575+
if (token2[a])/* found "&" => another option follows */
576+
{
577+
token2[a]='\0';
578+
str=token2+a+1;
579+
}
580+
else
581+
str=token2+a;
578582

579-
conn_keywords[i]=token1;
580-
conn_values[i]=token2;
581-
i++;
583+
conn_keywords[i]=token1;
584+
conn_values[i]=token2;
585+
i++;
586+
}
587+
else
588+
/* the parser should not be able to create this invalid option */
589+
str=token1+e;
582590
}
583591

584592
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp