From 620dbc98cdf34f986b1f6f5164477550926749e8 Mon Sep 17 00:00:00 2001
From: Tatsuo Ishii <ishii@postgresql.org>
Date: Thu, 13 Jun 2002 06:19:45 +0000
Subject: [PATCH] make namein multibyte aware

---
 src/backend/utils/adt/name.c | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/backend/utils/adt/name.c b/src/backend/utils/adt/name.c
index 3777bab9395..7092bed875c 100644
--- a/src/backend/utils/adt/name.c
+++ b/src/backend/utils/adt/name.c
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/name.c,v 1.36 2002/06/11 13:40:52 wieck Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/name.c,v 1.37 2002/06/13 06:19:45 ishii Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -23,7 +23,7 @@
 #include "utils/array.h"
 #include "utils/builtins.h"
 #include "utils/lsyscache.h"
-
+#include "mb/pg_wchar.h"
 
 /*****************************************************************************
  *	 USER I/O ROUTINES (none)												 *
@@ -43,16 +43,20 @@ namein(PG_FUNCTION_ARGS)
 	char	   *s = PG_GETARG_CSTRING(0);
 	NameData   *result;
 	int			len;
+	char	   *ermsg;
+
+	/* veryfy encoding */
+	len = strlen(s);
+	if ((ermsg = pg_verifymbstr(s, len)))
+		elog(ERROR, "%s", ermsg);
+
+	len = pg_mbcliplen(s, len, NAMEDATALEN-1);
 
 	result = (NameData *) palloc(NAMEDATALEN);
 	/* always keep it null-padded */
-	StrNCpy(NameStr(*result), s, NAMEDATALEN);
-	len = strlen(NameStr(*result));
-	while (len < NAMEDATALEN)
-	{
-		*(NameStr(*result) + len) = '\0';
-		len++;
-	}
+	memset(result, 0, NAMEDATALEN);
+	memcpy(NameStr(*result), s, len);
+
 	PG_RETURN_NAME(result);
 }
 
-- 
GitLab