Merge branch 'hm/maint-imap-send-crlf'
* hm/maint-imap-send-crlf: git-imap-send: Convert LF to CRLF before storing patch to draft box
This commit is contained in:
		
							
								
								
									
										40
									
								
								imap-send.c
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								imap-send.c
									
									
									
									
									
								
							| @ -91,7 +91,6 @@ struct msg_data { | ||||
| 	char *data; | ||||
| 	int len; | ||||
| 	unsigned char flags; | ||||
| 	unsigned int crlf:1; | ||||
| }; | ||||
|  | ||||
| static const char imap_send_usage[] = "git imap-send < <mbox>"; | ||||
| @ -1162,6 +1161,44 @@ static int imap_make_flags(int flags, char *buf) | ||||
| 	return d; | ||||
| } | ||||
|  | ||||
| static void lf_to_crlf(struct msg_data *msg) | ||||
| { | ||||
| 	char *new; | ||||
| 	int i, j, lfnum = 0; | ||||
|  | ||||
| 	if (msg->data[0] == '\n') | ||||
| 		lfnum++; | ||||
| 	for (i = 1; i < msg->len; i++) { | ||||
| 		if (msg->data[i - 1] != '\r' && msg->data[i] == '\n') | ||||
| 			lfnum++; | ||||
| 	} | ||||
|  | ||||
| 	new = xmalloc(msg->len + lfnum); | ||||
| 	if (msg->data[0] == '\n') { | ||||
| 		new[0] = '\r'; | ||||
| 		new[1] = '\n'; | ||||
| 		i = 1; | ||||
| 		j = 2; | ||||
| 	} else { | ||||
| 		new[0] = msg->data[0]; | ||||
| 		i = 1; | ||||
| 		j = 1; | ||||
| 	} | ||||
| 	for ( ; i < msg->len; i++) { | ||||
| 		if (msg->data[i] != '\n') { | ||||
| 			new[j++] = msg->data[i]; | ||||
| 			continue; | ||||
| 		} | ||||
| 		if (msg->data[i - 1] != '\r') | ||||
| 			new[j++] = '\r'; | ||||
| 		/* otherwise it already had CR before */ | ||||
| 		new[j++] = '\n'; | ||||
| 	} | ||||
| 	msg->len += lfnum; | ||||
| 	free(msg->data); | ||||
| 	msg->data = new; | ||||
| } | ||||
|  | ||||
| static int imap_store_msg(struct store *gctx, struct msg_data *data) | ||||
| { | ||||
| 	struct imap_store *ctx = (struct imap_store *)gctx; | ||||
| @ -1171,6 +1208,7 @@ static int imap_store_msg(struct store *gctx, struct msg_data *data) | ||||
| 	int ret, d; | ||||
| 	char flagstr[128]; | ||||
|  | ||||
| 	lf_to_crlf(data); | ||||
| 	memset(&cb, 0, sizeof(cb)); | ||||
|  | ||||
| 	cb.dlen = data->len; | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Junio C Hamano
					Junio C Hamano