Add multi-byte support to lztextlen()
This commit is contained in:
parent
95997e159b
commit
61a93ed2da
@ -1,7 +1,7 @@
|
||||
/* ----------
|
||||
* lztext.c -
|
||||
*
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/lztext.c,v 1.2 1999/11/17 22:18:45 wieck Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/lztext.c,v 1.3 1999/11/24 03:45:12 ishii Exp $
|
||||
*
|
||||
* Text type with internal LZ compressed representation. Uses the
|
||||
* standard PostgreSQL compression method.
|
||||
@ -21,7 +21,9 @@
|
||||
#include "utils/builtins.h"
|
||||
#include "utils/palloc.h"
|
||||
#include "utils/pg_lzcompress.h"
|
||||
|
||||
#ifdef MULTIBYTE
|
||||
#include "mb/pg_wchar.h"
|
||||
#endif
|
||||
|
||||
/* ----------
|
||||
* lztextin -
|
||||
@ -134,6 +136,12 @@ lztextout(lztext *lz)
|
||||
int32
|
||||
lztextlen(lztext *lz)
|
||||
{
|
||||
#ifdef MULTIBYTE
|
||||
unsigned char *s1,*s2;
|
||||
int len;
|
||||
int l;
|
||||
int wl;
|
||||
#endif
|
||||
/* ----------
|
||||
* Handle NULL
|
||||
* ----------
|
||||
@ -141,11 +149,26 @@ lztextlen(lztext *lz)
|
||||
if (lz == NULL)
|
||||
return 0;
|
||||
|
||||
#ifdef MULTIBYTE
|
||||
len = 0;
|
||||
s1 = s2 = (unsigned char *)lztextout(lz);
|
||||
l = PGLZ_RAW_SIZE(lz);
|
||||
while (l > 0)
|
||||
{
|
||||
wl = pg_mblen(s1);
|
||||
l -= wl;
|
||||
s1 += wl;
|
||||
len++;
|
||||
}
|
||||
pfree((char *)s2);
|
||||
return (len);
|
||||
#else
|
||||
/* ----------
|
||||
* without multibyte support, it's the remembered rawsize
|
||||
* ----------
|
||||
*/
|
||||
return PGLZ_RAW_SIZE(lz);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -228,8 +251,6 @@ text_lztext(text *txt)
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user