mirror of
https://github.com/postgres/postgres.git
synced 2025-06-25 01:02:05 +03:00
Fix lpad() and rpad() to produce correct results in variable-length
multibyte encodings.
This commit is contained in:
@ -9,7 +9,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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
|
#ifdef MULTIBYTE
|
||||||
bytelen = pg_database_encoding_max_length() * len;
|
bytelen = pg_database_encoding_max_length() * len;
|
||||||
ret = (text *) palloc(VARHDRSZ + bytelen);
|
ret = (text *) palloc(VARHDRSZ + bytelen);
|
||||||
VARATT_SIZEP(ret) = VARHDRSZ + bytelen;
|
|
||||||
#else
|
#else
|
||||||
ret = (text *) palloc(VARHDRSZ + len);
|
ret = (text *) palloc(VARHDRSZ + len);
|
||||||
VARATT_SIZEP(ret) = VARHDRSZ + len;
|
|
||||||
#endif
|
#endif
|
||||||
m = len - s1len;
|
m = len - s1len;
|
||||||
|
|
||||||
@ -247,6 +245,8 @@ lpad(PG_FUNCTION_ARGS)
|
|||||||
*ptr_ret++ = *ptr1++;
|
*ptr_ret++ = *ptr1++;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
VARATT_SIZEP(ret) = ptr_ret - (char *) ret;
|
||||||
|
|
||||||
PG_RETURN_TEXT_P(ret);
|
PG_RETURN_TEXT_P(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -311,10 +311,8 @@ rpad(PG_FUNCTION_ARGS)
|
|||||||
#ifdef MULTIBYTE
|
#ifdef MULTIBYTE
|
||||||
bytelen = pg_database_encoding_max_length() * len;
|
bytelen = pg_database_encoding_max_length() * len;
|
||||||
ret = (text *) palloc(VARHDRSZ + bytelen);
|
ret = (text *) palloc(VARHDRSZ + bytelen);
|
||||||
VARATT_SIZEP(ret) = VARHDRSZ + bytelen;
|
|
||||||
#else
|
#else
|
||||||
ret = (text *) palloc(VARHDRSZ + len);
|
ret = (text *) palloc(VARHDRSZ + len);
|
||||||
VARATT_SIZEP(ret) = VARHDRSZ + len;
|
|
||||||
#endif
|
#endif
|
||||||
m = len - s1len;
|
m = len - s1len;
|
||||||
|
|
||||||
@ -358,6 +356,8 @@ rpad(PG_FUNCTION_ARGS)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
VARATT_SIZEP(ret) = ptr_ret - (char *) ret;
|
||||||
|
|
||||||
PG_RETURN_TEXT_P(ret);
|
PG_RETURN_TEXT_P(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user