[dovecot-cvs] dovecot/src/lib-charset charset-iconv.c,1.9,1.10 charset-utf8.c,1.3,1.4 charset-utf8.h,1.4,1.5
cras at procontrol.fi
cras at procontrol.fi
Mon Dec 16 05:59:08 EET 2002
Update of /home/cvs/dovecot/src/lib-charset
In directory danu:/tmp/cvs-serv23623/lib-charset
Modified Files:
charset-iconv.c charset-utf8.c charset-utf8.h
Log Message:
Don't use Buffers with read-only data, just makes it more difficult without
gaining anything.
Index: charset-iconv.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-charset/charset-iconv.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- charset-iconv.c 9 Dec 2002 13:39:32 -0000 1.9
+++ charset-iconv.c 16 Dec 2002 03:59:06 -0000 1.10
@@ -69,7 +69,7 @@
CharsetResult
charset_to_ucase_utf8(CharsetTranslation *t,
- const Buffer *src, size_t *src_pos, Buffer *dest)
+ const unsigned char *src, size_t *src_size, Buffer *dest)
{
ICONV_CONST char *ic_srcbuf;
char *ic_destbuf;
@@ -81,18 +81,15 @@
if (t->cd == NULL) {
/* no translation needed - just copy it to outbuf uppercased */
- size = buffer_get_used_size(src);
- if (size > destleft)
- size = destleft;
- _charset_utf8_ucase(buffer_get_data(src, NULL),
- size, dest, destpos);
- if (src_pos != NULL)
- *src_pos = size;
+ if (*src_size > destleft)
+ *src_size = destleft;
+ _charset_utf8_ucase(src, *src_size, dest, destpos);
return CHARSET_RET_OK;
}
size = destleft;
- ic_srcbuf = (ICONV_CONST char *) buffer_get_data(src, &srcleft);
+ srcleft = *src_size;
+ ic_srcbuf = (ICONV_CONST char *) src;
ic_destbuf = buffer_append_space(dest, destleft);
if (iconv(t->cd, &ic_srcbuf, &srcleft,
@@ -111,9 +108,7 @@
/* give back the memory we didn't use */
buffer_set_used_size(dest, buffer_get_used_size(dest) - destleft);
- if (src_pos != NULL)
- *src_pos = buffer_get_used_size(src) - srcleft;
-
+ *src_size -= srcleft;
_charset_utf8_ucase((unsigned char *) ic_destbuf - size, size,
dest, destpos);
return ret;
@@ -121,7 +116,8 @@
const char *
charset_to_ucase_utf8_string(const char *charset, int *unknown_charset,
- const Buffer *data, size_t *utf8_size)
+ const unsigned char *data, size_t size,
+ size_t *utf8_size_r)
{
iconv_t cd;
ICONV_CONST char *inbuf;
@@ -134,7 +130,7 @@
strcasecmp(charset, "UTF8") == 0) {
if (unknown_charset != NULL)
*unknown_charset = FALSE;
- return _charset_utf8_ucase_strdup(data, utf8_size);
+ return _charset_utf8_ucase_strdup(data, size, utf8_size_r);
}
cd = iconv_open("UTF-8", charset);
@@ -147,7 +143,8 @@
if (unknown_charset != NULL)
*unknown_charset = FALSE;
- inbuf = (ICONV_CONST char *) buffer_get_data(data, &inleft);;
+ inbuf = (ICONV_CONST char *) data;
+ inleft = size;
outsize = outleft = inleft * 2;
outbuf = outpos = t_buffer_get(outsize + 1);
@@ -168,8 +165,8 @@
outpos = outbuf + pos;
}
- if (utf8_size != NULL)
- *utf8_size = (size_t) (outpos - outbuf);
+ if (utf8_size_r != NULL)
+ *utf8_size_r = (size_t) (outpos - outbuf);
*outpos++ = '\0';
t_buffer_alloc((size_t) (outpos - outbuf));
Index: charset-utf8.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-charset/charset-utf8.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- charset-utf8.c 9 Dec 2002 13:39:32 -0000 1.3
+++ charset-utf8.c 16 Dec 2002 03:59:06 -0000 1.4
@@ -17,18 +17,15 @@
destbuf[i] = i_toupper(src[i]); /* FIXME: utf8 */
}
-const char *_charset_utf8_ucase_strdup(const Buffer *data, size_t *utf8_size)
+const char *_charset_utf8_ucase_strdup(const unsigned char *data, size_t size,
+ size_t *utf8_size_r)
{
- const char *buf;
- size_t size;
Buffer *dest;
- buf = buffer_get_data(data, &size);
-
dest = buffer_create_dynamic(data_stack_pool, size, (size_t)-1);
- _charset_utf8_ucase(buf, size, dest, 0);
- if (utf8_size != NULL)
- *utf8_size = buffer_get_used_size(dest);
+ _charset_utf8_ucase(data, size, dest, 0);
+ if (utf8_size_r != NULL)
+ *utf8_size_r = buffer_get_used_size(dest);
buffer_append_c(dest, '\0');
return buffer_free_without_data(dest);
}
@@ -74,26 +71,24 @@
CharsetResult
charset_to_ucase_utf8(CharsetTranslation *t __attr_unused__,
- const Buffer *src, size_t *src_pos, Buffer *dest)
+ const unsigned char *src, size_t *src_size, Buffer *dest)
{
- size_t size, destpos, destleft;
+ size_t destpos, destleft;
destpos = buffer_get_used_size(dest);
destleft = buffer_get_size(dest) - destpos;
/* no translation needed - just copy it to outbuf uppercased */
- size = buffer_get_used_size(src);
- if (size > destleft)
- size = destleft;
- _charset_utf8_ucase(buffer_get_data(src, NULL), size, dest, destpos);
- if (src_pos != NULL)
- *src_pos = size;
+ if (*src_size > destleft)
+ *src_size = destleft;
+ _charset_utf8_ucase(src, *src_size, dest, destpos);
return CHARSET_RET_OK;
}
const char *
charset_to_ucase_utf8_string(const char *charset, int *unknown_charset,
- const Buffer *data, size_t *utf8_size)
+ const unsigned char *data, size_t size,
+ size_t *utf8_size_r)
{
if (charset == NULL || strcasecmp(charset, "us-ascii") == 0 ||
strcasecmp(charset, "ascii") == 0 ||
@@ -101,7 +96,7 @@
strcasecmp(charset, "UTF8") == 0) {
if (unknown_charset != NULL)
*unknown_charset = FALSE;
- return _charset_utf8_ucase_strdup(data, utf8_size);
+ return _charset_utf8_ucase_strdup(data, size, utf8_size_r);
} else {
if (unknown_charset != NULL)
*unknown_charset = TRUE;
Index: charset-utf8.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-charset/charset-utf8.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- charset-utf8.h 9 Dec 2002 13:39:32 -0000 1.4
+++ charset-utf8.h 16 Dec 2002 03:59:06 -0000 1.5
@@ -18,20 +18,22 @@
void charset_to_utf8_reset(CharsetTranslation *t);
-/* Translate src to UTF-8. If src_pos is non-NULL, it's updated to first
- non-translated character in src. */
+/* Translate src to UTF-8. If src_size is updated to contain the number of
+ characters actually translated from src. */
CharsetResult
charset_to_ucase_utf8(CharsetTranslation *t,
- const Buffer *src, size_t *src_pos, Buffer *dest);
+ const unsigned char *src, size_t *src_size, Buffer *dest);
/* Simple wrapper for above functions. If utf8_size is non-NULL, it's set
to same as strlen(returned data). */
const char *
charset_to_ucase_utf8_string(const char *charset, int *unknown_charset,
- const Buffer *data, size_t *utf8_size);
+ const unsigned char *data, size_t size,
+ size_t *utf8_size_r);
void _charset_utf8_ucase(const unsigned char *src, size_t src_size,
Buffer *dest, size_t destpos);
-const char *_charset_utf8_ucase_strdup(const Buffer *data, size_t *utf8_size);
+const char *_charset_utf8_ucase_strdup(const unsigned char *data, size_t size,
+ size_t *utf8_size_r);
#endif
More information about the dovecot-cvs
mailing list