changeset 152:7e1f18c5d708 HEAD

FETCH BODY[HEADER.FIELDS ...] wasn't working
author Timo Sirainen <tss@iki.fi>
date Wed, 04 Sep 2002 19:15:44 +0300
parents e0f995ee5969
children 9660df1ca44f
files src/lib-storage/index/index-fetch-section.c
diffstat 1 files changed, 18 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/index-fetch-section.c	Wed Sep 04 18:24:05 2002 +0300
+++ b/src/lib-storage/index/index-fetch-section.c	Wed Sep 04 19:15:44 2002 +0300
@@ -137,7 +137,7 @@
 			       void *context)
 {
 	FetchHeaderFieldContext *ctx = context;
-	const char *name_start, *name_end, *cr;
+	const char *field_start, *field_end, *cr, *p;
 	unsigned int len;
 
 	/* see if we want this field */
@@ -145,33 +145,36 @@
 		return;
 
 	/* add the field, inserting CRs when needed. FIXME: is this too
-	   kludgy? we assume name continues with ": value\n".. */
-	name_start = name;
-	name_end = name + name_len;
+	   kludgy? we assume name continues with ": value".. */
+	field_start = name;
+	field_end = value + value_len;
 
 	cr = NULL;
-	for (name_start = name; name != name_end; name++) {
-		if (*name == '\r')
-			cr = name;
-		else if (*name == '\n' && cr != name-1) {
+	for (p = field_start; p != field_end; p++) {
+		if (*p == '\r')
+			cr = p;
+		else if (*p == '\n' && cr != p-1) {
 			/* missing CR */
-			len = (unsigned int) (name-name_start);
-			memcpy(ctx->dest, name_start, len);
+			len = (unsigned int) (p-field_start);
+			memcpy(ctx->dest, field_start, len);
 
 			ctx->dest[len++] = '\r';
 			ctx->dest[len++] = '\n';
 			ctx->dest += len;
 
-			name_start = name+1;
+			field_start = p+1;
 		}
 	}
 
-	if (name_start != name_end) {
-		/* last linebreak was \r\n */
-		len = (unsigned int) (name_end-name_start);
-		memcpy(ctx->dest, name_start, len);
+	if (field_start != field_end) {
+		len = (unsigned int) (field_end-field_start);
+		memcpy(ctx->dest, field_start, len);
 		ctx->dest += len;
 	}
+
+	ctx->dest[0] = '\r';
+	ctx->dest[1] = '\n';
+	ctx->dest += 2;
 }
 
 /* Store headers into dest, returns number of bytes written. */