Use utf8::reencode_string from git
This replaces the iconv-support in cgit with similar functions already existing in git. Signed-off-by: Lars Hjemli <hjemli@gmai.com>
This commit is contained in:
		 Lars Hjemli
					Lars Hjemli
				
			
				
					committato da
					
						 Jonathan Bastien-Filiatrault
						Jonathan Bastien-Filiatrault
					
				
			
			
				
	
			
			
			 Jonathan Bastien-Filiatrault
						Jonathan Bastien-Filiatrault
					
				
			
						parent
						
							7858a309d7
						
					
				
				
					commit
					a2ebbd6948
				
			
							
								
								
									
										1
									
								
								cgit.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								cgit.h
									
									
									
									
									
								
							| @@ -16,6 +16,7 @@ | ||||
| #include <log-tree.h> | ||||
| #include <archive.h> | ||||
| #include <xdiff/xdiff.h> | ||||
| #include <utf8.h> | ||||
|  | ||||
|  | ||||
| /* | ||||
|   | ||||
							
								
								
									
										64
									
								
								parsing.c
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								parsing.c
									
									
									
									
									
								
							| @@ -6,8 +6,6 @@ | ||||
|  *   (see COPYING for full license text) | ||||
|  */ | ||||
|  | ||||
| #include <iconv.h> | ||||
|  | ||||
| #include "cgit.h" | ||||
|  | ||||
| int next_char(FILE *f) | ||||
| @@ -178,62 +176,6 @@ void cgit_parse_url(const char *url) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| static char *iconv_msg(char *msg, const char *encoding) | ||||
| { | ||||
| 	iconv_t msg_conv = iconv_open(PAGE_ENCODING, encoding); | ||||
| 	size_t inlen = strlen(msg); | ||||
| 	char *in; | ||||
| 	char *out; | ||||
| 	size_t inleft; | ||||
| 	size_t outleft; | ||||
| 	char *buf; | ||||
| 	char *ret; | ||||
| 	size_t buf_sz; | ||||
| 	int again, fail; | ||||
|  | ||||
| 	if(msg_conv == (iconv_t)-1) | ||||
| 		return NULL; | ||||
|  | ||||
| 	buf_sz = inlen * 2; | ||||
| 	buf = xmalloc(buf_sz+1); | ||||
| 	do { | ||||
| 		in = msg; | ||||
| 		inleft = inlen; | ||||
|  | ||||
| 		out = buf; | ||||
| 		outleft = buf_sz; | ||||
| 		iconv(msg_conv, &in, &inleft, &out, &outleft); | ||||
|  | ||||
| 		if(inleft == 0) { | ||||
| 			fail = 0; | ||||
| 			again = 0; | ||||
| 		} else if(inleft != 0 && errno == E2BIG) { | ||||
| 			fail = 0; | ||||
| 			again = 1; | ||||
|  | ||||
| 			buf_sz *= 2; | ||||
| 			free(buf); | ||||
| 			buf = xmalloc(buf_sz+1); | ||||
| 		} else { | ||||
| 			fail = 1; | ||||
| 			again = 0; | ||||
| 		} | ||||
| 	} while(again && !fail); | ||||
|  | ||||
| 	if(fail) { | ||||
| 		free(buf); | ||||
| 		ret = NULL; | ||||
| 	} else { | ||||
| 		buf = xrealloc(buf, out - buf); | ||||
| 		*out = 0; | ||||
| 		ret = buf; | ||||
| 	} | ||||
|  | ||||
| 	iconv_close(msg_conv); | ||||
|  | ||||
| 	return ret; | ||||
| } | ||||
|  | ||||
| char *substr(const char *head, const char *tail) | ||||
| { | ||||
| 	char *buf; | ||||
| @@ -321,13 +263,15 @@ struct commitinfo *cgit_parse_commit(struct commit *commit) | ||||
| 		ret->subject = substr(p, p+strlen(p)); | ||||
|  | ||||
| 	if(strcmp(ret->msg_encoding, PAGE_ENCODING)) { | ||||
| 		t = iconv_msg(ret->subject, ret->msg_encoding); | ||||
| 		t = reencode_string(ret->subject, PAGE_ENCODING, | ||||
| 				    ret->msg_encoding); | ||||
| 		if(t) { | ||||
| 			free(ret->subject); | ||||
| 			ret->subject = t; | ||||
| 		} | ||||
|  | ||||
| 		t = iconv_msg(ret->msg, ret->msg_encoding); | ||||
| 		t = reencode_string(ret->msg, PAGE_ENCODING, | ||||
| 				    ret->msg_encoding); | ||||
| 		if(t) { | ||||
| 			free(ret->msg); | ||||
| 			ret->msg = t; | ||||
|   | ||||
		Fai riferimento in un nuovo problema
	
	Block a user