aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/adt/name.c22
1 files 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);
}