summaryrefslogtreecommitdiff
path: root/tests/test-striconveh.c
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2007-01-23 01:09:41 +0000
committerBruno Haible <bruno@clisp.org>2007-01-23 01:09:41 +0000
commit6d6f8a5cd56ca54a9e9d49516cd2e849f8a6b1c6 (patch)
tree2071a3b2b769c6a17fd032bb536625df13edaef4 /tests/test-striconveh.c
parent34155a41ab5499528457bfe0b723532c48b8bb93 (diff)
downloadgnulib-6d6f8a5cd56ca54a9e9d49516cd2e849f8a6b1c6.tar.gz
Add optional offsets argument to conversion routines.
Diffstat (limited to 'tests/test-striconveh.c')
-rw-r--r--tests/test-striconveh.c625
1 files changed, 423 insertions, 202 deletions
diff --git a/tests/test-striconveh.c b/tests/test-striconveh.c
index 7d45273729..31b7b721d1 100644
--- a/tests/test-striconveh.c
+++ b/tests/test-striconveh.c
@@ -34,12 +34,25 @@
#define SIZEOF(array) (sizeof (array) / sizeof (array[0]))
#define ASSERT(expr) if (!(expr)) abort ();
+/* Magic number for detecting bounds violations. */
+#define MAGIC 0x1983EFF1
+
+static size_t *
+new_offsets (size_t n)
+{
+ size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t));
+ offsets[n] = MAGIC;
+ return offsets;
+}
+
int
main ()
{
static enum iconv_ilseq_handler handlers[] =
{ iconveh_error, iconveh_question_mark, iconveh_escape_sequence };
size_t h;
+ size_t o;
+ size_t i;
#if HAVE_ICONV
/* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1,
@@ -66,17 +79,29 @@ main ()
enum iconv_ilseq_handler handler = handlers[h];
static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
- char *result = NULL;
- size_t length = 0;
- int retval = mem_cd_iconveh (input, strlen (input),
- cd_88592_to_88591,
- cd_88592_to_utf8, cd_utf8_to_88591,
- handler,
- &result, &length);
- ASSERT (retval == 0);
- ASSERT (length == strlen (expected));
- ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
- free (result);
+ for (o = 0; o < 2; o++)
+ {
+ size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
+ char *result = NULL;
+ size_t length = 0;
+ int retval = mem_cd_iconveh (input, strlen (input),
+ cd_88592_to_88591,
+ cd_88592_to_utf8, cd_utf8_to_88591,
+ handler,
+ offsets,
+ &result, &length);
+ ASSERT (retval == 0);
+ ASSERT (length == strlen (expected));
+ ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
+ if (o)
+ {
+ for (i = 0; i < 37; i++)
+ ASSERT (offsets[i] == i);
+ ASSERT (offsets[37] == MAGIC);
+ free (offsets);
+ }
+ free (result);
+ }
}
/* Test conversion from ISO-8859-2 to ISO-8859-1 with EILSEQ. */
@@ -84,37 +109,59 @@ main ()
{
enum iconv_ilseq_handler handler = handlers[h];
static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */
- char *result = NULL;
- size_t length = 0;
- int retval = mem_cd_iconveh (input, strlen (input),
- cd_88592_to_88591,
- cd_88592_to_utf8, cd_utf8_to_88591,
- handler,
- &result, &length);
- switch (handler)
+ for (o = 0; o < 2; o++)
{
- case iconveh_error:
- ASSERT (retval == -1 && errno == EILSEQ);
- ASSERT (result == NULL);
- break;
- case iconveh_question_mark:
- {
- static const char expected[] = "Rafa? Maszkowski";
- ASSERT (retval == 0);
- ASSERT (length == strlen (expected));
- ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
- free (result);
- }
- break;
- case iconveh_escape_sequence:
- {
- static const char expected[] = "Rafa\\u0142 Maszkowski";
- ASSERT (retval == 0);
- ASSERT (length == strlen (expected));
- ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
- free (result);
- }
- break;
+ size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
+ char *result = NULL;
+ size_t length = 0;
+ int retval = mem_cd_iconveh (input, strlen (input),
+ cd_88592_to_88591,
+ cd_88592_to_utf8, cd_utf8_to_88591,
+ handler,
+ offsets,
+ &result, &length);
+ switch (handler)
+ {
+ case iconveh_error:
+ ASSERT (retval == -1 && errno == EILSEQ);
+ ASSERT (result == NULL);
+ if (o)
+ free (offsets);
+ break;
+ case iconveh_question_mark:
+ {
+ static const char expected[] = "Rafa? Maszkowski";
+ ASSERT (retval == 0);
+ ASSERT (length == strlen (expected));
+ ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
+ if (o)
+ {
+ for (i = 0; i < 16; i++)
+ ASSERT (offsets[i] == i);
+ ASSERT (offsets[16] == MAGIC);
+ free (offsets);
+ }
+ free (result);
+ }
+ break;
+ case iconveh_escape_sequence:
+ {
+ static const char expected[] = "Rafa\\u0142 Maszkowski";
+ ASSERT (retval == 0);
+ ASSERT (length == strlen (expected));
+ ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
+ if (o)
+ {
+ for (i = 0; i < 16; i++)
+ ASSERT (offsets[i] == (i < 5 ? i :
+ i + 5));
+ ASSERT (offsets[16] == MAGIC);
+ free (offsets);
+ }
+ free (result);
+ }
+ break;
+ }
}
}
@@ -124,17 +171,32 @@ main ()
enum iconv_ilseq_handler handler = handlers[h];
static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237";
- char *result = NULL;
- size_t length = 0;
- int retval = mem_cd_iconveh (input, strlen (input),
- cd_88591_to_utf8,
- cd_88591_to_utf8, (iconv_t)(-1),
- handler,
- &result, &length);
- ASSERT (retval == 0);
- ASSERT (length == strlen (expected));
- ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
- free (result);
+ for (o = 0; o < 2; o++)
+ {
+ size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
+ char *result = NULL;
+ size_t length = 0;
+ int retval = mem_cd_iconveh (input, strlen (input),
+ cd_88591_to_utf8,
+ cd_88591_to_utf8, (iconv_t)(-1),
+ handler,
+ offsets,
+ &result, &length);
+ ASSERT (retval == 0);
+ ASSERT (length == strlen (expected));
+ ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
+ if (o)
+ {
+ for (i = 0; i < 37; i++)
+ ASSERT (offsets[i] == (i < 1 ? i :
+ i < 12 ? i + 1 :
+ i < 18 ? i + 2 :
+ i + 3));
+ ASSERT (offsets[37] == MAGIC);
+ free (offsets);
+ }
+ free (result);
+ }
}
/* Test conversion from UTF-8 to ISO-8859-1 with no errors. */
@@ -143,17 +205,36 @@ main ()
enum iconv_ilseq_handler handler = handlers[h];
static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237";
static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
- char *result = NULL;
- size_t length = 0;
- int retval = mem_cd_iconveh (input, strlen (input),
- cd_utf8_to_88591,
- (iconv_t)(-1), cd_utf8_to_88591,
- handler,
- &result, &length);
- ASSERT (retval == 0);
- ASSERT (length == strlen (expected));
- ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
- free (result);
+ for (o = 0; o < 2; o++)
+ {
+ size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
+ char *result = NULL;
+ size_t length = 0;
+ int retval = mem_cd_iconveh (input, strlen (input),
+ cd_utf8_to_88591,
+ (iconv_t)(-1), cd_utf8_to_88591,
+ handler,
+ offsets,
+ &result, &length);
+ ASSERT (retval == 0);
+ ASSERT (length == strlen (expected));
+ ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
+ if (o)
+ {
+ for (i = 0; i < 41; i++)
+ ASSERT (offsets[i] == (i < 1 ? i :
+ i == 1 ? (size_t)(-1) :
+ i < 13 ? i - 1 :
+ i == 13 ? (size_t)(-1) :
+ i < 20 ? i - 2 :
+ i == 20 ? (size_t)(-1) :
+ i < 40 ? i - 3 :
+ (size_t)(-1)));
+ ASSERT (offsets[41] == MAGIC);
+ free (offsets);
+ }
+ free (result);
+ }
}
/* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */
@@ -161,37 +242,62 @@ main ()
{
enum iconv_ilseq_handler handler = handlers[h];
static const char input[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */
- char *result = NULL;
- size_t length = 0;
- int retval = mem_cd_iconveh (input, strlen (input),
- cd_utf8_to_88591,
- (iconv_t)(-1), cd_utf8_to_88591,
- handler,
- &result, &length);
- switch (handler)
+ for (o = 0; o < 2; o++)
{
- case iconveh_error:
- ASSERT (retval == -1 && errno == EILSEQ);
- ASSERT (result == NULL);
- break;
- case iconveh_question_mark:
- {
- static const char expected[] = "Rafa? Maszkowski";
- ASSERT (retval == 0);
- ASSERT (length == strlen (expected));
- ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
- free (result);
- }
- break;
- case iconveh_escape_sequence:
- {
- static const char expected[] = "Rafa\\u0142 Maszkowski";
- ASSERT (retval == 0);
- ASSERT (length == strlen (expected));
- ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
- free (result);
- }
- break;
+ size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
+ char *result = NULL;
+ size_t length = 0;
+ int retval = mem_cd_iconveh (input, strlen (input),
+ cd_utf8_to_88591,
+ (iconv_t)(-1), cd_utf8_to_88591,
+ handler,
+ offsets,
+ &result, &length);
+ switch (handler)
+ {
+ case iconveh_error:
+ ASSERT (retval == -1 && errno == EILSEQ);
+ ASSERT (result == NULL);
+ if (o)
+ free (offsets);
+ break;
+ case iconveh_question_mark:
+ {
+ static const char expected[] = "Rafa? Maszkowski";
+ ASSERT (retval == 0);
+ ASSERT (length == strlen (expected));
+ ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
+ if (o)
+ {
+ for (i = 0; i < 17; i++)
+ ASSERT (offsets[i] == (i < 5 ? i :
+ i == 5 ? (size_t)(-1) :
+ i - 1));
+ ASSERT (offsets[17] == MAGIC);
+ free (offsets);
+ }
+ free (result);
+ }
+ break;
+ case iconveh_escape_sequence:
+ {
+ static const char expected[] = "Rafa\\u0142 Maszkowski";
+ ASSERT (retval == 0);
+ ASSERT (length == strlen (expected));
+ ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
+ if (o)
+ {
+ for (i = 0; i < 17; i++)
+ ASSERT (offsets[i] == (i < 5 ? i :
+ i == 5 ? (size_t)(-1) :
+ i + 4));
+ ASSERT (offsets[17] == MAGIC);
+ free (offsets);
+ }
+ free (result);
+ }
+ break;
+ }
}
}
@@ -200,17 +306,28 @@ main ()
{
enum iconv_ilseq_handler handler = handlers[h];
static const char input[] = "\342";
- char *result = NULL;
- size_t length = 0;
- int retval = mem_cd_iconveh (input, strlen (input),
- cd_utf8_to_88591,
- (iconv_t)(-1), cd_utf8_to_88591,
- handler,
- &result, &length);
- ASSERT (retval == 0);
- ASSERT (length == 0);
- if (result != NULL)
- free (result);
+ for (o = 0; o < 2; o++)
+ {
+ size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
+ char *result = NULL;
+ size_t length = 0;
+ int retval = mem_cd_iconveh (input, strlen (input),
+ cd_utf8_to_88591,
+ (iconv_t)(-1), cd_utf8_to_88591,
+ handler,
+ offsets,
+ &result, &length);
+ ASSERT (retval == 0);
+ ASSERT (length == 0);
+ if (o)
+ {
+ ASSERT (offsets[0] == 0);
+ ASSERT (offsets[1] == MAGIC);
+ free (offsets);
+ }
+ if (result != NULL)
+ free (result);
+ }
}
/* ------------------------ Test str_cd_iconveh() ------------------------ */
@@ -355,16 +472,28 @@ main ()
enum iconv_ilseq_handler handler = handlers[h];
static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
- char *result = NULL;
- size_t length = 0;
- int retval = mem_iconveh (input, strlen (input),
- "ISO-8859-2", "ISO-8859-1",
- handler,
- &result, &length);
- ASSERT (retval == 0);
- ASSERT (length == strlen (expected));
- ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
- free (result);
+ for (o = 0; o < 2; o++)
+ {
+ size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
+ char *result = NULL;
+ size_t length = 0;
+ int retval = mem_iconveh (input, strlen (input),
+ "ISO-8859-2", "ISO-8859-1",
+ handler,
+ offsets,
+ &result, &length);
+ ASSERT (retval == 0);
+ ASSERT (length == strlen (expected));
+ ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
+ if (o)
+ {
+ for (i = 0; i < 37; i++)
+ ASSERT (offsets[i] == i);
+ ASSERT (offsets[37] == MAGIC);
+ free (offsets);
+ }
+ free (result);
+ }
}
/* Test conversion from ISO-8859-2 to ISO-8859-1 with EILSEQ. */
@@ -372,36 +501,58 @@ main ()
{
enum iconv_ilseq_handler handler = handlers[h];
static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */
- char *result = NULL;
- size_t length = 0;
- int retval = mem_iconveh (input, strlen (input),
- "ISO-8859-2", "ISO-8859-1",
- handler,
- &result, &length);
- switch (handler)
+ for (o = 0; o < 2; o++)
{
- case iconveh_error:
- ASSERT (retval == -1 && errno == EILSEQ);
- ASSERT (result == NULL);
- break;
- case iconveh_question_mark:
- {
- static const char expected[] = "Rafa? Maszkowski";
- ASSERT (retval == 0);
- ASSERT (length == strlen (expected));
- ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
- free (result);
- }
- break;
- case iconveh_escape_sequence:
- {
- static const char expected[] = "Rafa\\u0142 Maszkowski";
- ASSERT (retval == 0);
- ASSERT (length == strlen (expected));
- ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
- free (result);
- }
- break;
+ size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
+ char *result = NULL;
+ size_t length = 0;
+ int retval = mem_iconveh (input, strlen (input),
+ "ISO-8859-2", "ISO-8859-1",
+ handler,
+ offsets,
+ &result, &length);
+ switch (handler)
+ {
+ case iconveh_error:
+ ASSERT (retval == -1 && errno == EILSEQ);
+ ASSERT (result == NULL);
+ if (o)
+ free (offsets);
+ break;
+ case iconveh_question_mark:
+ {
+ static const char expected[] = "Rafa? Maszkowski";
+ ASSERT (retval == 0);
+ ASSERT (length == strlen (expected));
+ ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
+ if (o)
+ {
+ for (i = 0; i < 16; i++)
+ ASSERT (offsets[i] == i);
+ ASSERT (offsets[16] == MAGIC);
+ free (offsets);
+ }
+ free (result);
+ }
+ break;
+ case iconveh_escape_sequence:
+ {
+ static const char expected[] = "Rafa\\u0142 Maszkowski";
+ ASSERT (retval == 0);
+ ASSERT (length == strlen (expected));
+ ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
+ if (o)
+ {
+ for (i = 0; i < 16; i++)
+ ASSERT (offsets[i] == (i < 5 ? i :
+ i + 5));
+ ASSERT (offsets[16] == MAGIC);
+ free (offsets);
+ }
+ free (result);
+ }
+ break;
+ }
}
}
@@ -411,16 +562,31 @@ main ()
enum iconv_ilseq_handler handler = handlers[h];
static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237";
- char *result = NULL;
- size_t length = 0;
- int retval = mem_iconveh (input, strlen (input),
- "ISO-8859-1", "UTF-8",
- handler,
- &result, &length);
- ASSERT (retval == 0);
- ASSERT (length == strlen (expected));
- ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
- free (result);
+ for (o = 0; o < 2; o++)
+ {
+ size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
+ char *result = NULL;
+ size_t length = 0;
+ int retval = mem_iconveh (input, strlen (input),
+ "ISO-8859-1", "UTF-8",
+ handler,
+ offsets,
+ &result, &length);
+ ASSERT (retval == 0);
+ ASSERT (length == strlen (expected));
+ ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
+ if (o)
+ {
+ for (i = 0; i < 37; i++)
+ ASSERT (offsets[i] == (i < 1 ? i :
+ i < 12 ? i + 1 :
+ i < 18 ? i + 2 :
+ i + 3));
+ ASSERT (offsets[37] == MAGIC);
+ free (offsets);
+ }
+ free (result);
+ }
}
/* Test conversion from UTF-8 to ISO-8859-1 with no errors. */
@@ -429,16 +595,35 @@ main ()
enum iconv_ilseq_handler handler = handlers[h];
static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237";
static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
- char *result = NULL;
- size_t length = 0;
- int retval = mem_iconveh (input, strlen (input),
- "UTF-8", "ISO-8859-1",
- handler,
- &result, &length);
- ASSERT (retval == 0);
- ASSERT (length == strlen (expected));
- ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
- free (result);
+ for (o = 0; o < 2; o++)
+ {
+ size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
+ char *result = NULL;
+ size_t length = 0;
+ int retval = mem_iconveh (input, strlen (input),
+ "UTF-8", "ISO-8859-1",
+ handler,
+ offsets,
+ &result, &length);
+ ASSERT (retval == 0);
+ ASSERT (length == strlen (expected));
+ ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
+ if (o)
+ {
+ for (i = 0; i < 41; i++)
+ ASSERT (offsets[i] == (i < 1 ? i :
+ i == 1 ? (size_t)(-1) :
+ i < 13 ? i - 1 :
+ i == 13 ? (size_t)(-1) :
+ i < 20 ? i - 2 :
+ i == 20 ? (size_t)(-1) :
+ i < 40 ? i - 3 :
+ (size_t)(-1)));
+ ASSERT (offsets[41] == MAGIC);
+ free (offsets);
+ }
+ free (result);
+ }
}
/* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */
@@ -446,36 +631,61 @@ main ()
{
enum iconv_ilseq_handler handler = handlers[h];
static const char input[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */
- char *result = NULL;
- size_t length = 0;
- int retval = mem_iconveh (input, strlen (input),
- "UTF-8", "ISO-8859-1",
- handler,
- &result, &length);
- switch (handler)
+ for (o = 0; o < 2; o++)
{
- case iconveh_error:
- ASSERT (retval == -1 && errno == EILSEQ);
- ASSERT (result == NULL);
- break;
- case iconveh_question_mark:
- {
- static const char expected[] = "Rafa? Maszkowski";
- ASSERT (retval == 0);
- ASSERT (length == strlen (expected));
- ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
- free (result);
- }
- break;
- case iconveh_escape_sequence:
- {
- static const char expected[] = "Rafa\\u0142 Maszkowski";
- ASSERT (retval == 0);
- ASSERT (length == strlen (expected));
- ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
- free (result);
- }
- break;
+ size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
+ char *result = NULL;
+ size_t length = 0;
+ int retval = mem_iconveh (input, strlen (input),
+ "UTF-8", "ISO-8859-1",
+ handler,
+ offsets,
+ &result, &length);
+ switch (handler)
+ {
+ case iconveh_error:
+ ASSERT (retval == -1 && errno == EILSEQ);
+ ASSERT (result == NULL);
+ if (o)
+ free (offsets);
+ break;
+ case iconveh_question_mark:
+ {
+ static const char expected[] = "Rafa? Maszkowski";
+ ASSERT (retval == 0);
+ ASSERT (length == strlen (expected));
+ ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
+ if (o)
+ {
+ for (i = 0; i < 17; i++)
+ ASSERT (offsets[i] == (i < 5 ? i :
+ i == 5 ? (size_t)(-1) :
+ i - 1));
+ ASSERT (offsets[17] == MAGIC);
+ free (offsets);
+ }
+ free (result);
+ }
+ break;
+ case iconveh_escape_sequence:
+ {
+ static const char expected[] = "Rafa\\u0142 Maszkowski";
+ ASSERT (retval == 0);
+ ASSERT (length == strlen (expected));
+ ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
+ if (o)
+ {
+ for (i = 0; i < 17; i++)
+ ASSERT (offsets[i] == (i < 5 ? i :
+ i == 5 ? (size_t)(-1) :
+ i + 4));
+ ASSERT (offsets[17] == MAGIC);
+ free (offsets);
+ }
+ free (result);
+ }
+ break;
+ }
}
}
@@ -484,16 +694,27 @@ main ()
{
enum iconv_ilseq_handler handler = handlers[h];
static const char input[] = "\342";
- char *result = NULL;
- size_t length = 0;
- int retval = mem_iconveh (input, strlen (input),
- "UTF-8", "ISO-8859-1",
- handler,
- &result, &length);
- ASSERT (retval == 0);
- ASSERT (length == 0);
- if (result != NULL)
- free (result);
+ for (o = 0; o < 2; o++)
+ {
+ size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
+ char *result = NULL;
+ size_t length = 0;
+ int retval = mem_iconveh (input, strlen (input),
+ "UTF-8", "ISO-8859-1",
+ handler,
+ offsets,
+ &result, &length);
+ ASSERT (retval == 0);
+ ASSERT (length == 0);
+ if (o)
+ {
+ ASSERT (offsets[0] == 0);
+ ASSERT (offsets[1] == MAGIC);
+ free (offsets);
+ }
+ if (result != NULL)
+ free (result);
+ }
}
/* ------------------------- Test str_iconveh() ------------------------- */