OSDN Git Service

make namein multibyte aware
authorTatsuo Ishii <ishii@postgresql.org>
Thu, 13 Jun 2002 06:19:45 +0000 (06:19 +0000)
committerTatsuo Ishii <ishii@postgresql.org>
Thu, 13 Jun 2002 06:19:45 +0000 (06:19 +0000)
src/backend/utils/adt/name.c

index 3777bab..7092bed 100644 (file)
@@ -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);
 }