|
Szabolcs Nagy |
d0ea37 |
// commit: b7bfb5c3a8330002250f304cb5deb522fa054eae
|
|
Szabolcs Nagy |
d0ea37 |
// fix iconv conversions for iso88592-iso885916
|
|
Szabolcs Nagy |
d0ea37 |
#include <iconv.h>
|
|
Szabolcs Nagy |
d0ea37 |
#include <string.h>
|
|
Szabolcs Nagy |
d0ea37 |
#include "test.h"
|
|
Szabolcs Nagy |
d0ea37 |
|
|
Szabolcs Nagy |
d0ea37 |
int main(void)
|
|
Szabolcs Nagy |
d0ea37 |
{
|
|
Szabolcs Nagy |
d0ea37 |
static char *test_charsets[] = {
|
|
Szabolcs Nagy |
d0ea37 |
"iso-8859-1",
|
|
Szabolcs Nagy |
d0ea37 |
"iso-8859-2",
|
|
Szabolcs Nagy |
d0ea37 |
"iso-8859-4",
|
|
Szabolcs Nagy |
d0ea37 |
"iso-8859-5",
|
|
Szabolcs Nagy |
d0ea37 |
"iso-8859-9",
|
|
Szabolcs Nagy |
d0ea37 |
"iso-8859-10",
|
|
Szabolcs Nagy |
d0ea37 |
"iso-8859-13",
|
|
Szabolcs Nagy |
d0ea37 |
"iso-8859-14",
|
|
Szabolcs Nagy |
d0ea37 |
"iso-8859-15",
|
|
Szabolcs Nagy |
d0ea37 |
"iso-8859-16",
|
|
Szabolcs Nagy |
d0ea37 |
0
|
|
Szabolcs Nagy |
d0ea37 |
};
|
|
Szabolcs Nagy |
d0ea37 |
char all_codepoints[256];
|
|
Szabolcs Nagy |
d0ea37 |
int i;
|
|
Szabolcs Nagy |
d0ea37 |
|
|
Szabolcs Nagy |
d0ea37 |
for (i=0; i<256; i++)
|
|
Szabolcs Nagy |
d0ea37 |
all_codepoints[i] = 255-i;
|
|
Szabolcs Nagy |
d0ea37 |
|
|
Szabolcs Nagy |
d0ea37 |
for (i=0; test_charsets[i]; i++) {
|
|
Szabolcs Nagy |
d0ea37 |
iconv_t there = iconv_open("UTF-8", test_charsets[i]);
|
|
Szabolcs Nagy |
d0ea37 |
if (there == (iconv_t)-1) continue;
|
|
Szabolcs Nagy |
d0ea37 |
iconv_t andback = iconv_open(test_charsets[i], "UTF-8");
|
|
Szabolcs Nagy |
d0ea37 |
if (andback == (iconv_t)-1) {
|
|
Szabolcs Nagy |
d0ea37 |
iconv_close(there);
|
|
Szabolcs Nagy |
d0ea37 |
continue;
|
|
Szabolcs Nagy |
d0ea37 |
}
|
|
Szabolcs Nagy |
d0ea37 |
char u8buf[1024];
|
|
Szabolcs Nagy |
d0ea37 |
char buf[256];
|
|
Szabolcs Nagy |
d0ea37 |
size_t u8rem = sizeof u8buf;
|
|
Szabolcs Nagy |
d0ea37 |
int r1 = iconv(there,
|
|
Szabolcs Nagy |
d0ea37 |
&(char *){all_codepoints}, &(size_t){sizeof all_codepoints},
|
|
Szabolcs Nagy |
d0ea37 |
&(char *){u8buf}, &u8rem);
|
|
Szabolcs Nagy |
d0ea37 |
size_t u8len = sizeof u8buf - u8rem;
|
|
Szabolcs Nagy |
d0ea37 |
int r2 = iconv(andback,
|
|
Szabolcs Nagy |
d0ea37 |
&(char *){u8buf}, &(size_t){u8len},
|
|
Szabolcs Nagy |
d0ea37 |
&(char *){buf}, &(size_t){sizeof buf});
|
|
Szabolcs Nagy |
d0ea37 |
|
|
Szabolcs Nagy |
d0ea37 |
if (r1) t_error("got %d converting from %s\n", r1, test_charsets[i]);
|
|
Szabolcs Nagy |
d0ea37 |
if (r2) t_error("got %d converting back to %s\n", r2, test_charsets[i]);
|
|
Szabolcs Nagy |
d0ea37 |
|
|
Szabolcs Nagy |
d0ea37 |
if (memcmp(all_codepoints, buf, sizeof buf)) {
|
|
Szabolcs Nagy |
d0ea37 |
t_error("round trip corrupted %s characters\n", test_charsets[i]);
|
|
Szabolcs Nagy |
d0ea37 |
}
|
|
Szabolcs Nagy |
d0ea37 |
|
|
Szabolcs Nagy |
d0ea37 |
iconv_close(there);
|
|
Szabolcs Nagy |
d0ea37 |
iconv_close(andback);
|
|
Szabolcs Nagy |
d0ea37 |
}
|
|
Szabolcs Nagy |
d0ea37 |
|
|
Szabolcs Nagy |
d0ea37 |
return t_status;
|
|
Szabolcs Nagy |
d0ea37 |
}
|