libiconv: add all ASCII aliases
[openwrt.git] / package / libs / libiconv / src / iconv.c
index cb4e947..c3cfefa 100644 (file)
@@ -44,6 +44,15 @@ static const unsigned char charsets[] =
        "\003" "UTF-32LE"   "\0"
        "\006" "ASCII"      "\0"
        "\006" "US-ASCII"   "\0"
+       "\006" "ISO646-US"  "\0"
+       "\006" "ISO_646.IRV:1991"  "\0"
+       "\006" "ISO-IR-6"   "\0"
+       "\006" "ANSI_X3.4-1968"    "\0"
+       "\006" "ANSI_X3.4-1986"    "\0"
+       "\006" "CP367"      "\0"
+       "\006" "IBM367"     "\0"
+       "\006" "US"         "\0"
+       "\006" "CSASCII"    "\0"
        "\007" "ISO-8859-1" "\0"
        "\007" "LATIN1"     "\0"
        "\010" "ISO-8859-15""\0"
@@ -244,7 +253,7 @@ static inline int utf8dec_wchar(wchar_t *c, unsigned char *in, size_t inb)
        return -1;
 }
 
-static inline char latin9_translit(wchar_t c)
+static inline wchar_t latin9_translit(wchar_t c)
 {
        /* a number of trivial iso-8859-15 <> utf-8 transliterations */
        switch (c) {
@@ -256,7 +265,7 @@ static inline char latin9_translit(wchar_t c)
        case 0x0152: return 0xBC; /* OE */
        case 0x0153: return 0xBD; /* oe */
        case 0x0178: return 0xBE; /* Y diaeresis */
-       default:     return '?';
+       default:     return 0xFFFD; /* cannot translate */
        }
 }
 
@@ -394,9 +403,9 @@ charok:
                                c = latin9_translit(c);
                        /* fall through */
                case LATIN_1:
+                       if (c > 0xff) goto ilseq;
                        if (!*outb) goto toobig;
-                       if (c < 0x100) **out = c;
-                       else x++, **out = '*'; //FIXME: translit?
+                       **out = c;
                        ++*out;
                        --*outb;
                        break;