Re: Remaining dependency on setlocale()

Поиск
Список
Период
Сортировка
От Chao Li
Тема Re: Remaining dependency on setlocale()
Дата
Msg-id DDD50039-02B4-4033-8D22-B086BC448E1C@gmail.com
обсуждение исходный текст
Ответ на Re: Remaining dependency on setlocale()  (Jeff Davis <pgsql@j-davis.com>)
Список pgsql-hackers
Hi Jeff,

I have reviewed 0001-0004 and got a few comments:

> On Nov 25, 2025, at 07:57, Jeff Davis <pgsql@j-davis.com> wrote:
>
>
> 0001-0004: Pure refactoring patches. I intend to commit a couple of
> these soon.
>

1 - 0001
```
+/*
+ * Fold a character to upper case, following C/POSIX locale rules.
+ */
+static inline unsigned char
+pg_ascii_toupper(unsigned char ch)
```

I was curious why “inline” is needed, then I figured out when I tried to build. Without “inline”, compile will raise
warningsof “unused function”. So I guess it’s better to explain why “inline” is used in the function comment, otherwise
otherreaders may get the same confusion. 

2 - 0002
```
+ * three output codepoints. See Unicode 5.18.2, "Change in Length".
```

With “change in length”, I confirmed “Unicode 5.18.2” means the Unicode Standard Section 5.18.2 “Complications for Case
Mapping”.Why don’t we just give the URL in the comment.
https://www.unicode.org/versions/Unicode17.0.0/core-spec/chapter-5/#G29675

3 - 0004
```
@@ -1282,10 +1327,18 @@ size_t
 pg_strfold(char *dst, size_t dstsize, const char *src, ssize_t srclen,
            pg_locale_t locale)
 {
-    if (locale->ctype->strfold)
-        return locale->ctype->strfold(dst, dstsize, src, srclen, locale);
-    else
-        return locale->ctype->strlower(dst, dstsize, src, srclen, locale);
+    if (locale->ctype == NULL)
+    {
+        int            i;
+
+        srclen = (srclen >= 0) ? srclen : strlen(src);
+        for (i = 0; i < srclen && i < dstsize; i++)
+            dst[i] = pg_ascii_tolower(src[i]);
+        if (i < dstsize)
+            dst[i] = '\0';
+        return srclen;
+    }
+    return locale->ctype->strfold(dst, dstsize, src, srclen, locale);
 }
```

I don’t get this change. In old code, depending on locale->ctype->strfold, it calls strfold or strlower. But in this
patch,it only calls strfold. Why? If that’s intentional, maybe better to add a comment to explain that. 

4 - 0004

In pg_strfold, the ctype==NULL fallback code is exactly the same as pg_strlower. I guess you intentionally to not call
pg_strlowerhere for performance consideration, is that true? 

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/







В списке pgsql-hackers по дате отправления: