On Mon, Jun 19, 2006 at 01:42:53PM -0400, Joey Hess wrote: > The easiest way would probably be to not track the information and store > (and output) the field as utf-8 without doing any transcoding. This is > not exactly what debconf does, but fields that do not define an encoding > are basically using an undefined encoding and it's ok if cdebconf > assumes it's really utf-8. If this causes a mojibake then the right way > to fix it is to make the package define an encoding.
After some discussion on IRC, here's the updated patch. --- cdebconf-0.102.orig/src/template.c 2005-09-21 19:07:46.000000000 +0200 +++ cdebconf-0.102/src/template.c 2006-06-19 20:54:35.000000000 +0200 @@ -354,7 +354,7 @@ free(orig_field); return NULL; } - cp = strstr(altlang, ".UTF-8"); + cp = strcasestr(altlang, ".UTF-8"); if (cp + 6 == altlang + strlen(altlang) && cp != altlang + 1) { *cp = 0; @@ -465,10 +465,23 @@ free(orig_field); return; } - cp = strstr(altlang, ".UTF-8"); - if (cp + 6 == altlang + strlen(altlang) && cp != altlang + 1) + cp = strcasestr(altlang, ".UTF-8"); + + /* Plain debconf supports undefined character sets, on the + form "Description-nb_NO: ", which is valid if the text is + ASCII (but debconf still uses that syntax regardless of + validity if the application does not specify a character + set). To avoid losing these fields, we simply read them + in as if they were UTF-8 fields, as valid ASCII is always + valid UTF-8 as well. + + -- sesse, 2006-06-19 + */ + if ((cp + 6 == altlang + strlen(altlang) && cp != altlang + 1) + || strchr(altlang, '.') == NULL) { - *cp = 0; + if (cp != NULL) + *cp = 0; template_lset(t, altlang, orig_field, value); } #ifndef NODEBUG @@ -617,7 +630,7 @@ template_lset(t, NULL, "default", p+9); else if (i18n && strstr(p, "Default-") == p && t != 0) { - cp = strstr(p, ".UTF-8: "); + cp = strcasestr(p, ".UTF-8: "); if (cp != NULL && cp != p+8) { lang = strndup(p+8, (int) (cp - p - 8)); @@ -635,7 +648,7 @@ template_lset(t, NULL, "choices", p+9); else if (i18n && strstr(p, "Choices-") == p && t != 0) { - cp = strstr(p, ".UTF-8: "); + cp = strcasestr(p, ".UTF-8: "); if (cp != NULL && cp != p+8) { lang = strndup(p+8, (int) (cp - p - 8)); @@ -653,7 +666,7 @@ template_lset(t, NULL, "indices", p+9); else if (i18n && strstr(p, "Indices-") == p && t != 0) { - cp = strstr(p, ".UTF-8: "); + cp = strcasestr(p, ".UTF-8: "); if (cp != NULL && cp != p+8) { lang = strndup(p+8, (int) (cp - p - 8)); @@ -696,7 +709,7 @@ } else if (i18n && strstr(p, "Description-") == p && t != 0) { - cp = strstr(p, ".UTF-8: "); + cp = strcasestr(p, ".UTF-8: "); if (cp != NULL && cp != p+12) { lang = strndup(p+12, (int) (cp - p - 12)); /* Steinar */ -- Homepage: http://www.sesse.net/ -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]