changeset 766:03832c7f389b HEAD

Compiles again without iconv()
author Timo Sirainen <tss@iki.fi>
date Mon, 09 Dec 2002 15:39:32 +0200
parents 553f050c8313
children c809378a48db
files src/lib-charset/charset-iconv.c src/lib-charset/charset-utf8.c src/lib-charset/charset-utf8.h
diffstat 3 files changed, 67 insertions(+), 54 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-charset/charset-iconv.c	Sun Dec 08 07:23:07 2002 +0200
+++ b/src/lib-charset/charset-iconv.c	Mon Dec 09 15:39:32 2002 +0200
@@ -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) {
--- a/src/lib-charset/charset-utf8.c	Sun Dec 08 07:23:07 2002 +0200
+++ b/src/lib-charset/charset-utf8.c	Mon Dec 09 15:39:32 2002 +0200
@@ -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;
+	size_t size, destpos, destleft;
+
+	destpos = buffer_get_used_size(dest);
+	destleft = buffer_get_size(dest) - destpos;
 
-	max_size = I_MIN(*insize, *outsize);
-	for (i = 0; i < max_size; i++)
-		outbuf[i] = i_toupper((*inbuf)[i]); /* FIXME: utf8 */
-
-	*insize = 0;
-	*outsize = max_size;
-
-	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
--- a/src/lib-charset/charset-utf8.h	Sun Dec 08 07:23:07 2002 +0200
+++ b/src/lib-charset/charset-utf8.h	Mon Dec 09 15:39:32 2002 +0200
@@ -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