[dovecot-cvs] dovecot/src/lib-charset charset-iconv.c,1.10,1.11 charset-utf8.c,1.4,1.5 charset-utf8.h,1.5,1.6
cras at procontrol.fi
cras at procontrol.fi
Tue Dec 17 06:28:43 EET 2002
Update of /home/cvs/dovecot/src/lib-charset
In directory danu:/tmp/cvs-serv32695/src/lib-charset
Modified Files:
charset-iconv.c charset-utf8.c charset-utf8.h
Log Message:
Full not-too-well-tested support for SORT extension. Required a few
library interface changes.
Index: charset-iconv.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-charset/charset-iconv.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- charset-iconv.c 16 Dec 2002 03:59:06 -0000 1.10
+++ charset-iconv.c 17 Dec 2002 04:28:41 -0000 1.11
@@ -114,10 +114,10 @@
return ret;
}
-const char *
-charset_to_ucase_utf8_string(const char *charset, int *unknown_charset,
- const unsigned char *data, size_t size,
- size_t *utf8_size_r)
+static const char *
+charset_to_utf8_string_int(const char *charset, int *unknown_charset,
+ const unsigned char *data, size_t size,
+ size_t *utf8_size_r, int ucase)
{
iconv_t cd;
ICONV_CONST char *inbuf;
@@ -130,6 +130,13 @@
strcasecmp(charset, "UTF8") == 0) {
if (unknown_charset != NULL)
*unknown_charset = FALSE;
+
+ if (!ucase) {
+ if (utf8_size_r != NULL)
+ *utf8_size_r = size;
+ return t_strndup((const char *) data, size);
+ }
+
return _charset_utf8_ucase_strdup(data, size, utf8_size_r);
}
@@ -170,10 +177,29 @@
*outpos++ = '\0';
t_buffer_alloc((size_t) (outpos - outbuf));
- str_ucase(outbuf); /* FIXME: utf8 */
+ if (ucase)
+ str_ucase(outbuf); /* FIXME: utf8 */
iconv_close(cd);
return outbuf;
+}
+
+const char *
+charset_to_utf8_string(const char *charset, int *unknown_charset,
+ const unsigned char *data, size_t size,
+ size_t *utf8_size_r)
+{
+ return charset_to_utf8_string_int(charset, unknown_charset,
+ data, size, utf8_size_r, FALSE);
+}
+
+const char *
+charset_to_ucase_utf8_string(const char *charset, int *unknown_charset,
+ const unsigned char *data, size_t size,
+ size_t *utf8_size_r)
+{
+ return charset_to_utf8_string_int(charset, unknown_charset,
+ data, size, utf8_size_r, TRUE);
}
#endif
Index: charset-utf8.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-charset/charset-utf8.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- charset-utf8.c 16 Dec 2002 03:59:06 -0000 1.4
+++ charset-utf8.c 17 Dec 2002 04:28:41 -0000 1.5
@@ -86,6 +86,27 @@
}
const char *
+charset_to_utf8_string(const char *charset, int *unknown_charset,
+ const unsigned char *data, size_t size,
+ size_t *utf8_size_r)
+{
+ if (charset == NULL || strcasecmp(charset, "us-ascii") == 0 ||
+ strcasecmp(charset, "ascii") == 0 ||
+ strcasecmp(charset, "UTF-8") == 0 ||
+ strcasecmp(charset, "UTF8") == 0) {
+ if (unknown_charset != NULL)
+ *unknown_charset = FALSE;
+ if (utf8_size_r != NULL)
+ *utf8_size_r = size;
+ return t_strndup((const char *) data, size);
+ } else {
+ if (unknown_charset != NULL)
+ *unknown_charset = TRUE;
+ return NULL;
+ }
+}
+
+const char *
charset_to_ucase_utf8_string(const char *charset, int *unknown_charset,
const unsigned char *data, size_t size,
size_t *utf8_size_r)
Index: charset-utf8.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-charset/charset-utf8.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- charset-utf8.h 16 Dec 2002 03:59:06 -0000 1.5
+++ charset-utf8.h 17 Dec 2002 04:28:41 -0000 1.6
@@ -24,8 +24,12 @@
charset_to_ucase_utf8(CharsetTranslation *t,
const unsigned char *src, size_t *src_size, Buffer *dest);
-/* Simple wrapper for above functions. If utf8_size is non-NULL, it's set
+/* Simple wrappers for above functions. If utf8_size is non-NULL, it's set
to same as strlen(returned data). */
+const char *
+charset_to_utf8_string(const char *charset, int *unknown_charset,
+ const unsigned char *data, size_t size,
+ size_t *utf8_size_r);
const char *
charset_to_ucase_utf8_string(const char *charset, int *unknown_charset,
const unsigned char *data, size_t size,
More information about the dovecot-cvs
mailing list