From 477cf8ec1ae9ef333988c0dcd48a20d00eacd93b Mon Sep 17 00:00:00 2001
From: Thomas Munro <thomas.munro@gmail.com>
Date: Wed, 1 Apr 2026 23:24:33 +1300
Subject: [PATCH 3/3] Remove pg_mblen() and related functions.

pg_mblen() was unsafe and declared deprecated in all release branches,
and can now removed in master.  The t_is*() functions were less unsafe,
but needed to know which pg_mblen_XXX() replacement to call so they also
gained parallel replacements.

Reviewed-by:
Discussion:
---
 src/backend/tsearch/ts_locale.c | 12 ------------
 src/backend/utils/mb/mbutils.c  | 10 ----------
 src/include/mb/pg_wchar.h       |  3 ---
 src/include/tsearch/ts_locale.h |  9 +--------
 4 files changed, 1 insertion(+), 33 deletions(-)

diff --git a/src/backend/tsearch/ts_locale.c b/src/backend/tsearch/ts_locale.c
index df02ffb12fd..12ef3d11b32 100644
--- a/src/backend/tsearch/ts_locale.c
+++ b/src/backend/tsearch/ts_locale.c
@@ -41,18 +41,6 @@ int \
 t_is##character_class##_cstr(const char *ptr) \
 { \
 	return t_is##character_class##_with_len(ptr, pg_mblen_cstr(ptr)); \
-} \
-/* ptr shall point to a string with pre-validated encoding */ \
-int \
-t_is##character_class##_unbounded(const char *ptr) \
-{ \
-	return t_is##character_class##_with_len(ptr, pg_mblen_unbounded(ptr)); \
-} \
-/* historical name for _unbounded */ \
-int \
-t_is##character_class(const char *ptr) \
-{ \
-	return t_is##character_class##_unbounded(ptr); \
 }
 
 GENERATE_T_ISCLASS_DEF(alnum)
diff --git a/src/backend/utils/mb/mbutils.c b/src/backend/utils/mb/mbutils.c
index 78f4d5e202c..08d80f2c36f 100644
--- a/src/backend/utils/mb/mbutils.c
+++ b/src/backend/utils/mb/mbutils.c
@@ -1143,16 +1143,6 @@ pg_mblen_unbounded(const char *mbstr)
 	return length;
 }
 
-/*
- * Historical name for pg_mblen_unbounded().  Should not be used and will be
- * removed in a later version.
- */
-int
-pg_mblen(const char *mbstr)
-{
-	return pg_mblen_unbounded(mbstr);
-}
-
 /* returns the display length of a multibyte character */
 int
 pg_dsplen(const char *mbstr)
diff --git a/src/include/mb/pg_wchar.h b/src/include/mb/pg_wchar.h
index a3326e365a7..e42cf562635 100644
--- a/src/include/mb/pg_wchar.h
+++ b/src/include/mb/pg_wchar.h
@@ -700,9 +700,6 @@ extern int	pg_mblen_range(const char *mbstr, const char *end);
 extern int	pg_mblen_with_len(const char *mbstr, int limit);
 extern int	pg_mblen_unbounded(const char *mbstr);
 
-pg_attribute_deprecated("use pg_mblen_{cstr,range,with_len,unbounded} instead")
-extern int	pg_mblen(const char *mbstr);
-
 extern int	pg_dsplen(const char *mbstr);
 extern int	pg_mbstrlen(const char *mbstr);
 extern int	pg_mbstrlen_with_len(const char *mbstr, int limit);
diff --git a/src/include/tsearch/ts_locale.h b/src/include/tsearch/ts_locale.h
index 90e533eea31..b6a2d29ee3f 100644
--- a/src/include/tsearch/ts_locale.h
+++ b/src/include/tsearch/ts_locale.h
@@ -52,16 +52,9 @@ ts_copychar_cstr(void *dest, const void *src)
 	return ts_copychar_with_len(dest, src, pg_mblen_cstr((const char *) src));
 }
 
-/* Historical macro for the above. */
-#define COPYCHAR ts_copychar_cstr
-
 #define GENERATE_T_ISCLASS_DECL(character_class) \
 extern int	t_is##character_class##_with_len(const char *ptr, int len); \
-extern int	t_is##character_class##_cstr(const char *ptr); \
-extern int	t_is##character_class##_unbounded(const char *ptr); \
-\
-pg_attribute_deprecated("use t_isXXX_{cstr,with_len,unbounded} instead") \
-extern int	t_is##character_class(const char *ptr);
+extern int	t_is##character_class##_cstr(const char *ptr);
 
 GENERATE_T_ISCLASS_DECL(alnum);
 GENERATE_T_ISCLASS_DECL(alpha);
-- 
2.53.0

