@@ -102,11 +102,12 @@ splitTzLine(const char *filename, int lineno, char *line, tzEntry *tzentry)
102
102
char * offset_endptr ;
103
103
char * remain ;
104
104
char * is_dst ;
105
+ char * saveptr = NULL ;
105
106
106
107
tzentry -> lineno = lineno ;
107
108
tzentry -> filename = filename ;
108
109
109
- abbrev = strtok (line ,WHITESPACE );
110
+ abbrev = strtok_r (line ,WHITESPACE , & saveptr );
110
111
if (!abbrev )
111
112
{
112
113
GUC_check_errmsg ("missing time zone abbreviation in time zone file \"%s\", line %d" ,
@@ -115,7 +116,7 @@ splitTzLine(const char *filename, int lineno, char *line, tzEntry *tzentry)
115
116
}
116
117
tzentry -> abbrev = pstrdup (abbrev );
117
118
118
- offset = strtok (NULL ,WHITESPACE );
119
+ offset = strtok_r (NULL ,WHITESPACE , & saveptr );
119
120
if (!offset )
120
121
{
121
122
GUC_check_errmsg ("missing time zone offset in time zone file \"%s\", line %d" ,
@@ -135,11 +136,11 @@ splitTzLine(const char *filename, int lineno, char *line, tzEntry *tzentry)
135
136
return false;
136
137
}
137
138
138
- is_dst = strtok (NULL ,WHITESPACE );
139
+ is_dst = strtok_r (NULL ,WHITESPACE , & saveptr );
139
140
if (is_dst && pg_strcasecmp (is_dst ,"D" )== 0 )
140
141
{
141
142
tzentry -> is_dst = true;
142
- remain = strtok (NULL ,WHITESPACE );
143
+ remain = strtok_r (NULL ,WHITESPACE , & saveptr );
143
144
}
144
145
else
145
146
{
@@ -158,7 +159,7 @@ splitTzLine(const char *filename, int lineno, char *line, tzEntry *tzentry)
158
159
tzentry -> zone = pstrdup (offset );
159
160
tzentry -> offset = 0 ;
160
161
tzentry -> is_dst = false;
161
- remain = strtok (NULL ,WHITESPACE );
162
+ remain = strtok_r (NULL ,WHITESPACE , & saveptr );
162
163
}
163
164
164
165
if (!remain )/* no more non-whitespace chars */
@@ -284,6 +285,7 @@ ParseTzFile(const char *filename, int depth,
284
285
tzEntry tzentry ;
285
286
int lineno = 0 ;
286
287
bool override = false;
288
+ char * saveptr = NULL ;
287
289
const char * p ;
288
290
289
291
/*
@@ -393,7 +395,7 @@ ParseTzFile(const char *filename, int depth,
393
395
/* pstrdup so we can use filename in result data structure */
394
396
char * includeFile = pstrdup (line + strlen ("@INCLUDE" ));
395
397
396
- includeFile = strtok (includeFile ,WHITESPACE );
398
+ includeFile = strtok_r (includeFile ,WHITESPACE , & saveptr );
397
399
if (!includeFile || !* includeFile )
398
400
{
399
401
GUC_check_errmsg ("@INCLUDE without file name in time zone file \"%s\", line %d" ,