Merge branch 'iconv-rebased' of http://x2a.org/pub/git/cgit
* 'iconv-rebased' of http://x2a.org/pub/git/cgit: Use utf8::reencode_string from git Convert subject and message with iconv_msg. Add iconv_msg function. Set msg_encoding according to the header. Add commit->msg_encoding, allocate msg dynamicly.
This commit is contained in:
melakukan
55ac326ecb
7
cgit.h
7
cgit.h
@ -16,6 +16,7 @@
|
||||
#include <log-tree.h>
|
||||
#include <archive.h>
|
||||
#include <xdiff/xdiff.h>
|
||||
#include <utf8.h>
|
||||
|
||||
|
||||
/*
|
||||
@ -48,6 +49,11 @@
|
||||
#define TM_MONTH (TM_YEAR / 12.0)
|
||||
|
||||
|
||||
/*
|
||||
* Default encoding
|
||||
*/
|
||||
#define PAGE_ENCODING "UTF-8"
|
||||
|
||||
typedef void (*configfn)(const char *name, const char *value);
|
||||
typedef void (*filepair_fn)(struct diff_filepair *pair);
|
||||
typedef void (*linediff_fn)(char *line, int len);
|
||||
@ -90,6 +96,7 @@ struct commitinfo {
|
||||
unsigned long committer_date;
|
||||
char *subject;
|
||||
char *msg;
|
||||
char *msg_encoding;
|
||||
};
|
||||
|
||||
struct taginfo {
|
||||
|
25
parsing.c
25
parsing.c
@ -199,6 +199,7 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)
|
||||
ret->committer_email = NULL;
|
||||
ret->subject = NULL;
|
||||
ret->msg = NULL;
|
||||
ret->msg_encoding = NULL;
|
||||
|
||||
if (p == NULL)
|
||||
return ret;
|
||||
@ -233,6 +234,14 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)
|
||||
p = strchr(t, '\n') + 1;
|
||||
}
|
||||
|
||||
if (!strncmp(p, "encoding ", 9)) {
|
||||
p += 9;
|
||||
t = strchr(p, '\n') + 1;
|
||||
ret->msg_encoding = substr(p, t);
|
||||
p = t;
|
||||
} else
|
||||
ret->msg_encoding = xstrdup(PAGE_ENCODING);
|
||||
|
||||
while (*p && (*p != '\n'))
|
||||
p = strchr(p, '\n') + 1; // skip unknown header fields
|
||||
|
||||
@ -253,6 +262,22 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)
|
||||
} else
|
||||
ret->subject = substr(p, p+strlen(p));
|
||||
|
||||
if(strcmp(ret->msg_encoding, PAGE_ENCODING)) {
|
||||
t = reencode_string(ret->subject, PAGE_ENCODING,
|
||||
ret->msg_encoding);
|
||||
if(t) {
|
||||
free(ret->subject);
|
||||
ret->subject = t;
|
||||
}
|
||||
|
||||
t = reencode_string(ret->msg, PAGE_ENCODING,
|
||||
ret->msg_encoding);
|
||||
if(t) {
|
||||
free(ret->msg);
|
||||
ret->msg = t;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
2
shared.c
2
shared.c
@ -265,6 +265,8 @@ void *cgit_free_commitinfo(struct commitinfo *info)
|
||||
free(info->committer);
|
||||
free(info->committer_email);
|
||||
free(info->subject);
|
||||
free(info->msg);
|
||||
free(info->msg_encoding);
|
||||
free(info);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -352,7 +352,7 @@ void cgit_print_age(time_t t, time_t max_relative, char *format)
|
||||
|
||||
void cgit_print_docstart(char *title, struct cacheitem *item)
|
||||
{
|
||||
html("Content-Type: text/html; charset=utf-8\n");
|
||||
html("Content-Type: text/html; charset=" PAGE_ENCODING "\n");
|
||||
htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime));
|
||||
htmlf("Expires: %s\n", http_date(item->st.st_mtime +
|
||||
ttl_seconds(item->ttl)));
|
||||
|
Memuat…
Reference in New Issue
Block a user