[dovecot-cvs] dovecot/src/lib-charset charset-iconv.c,1.8,1.9 charset-utf8.c,1.2,1.3 charset-utf8.h,1.3,1.4

cras at procontrol.fi cras at procontrol.fi
Mon Dec 9 15:39:34 EET 2002


Update of /home/cvs/dovecot/src/lib-charset
In directory danu:/tmp/cvs-serv8606

Modified Files:
	charset-iconv.c charset-utf8.c charset-utf8.h 
Log Message:
Compiles again without iconv()



Index: charset-iconv.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-charset/charset-iconv.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- charset-iconv.c	8 Dec 2002 05:23:07 -0000	1.8
+++ charset-iconv.c	9 Dec 2002 13:39:32 -0000	1.9
@@ -67,17 +67,6 @@
 		(void)iconv(t->cd, NULL, NULL, NULL, NULL);
 }
 
-static void str_ucase_utf8(const unsigned char *src, size_t src_size,
-			   Buffer *dest, size_t destpos)
-{
-	char *destbuf;
-	size_t i;
-
-	destbuf = buffer_get_space(dest, destpos, src_size);
-	for (i = 0; i < src_size; i++)
-		destbuf[i] = i_toupper(src[i]); /* FIXME: utf8 */
-}
-
 CharsetResult
 charset_to_ucase_utf8(CharsetTranslation *t,
 		      const Buffer *src, size_t *src_pos, Buffer *dest)
@@ -95,7 +84,8 @@
 		size = buffer_get_used_size(src);
 		if (size > destleft)
 			size = destleft;
-		str_ucase_utf8(buffer_get_data(src, NULL), size, dest, destpos);
+		_charset_utf8_ucase(buffer_get_data(src, NULL),
+				    size, dest, destpos);
 		if (src_pos != NULL)
 			*src_pos = size;
 		return CHARSET_RET_OK;
@@ -124,27 +114,11 @@
 	if (src_pos != NULL)
 		*src_pos = buffer_get_used_size(src) - srcleft;
 
-	str_ucase_utf8((unsigned char *) ic_destbuf - size, size,
-		       dest, destpos);
+	_charset_utf8_ucase((unsigned char *) ic_destbuf - size, size,
+			    dest, destpos);
 	return ret;
 }
 
-static const char *alloc_str_ucase_utf8(const Buffer *data, size_t *utf8_size)
-{
-	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);
-	str_ucase_utf8(buf, size, dest, 0);
-	if (utf8_size != NULL)
-		*utf8_size = buffer_get_used_size(dest);
-	buffer_append_c(dest, '\0');
-	return buffer_free_without_data(dest);
-}
-
 const char *
 charset_to_ucase_utf8_string(const char *charset, int *unknown_charset,
 			     const Buffer *data, size_t *utf8_size)
@@ -157,8 +131,11 @@
 	if (charset == NULL || strcasecmp(charset, "us-ascii") == 0 ||
 	    strcasecmp(charset, "ascii") == 0 ||
 	    strcasecmp(charset, "UTF-8") == 0 ||
-	    strcasecmp(charset, "UTF8") == 0)
-	       return alloc_str_ucase_utf8(data, utf8_size);
+	    strcasecmp(charset, "UTF8") == 0) {
+		if (unknown_charset != NULL)
+			*unknown_charset = FALSE;
+		return _charset_utf8_ucase_strdup(data, utf8_size);
+	}
 
 	cd = iconv_open("UTF-8", charset);
 	if (cd == (iconv_t)-1) {

Index: charset-utf8.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-charset/charset-utf8.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- charset-utf8.c	3 Dec 2002 13:55:44 -0000	1.2
+++ charset-utf8.c	9 Dec 2002 13:39:32 -0000	1.3
@@ -1,8 +1,39 @@
 /* Copyright (C) 2002 Timo Sirainen */
 
 #include "lib.h"
+#include "buffer.h"
 #include "charset-utf8.h"
 
+#include <ctype.h>
+
+void _charset_utf8_ucase(const unsigned char *src, size_t src_size,
+			 Buffer *dest, size_t destpos)
+{
+	char *destbuf;
+	size_t i;
+
+	destbuf = buffer_get_space(dest, destpos, src_size);
+	for (i = 0; i < src_size; i++)
+		destbuf[i] = i_toupper(src[i]); /* FIXME: utf8 */
+}
+
+const char *_charset_utf8_ucase_strdup(const Buffer *data, size_t *utf8_size)
+{
+	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);
+	buffer_append_c(dest, '\0');
+	return buffer_free_without_data(dest);
+}
+
+
 #ifndef HAVE_ICONV_H
 
 #include <ctype.h>
@@ -41,40 +72,41 @@
 {
 }
 
-int charset_to_ucase_utf8(CharsetTranslation *t __attr_unused__,
-			  const unsigned char **inbuf, size_t *insize,
-			  unsigned char *outbuf, size_t *outsize)
+CharsetResult
+charset_to_ucase_utf8(CharsetTranslation *t __attr_unused__,
+		      const Buffer *src, size_t *src_pos, Buffer *dest)
 {
-	size_t max_size, i;
-
-	max_size = I_MIN(*insize, *outsize);
-	for (i = 0; i < max_size; i++)
-		outbuf[i] = i_toupper((*inbuf)[i]); /* FIXME: utf8 */
+	size_t size, destpos, destleft;
 
-	*insize = 0;
-	*outsize = max_size;
+	destpos = buffer_get_used_size(dest);
+	destleft = buffer_get_size(dest) - destpos;
 
-	return TRUE;
+	/* 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;
+	return CHARSET_RET_OK;
 }
 
 const char *
 charset_to_ucase_utf8_string(const char *charset, int *unknown_charset,
-			     const unsigned char *buf,
-			     size_t *size __attr_unused__)
+			     const Buffer *data, size_t *utf8_size)
 {
 	if (charset == NULL || strcasecmp(charset, "us-ascii") == 0 ||
 	    strcasecmp(charset, "ascii") == 0 ||
 	    strcasecmp(charset, "UTF-8") == 0 ||
 	    strcasecmp(charset, "UTF8") == 0) {
-		outbuf = t_malloc(*size + 1);
-		memcpy(outbuf, buf, *size);
-		outbuf[*size] = '\0';
-		return str_ucase(outbuf); /* FIXME: utf8 */
+		if (unknown_charset != NULL)
+			*unknown_charset = FALSE;
+		return _charset_utf8_ucase_strdup(data, utf8_size);
+	} else {
+		if (unknown_charset != NULL)
+			*unknown_charset = TRUE;
+		return NULL;
 	}
-
-	if (unknown_charset != NULL)
-		*unknown_charset = TRUE;
-	return NULL;
 }
 
 #endif

Index: charset-utf8.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-charset/charset-utf8.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- charset-utf8.h	8 Dec 2002 05:23:07 -0000	1.3
+++ charset-utf8.h	9 Dec 2002 13:39:32 -0000	1.4
@@ -30,4 +30,8 @@
 charset_to_ucase_utf8_string(const char *charset, int *unknown_charset,
 			     const Buffer *data, size_t *utf8_size);
 
+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);
+
 #endif




More information about the dovecot-cvs mailing list