[dovecot-cvs] dovecot/src/lib-mail message-body-search.c,1.4,1.5 message-header-search.c,1.7,1.8

cras at procontrol.fi cras at procontrol.fi
Mon Dec 16 05:59:08 EET 2002


Update of /home/cvs/dovecot/src/lib-mail
In directory danu:/tmp/cvs-serv23623/lib-mail

Modified Files:
	message-body-search.c message-header-search.c 
Log Message:
Don't use Buffers with read-only data, just makes it more difficult without
gaining anything.



Index: message-body-search.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-mail/message-body-search.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- message-body-search.c	8 Dec 2002 05:23:08 -0000	1.4
+++ message-body-search.c	16 Dec 2002 03:59:06 -0000	1.5
@@ -201,16 +201,17 @@
 /* returns 1 = found, 0 = not found, -1 = error in input data */
 static int message_search_body_block(PartSearchContext *ctx, Buffer *block)
 {
-	Buffer *inbuf, *outbuf;
+	const unsigned char *inbuf;
+	Buffer *outbuf;
         CharsetResult result;
-	size_t block_pos, inbuf_pos, inbuf_left, ret;
+	size_t block_pos, inbuf_size, inbuf_left, ret;
 
 	outbuf = buffer_create_static(data_stack_pool, DECODE_BLOCK_SIZE);
 	for (block_pos = 0; block_pos < buffer_get_used_size(block); ) {
 		if (buffer_get_used_size(ctx->decode_buf) == 0) {
 			/* we can use the buffer directly without copying */
-			inbuf = block;
-			inbuf_pos = block_pos;
+			inbuf = buffer_get_data(block, &inbuf_size);
+			inbuf += block_pos; inbuf_size -= block_pos;
 			block_pos += buffer_get_used_size(block);
 		} else {
 			/* some characters already in buffer, ie. last
@@ -219,14 +220,14 @@
 						       block, block_pos,
 						       (size_t)-1);
 
-			inbuf = ctx->decode_buf;
-			inbuf_pos = 0;
+			inbuf = buffer_get_data(ctx->decode_buf, &inbuf_size);
 		}
 
 		buffer_set_used_size(outbuf, 0);
+		inbuf_left = inbuf_size;
 		result = charset_to_ucase_utf8(ctx->translation,
-					       inbuf, &inbuf_pos, outbuf);
-		inbuf_left = buffer_get_used_size(inbuf) - inbuf_pos;
+					       inbuf, &inbuf_size, outbuf);
+		inbuf_left -= inbuf_size;
 
 		switch (result) {
 		case CHARSET_RET_OUTPUT_FULL:
@@ -239,8 +240,8 @@
 			break;
 		case CHARSET_RET_INCOMPLETE_INPUT:
 			/* save the partial sequence to buffer */
-			ret = buffer_copy(ctx->decode_buf, 0,
-					  inbuf, inbuf_pos, inbuf_left);
+			ret = buffer_write(ctx->decode_buf, 0,
+					   inbuf + inbuf_size, inbuf_left);
 			i_assert(ret == inbuf_left);
 
 			buffer_set_used_size(ctx->decode_buf, ret);
@@ -347,15 +348,13 @@
 				    const char *charset, int *unknown_charset,
 				    int search_header)
 {
-	Buffer *keybuf;
 	size_t key_len;
 
 	memset(ctx, 0, sizeof(BodySearchContext));
 
 	/* get the key uppercased */
-        keybuf = buffer_create_const_data(data_stack_pool, key, strlen(key));
 	key = charset_to_ucase_utf8_string(charset, unknown_charset,
-					   keybuf, &key_len);
+					   key, strlen(key), &key_len);
 	if (key == NULL)
 		return FALSE;
 

Index: message-header-search.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-mail/message-header-search.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- message-header-search.c	16 Dec 2002 03:26:55 -0000	1.7
+++ message-header-search.c	16 Dec 2002 03:59:06 -0000	1.8
@@ -36,7 +36,6 @@
 			   int *unknown_charset)
 {
 	HeaderSearchContext *ctx;
-	Buffer *keybuf;
 	size_t key_len;
 	const char *p;
 
@@ -44,9 +43,8 @@
 	ctx->pool = pool;
 
 	/* get the key uppercased */
-	keybuf = buffer_create_const_data(data_stack_pool, key, strlen(key));
 	key = charset_to_ucase_utf8_string(charset, unknown_charset,
-					   keybuf, &key_len);
+					   key, strlen(key), &key_len);
 
 	if (key == NULL) {
 		/* invalid key */
@@ -86,7 +84,6 @@
 static void search_with_charset(const unsigned char *data, size_t size,
 				const char *charset, HeaderSearchContext *ctx)
 {
-	Buffer *buf;
 	const char *utf8_data;
 	size_t utf8_size;
 
@@ -100,9 +97,8 @@
 		charset = ctx->key_charset;
 	}
 
-	buf = buffer_create_const_data(data_stack_pool, data, size);
 	utf8_data = charset_to_ucase_utf8_string(charset, NULL,
-						 buf, &utf8_size);
+						 data, size, &utf8_size);
 
 	if (utf8_data == NULL) {
 		/* unknown character set, or invalid data */




More information about the dovecot-cvs mailing list