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:
commit
55ac326ecb
7
cgit.h
7
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>
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -48,6 +49,11 @@
|
|||||||
#define TM_MONTH (TM_YEAR / 12.0)
|
#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 (*configfn)(const char *name, const char *value);
|
||||||
typedef void (*filepair_fn)(struct diff_filepair *pair);
|
typedef void (*filepair_fn)(struct diff_filepair *pair);
|
||||||
typedef void (*linediff_fn)(char *line, int len);
|
typedef void (*linediff_fn)(char *line, int len);
|
||||||
@ -90,6 +96,7 @@ struct commitinfo {
|
|||||||
unsigned long committer_date;
|
unsigned long committer_date;
|
||||||
char *subject;
|
char *subject;
|
||||||
char *msg;
|
char *msg;
|
||||||
|
char *msg_encoding;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct taginfo {
|
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->committer_email = NULL;
|
||||||
ret->subject = NULL;
|
ret->subject = NULL;
|
||||||
ret->msg = NULL;
|
ret->msg = NULL;
|
||||||
|
ret->msg_encoding = NULL;
|
||||||
|
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
return ret;
|
return ret;
|
||||||
@ -233,6 +234,14 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)
|
|||||||
p = strchr(t, '\n') + 1;
|
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'))
|
while (*p && (*p != '\n'))
|
||||||
p = strchr(p, '\n') + 1; // skip unknown header fields
|
p = strchr(p, '\n') + 1; // skip unknown header fields
|
||||||
|
|
||||||
@ -253,6 +262,22 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)
|
|||||||
} else
|
} else
|
||||||
ret->subject = substr(p, p+strlen(p));
|
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;
|
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);
|
||||||
free(info->committer_email);
|
free(info->committer_email);
|
||||||
free(info->subject);
|
free(info->subject);
|
||||||
|
free(info->msg);
|
||||||
|
free(info->msg_encoding);
|
||||||
free(info);
|
free(info);
|
||||||
return NULL;
|
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)
|
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("Last-Modified: %s\n", http_date(item->st.st_mtime));
|
||||||
htmlf("Expires: %s\n", http_date(item->st.st_mtime +
|
htmlf("Expires: %s\n", http_date(item->st.st_mtime +
|
||||||
ttl_seconds(item->ttl)));
|
ttl_seconds(item->ttl)));
|
||||||
|
Loading…
Reference in New Issue
Block a user