v1-0002-Replace-remaining-strtok-with-strtok_r.patch

text/plain

Filename: v1-0002-Replace-remaining-strtok-with-strtok_r.patch
Type: text/plain
Part: 1
Message: replace strtok()

Patch

Format: format-patch
Series: patch v1-0002
Subject: Replace remaining strtok() with strtok_r()
File+
src/backend/utils/misc/tzparser.c 8 6
From 4e4769864ed3f9ccca232ff7fa56d3ce9c9f5f2c Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Mon, 10 Jun 2024 16:08:56 +0200
Subject: [PATCH v1 2/4] Replace remaining strtok() with strtok_r()

for thread-safety in the future
---
 src/backend/utils/misc/tzparser.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/backend/utils/misc/tzparser.c b/src/backend/utils/misc/tzparser.c
index 21fd866d6d6..96cc3912e56 100644
--- a/src/backend/utils/misc/tzparser.c
+++ b/src/backend/utils/misc/tzparser.c
@@ -97,6 +97,7 @@ validateTzEntry(tzEntry *tzentry)
 static bool
 splitTzLine(const char *filename, int lineno, char *line, tzEntry *tzentry)
 {
+	char	   *brkl;
 	char	   *abbrev;
 	char	   *offset;
 	char	   *offset_endptr;
@@ -106,7 +107,7 @@ splitTzLine(const char *filename, int lineno, char *line, tzEntry *tzentry)
 	tzentry->lineno = lineno;
 	tzentry->filename = filename;
 
-	abbrev = strtok(line, WHITESPACE);
+	abbrev = strtok_r(line, WHITESPACE, &brkl);
 	if (!abbrev)
 	{
 		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)
 	}
 	tzentry->abbrev = pstrdup(abbrev);
 
-	offset = strtok(NULL, WHITESPACE);
+	offset = strtok_r(NULL, WHITESPACE, &brkl);
 	if (!offset)
 	{
 		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)
 			return false;
 		}
 
-		is_dst = strtok(NULL, WHITESPACE);
+		is_dst = strtok_r(NULL, WHITESPACE, &brkl);
 		if (is_dst && pg_strcasecmp(is_dst, "D") == 0)
 		{
 			tzentry->is_dst = true;
-			remain = strtok(NULL, WHITESPACE);
+			remain = strtok_r(NULL, WHITESPACE, &brkl);
 		}
 		else
 		{
@@ -158,7 +159,7 @@ splitTzLine(const char *filename, int lineno, char *line, tzEntry *tzentry)
 		tzentry->zone = pstrdup(offset);
 		tzentry->offset = 0 * SECS_PER_HOUR;
 		tzentry->is_dst = false;
-		remain = strtok(NULL, WHITESPACE);
+		remain = strtok_r(NULL, WHITESPACE, &brkl);
 	}
 
 	if (!remain)				/* no more non-whitespace chars */
@@ -394,8 +395,9 @@ ParseTzFile(const char *filename, int depth,
 		{
 			/* pstrdup so we can use filename in result data structure */
 			char	   *includeFile = pstrdup(line + strlen("@INCLUDE"));
+			char	   *brki;
 
-			includeFile = strtok(includeFile, WHITESPACE);
+			includeFile = strtok_r(includeFile, WHITESPACE, &brki);
 			if (!includeFile || !*includeFile)
 			{
 				GUC_check_errmsg("@INCLUDE without file name in time zone file \"%s\", line %d",
-- 
2.45.2