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:
parent
7858a309d7
commit
a2ebbd6948
1
cgit.h
1
cgit.h
@ -16,6 +16,7 @@
|
|||||||
#include <log-tree.h>
|
#include <log-tree.h>
|
||||||
#include <archive.h>
|
#include <archive.h>
|
||||||
#include <xdiff/xdiff.h>
|
#include <xdiff/xdiff.h>
|
||||||
|
#include <utf8.h>
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
64
parsing.c
64
parsing.c
@ -6,8 +6,6 @@
|
|||||||
* (see COPYING for full license text)
|
* (see COPYING for full license text)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <iconv.h>
|
|
||||||
|
|
||||||
#include "cgit.h"
|
#include "cgit.h"
|
||||||
|
|
||||||
int next_char(FILE *f)
|
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 *substr(const char *head, const char *tail)
|
||||||
{
|
{
|
||||||
char *buf;
|
char *buf;
|
||||||
@ -321,13 +263,15 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)
|
|||||||
ret->subject = substr(p, p+strlen(p));
|
ret->subject = substr(p, p+strlen(p));
|
||||||
|
|
||||||
if(strcmp(ret->msg_encoding, PAGE_ENCODING)) {
|
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) {
|
if(t) {
|
||||||
free(ret->subject);
|
free(ret->subject);
|
||||||
ret->subject = t;
|
ret->subject = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
t = iconv_msg(ret->msg, ret->msg_encoding);
|
t = reencode_string(ret->msg, PAGE_ENCODING,
|
||||||
|
ret->msg_encoding);
|
||||||
if(t) {
|
if(t) {
|
||||||
free(ret->msg);
|
free(ret->msg);
|
||||||
ret->msg = t;
|
ret->msg = t;
|
||||||
|
Loading…
Reference in New Issue
Block a user