Here's a patch to change read_header and store_message_temp to use fread
instead of fgets. There might also need to be code added to replace nul
characters, but I don't remember if that code goes here or at another layer.

This patch has not been tested yet!

Aaron
diff -r dbmail/header.c fread/header.c
71c71
< 	size_t allocated_blocks = 1;
---
> 	size_t allocated_blocks = 1, i;
89,92c89,90
< 		/* fgets will read until \n occurs, and \n is *included* in tmpline */
< 		if (!fgets(tmpline, MAX_LINE_SIZE, instream))
< 			break;
< 		linemem = strlen(tmpline);
---
> 		/* fread may stop before finding a \n, or may continue reading past one. */
> 		linemem = fread(tmpline, sizeof(char), MAX_LINE_SIZE, instream);
95,101c93,104
< 		/* The RFC size assumes all lines end in \r\n,
< 		 * so if we have a newline (\n) but don't have
< 		 * a carriage return (\r), count it in rfcsize. */
< 		if (linemem > 0 && tmpline[linemem - 1] == '\n')
< 			if (linemem == 1
< 			    || (linemem > 1
< 				&& tmpline[linemem - 2] != '\r'))
---
> 
> 		/* Check to see if we're starting on a CR/NL boundary. */
> 		if (tmpline[0] == '\n' && tmpheader[usedmem] != '\r')
> 			tmpheaderrfcsize++;
> 
> 		/* Check to see if we read in any newlines. If so, look to
> 		 * see if they are preceded by carriage returns.
> 		 * If not, increment the rfcsize because rfc output 
> 		 * automatically inserts carriage returns. */
> 		for (i = 1; i < linemem; i++) {
> 			if (tmpline[i] == '\n'
> 			    && tmpline[i - 1] != '\r')
102a106
> 		}
diff -r dbmail/pipe.c fread/pipe.c
464,475d463
< 			if (fgets(tmpline, MAX_LINE_SIZE, instream) == NULL) 
< 				break;
< 			
< 			linemem = strlen(tmpline);
< 			/* The RFC size assumes all lines end in \r\n,
< 			 * so if we have a newline (\n) but don't have
< 			 * a carriage return (\r), count it in rfcsize. */
< 			if (linemem > 0 && tmpline[linemem - 1] == '\n')
< 				if (linemem == 1
< 				    || (linemem > 1
< 					&& tmpline[linemem - 2] != '\r'))
< 					rfclines++;
476a465,481
> 			linemem = fread(tmpline, sizeof(char), MAX_LINE_SIZE, instream);
> 			totalmem += linemem;
>                         
> 			/* Check to see if we're starting on a CR/NL boundary. */
> 			if (tmpline[0] == '\n' && strblock[usedmem] != '\r')
> 				rfclines++;
>                         
> 			/* Check to see if we read in any newlines. If so, look to
> 			 * see if they are preceded by carriage returns.
> 			 * If not, increment the rfcsize because rfc output 
> 			 * automatically inserts carriage returns. */
> 			for (i = 1; i < linemem; i++) {
> 				if (tmpline[i] == '\n'
> 				    && tmpline[i - 1] != '\r')
> 					rfclines++;
> 			}
> 			
Only in dbmail: THANKS
Only in dbmail: TODO
Only in dbmail: VERSION

Reply via email to