aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/oracle_compat.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2002-01-08 17:03:41 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2002-01-08 17:03:41 +0000
commit649d8543d3880d288a76d5f3343fa37d7cb610a6 (patch)
tree8705a2d3aa9123bbf3da49bb872e522704aa91c4 /src/backend/utils/adt/oracle_compat.c
parentf8728467ffb9cc720b871d026181462f5f6cbe97 (diff)
downloadpostgresql-649d8543d3880d288a76d5f3343fa37d7cb610a6.tar.gz
postgresql-649d8543d3880d288a76d5f3343fa37d7cb610a6.zip
Fix lpad() and rpad() to produce correct results in variable-length
multibyte encodings.
Diffstat (limited to 'src/backend/utils/adt/oracle_compat.c')
-rw-r--r--src/backend/utils/adt/oracle_compat.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/backend/utils/adt/oracle_compat.c b/src/backend/utils/adt/oracle_compat.c
index 46a029caaea..d4391f764fc 100644
--- a/src/backend/utils/adt/oracle_compat.c
+++ b/src/backend/utils/adt/oracle_compat.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/oracle_compat.c,v 1.36 2001/10/25 05:49:45 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/oracle_compat.c,v 1.37 2002/01/08 17:03:41 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -200,10 +200,8 @@ lpad(PG_FUNCTION_ARGS)
#ifdef MULTIBYTE
bytelen = pg_database_encoding_max_length() * len;
ret = (text *) palloc(VARHDRSZ + bytelen);
- VARATT_SIZEP(ret) = VARHDRSZ + bytelen;
#else
ret = (text *) palloc(VARHDRSZ + len);
- VARATT_SIZEP(ret) = VARHDRSZ + len;
#endif
m = len - s1len;
@@ -247,6 +245,8 @@ lpad(PG_FUNCTION_ARGS)
*ptr_ret++ = *ptr1++;
#endif
+ VARATT_SIZEP(ret) = ptr_ret - (char *) ret;
+
PG_RETURN_TEXT_P(ret);
}
@@ -311,10 +311,8 @@ rpad(PG_FUNCTION_ARGS)
#ifdef MULTIBYTE
bytelen = pg_database_encoding_max_length() * len;
ret = (text *) palloc(VARHDRSZ + bytelen);
- VARATT_SIZEP(ret) = VARHDRSZ + bytelen;
#else
ret = (text *) palloc(VARHDRSZ + len);
- VARATT_SIZEP(ret) = VARHDRSZ + len;
#endif
m = len - s1len;
@@ -358,6 +356,8 @@ rpad(PG_FUNCTION_ARGS)
}
#endif
+ VARATT_SIZEP(ret) = ptr_ret - (char *) ret;
+
PG_RETURN_TEXT_P(ret);
}