[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