From 0a799424f682071da9f5b632d1394308e9255bb5 Mon Sep 17 00:00:00 2001
From: Julius Plenz
Date: Thu, 10 Mar 2011 17:03:23 +0100
Subject: fix two encoding bugs

reencode() takes three arguments in the order (txt, from, to), opposed to
reencode_string, which will, like iconv, handle the arguments with from
and to swapped. Fix that (this makes reencode more intuitive).
If src and dst encoding are equivalent, don't do any encoding.

If no special encoding parameter is found within the commit, assume
UTF-8 and explicitly convert to PAGE_ENCODING. The change to reencode()
mentioned above avoids re-encoding a UTF-8 string to UTF-8, for example.

Signed-off-by: Julius Plenz <plenz@cis.fu-berlin.de>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
---
 parsing.c | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/parsing.c b/parsing.c
index f37c49d..c9e4350 100644
--- a/parsing.c
+++ b/parsing.c
@@ -106,7 +106,11 @@ const char *reencode(char **txt, const char *src_enc, const char *dst_enc)
 	if (!txt || !*txt || !src_enc || !dst_enc)
 		return *txt;
 
-	tmp = reencode_string(*txt, src_enc, dst_enc);
+	/* no encoding needed if src_enc equals dst_enc */
+	if(!strcasecmp(src_enc, dst_enc))
+		return *txt;
+
+	tmp = reencode_string(*txt, dst_enc, src_enc);
 	if (tmp) {
 		free(*txt);
 		*txt = tmp;
@@ -160,6 +164,10 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)
 		}
 	}
 
+	/* if no special encoding is found, assume UTF-8 */
+	if(!ret->msg_encoding)
+		ret->msg_encoding = xstrdup("UTF-8");
+
 	// skip unknown header fields
 	while (p && *p && (*p != '\n')) {
 		p = strchr(p, '\n');
@@ -189,14 +197,12 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)
 	} else
 		ret->subject = xstrdup(p);
 
-	if (ret->msg_encoding) {
-		reencode(&ret->author, PAGE_ENCODING, ret->msg_encoding);
-		reencode(&ret->author_email, PAGE_ENCODING, ret->msg_encoding);
-		reencode(&ret->committer, PAGE_ENCODING, ret->msg_encoding);
-		reencode(&ret->committer_email, PAGE_ENCODING, ret->msg_encoding);
-		reencode(&ret->subject, PAGE_ENCODING, ret->msg_encoding);
-		reencode(&ret->msg, PAGE_ENCODING, ret->msg_encoding);
-	}
+	reencode(&ret->author, ret->msg_encoding, PAGE_ENCODING);
+	reencode(&ret->author_email, ret->msg_encoding, PAGE_ENCODING);
+	reencode(&ret->committer, ret->msg_encoding, PAGE_ENCODING);
+	reencode(&ret->committer_email, ret->msg_encoding, PAGE_ENCODING);
+	reencode(&ret->subject, ret->msg_encoding, PAGE_ENCODING);
+	reencode(&ret->msg, ret->msg_encoding, PAGE_ENCODING);
 
 	return ret;
 }
-- 
cgit v1.2.3-54-g00ecf


From facca560d903351ddf1b8a41faafcd1f76de5c7c Mon Sep 17 00:00:00 2001
From: Julius Plenz
Date: Thu, 10 Mar 2011 17:03:24 +0100
Subject: Add advice about scan-path in cgitrc.5.txt

Signed-off-by: Julius Plenz <plenz@cis.fu-berlin.de>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
---
 cgitrc.5.txt | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index be8483c..65b210f 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -287,8 +287,9 @@ scan-path::
 	the result will be cached as a cgitrc include-file in the cache
 	directory. If project-list has been defined prior to scan-path,
 	scan-path loads only the directories listed in the file pointed to by
-	project-list. Default value: none. See also: cache-scanrc-ttl,
-	project-list.
+	project-list. Be advised that only the global settings taken
+	before the scan-path directive will be applied to each repository.
+	Default value: none. See also: cache-scanrc-ttl, project-list.
 
 section::
 	The name of the current repository section - all repositories defined
-- 
cgit v1.2.3-54-g00ecf