root/maint/gnulib/tests/test-striconveha.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. new_offsets
  2. main

   1 /* Test of character set conversion with error handling and autodetection.
   2    Copyright (C) 2007-2021 Free Software Foundation, Inc.
   3 
   4    This program is free software: you can redistribute it and/or modify
   5    it under the terms of the GNU General Public License as published by
   6    the Free Software Foundation; either version 3 of the License, or
   7    (at your option) any later version.
   8 
   9    This program is distributed in the hope that it will be useful,
  10    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12    GNU General Public License for more details.
  13 
  14    You should have received a copy of the GNU General Public License
  15    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
  16 
  17 /* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
  18 
  19 #include <config.h>
  20 
  21 #include "striconveha.h"
  22 
  23 #if HAVE_ICONV
  24 # include <iconv.h>
  25 #endif
  26 
  27 #include <errno.h>
  28 #include <stdlib.h>
  29 #include <string.h>
  30 
  31 #include "macros.h"
  32 extern int iconv_supports_encoding (const char *encoding);
  33 
  34 /* Magic number for detecting bounds violations.  */
  35 #define MAGIC 0x1983EFF1
  36 
  37 static size_t *
  38 new_offsets (size_t n)
     /* [previous][next][first][last][top][bottom][index][help] */
  39 {
  40   size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t));
  41   offsets[n] = MAGIC;
  42   return offsets;
  43 }
  44 
  45 int
  46 main ()
     /* [previous][next][first][last][top][bottom][index][help] */
  47 {
  48 #if HAVE_ICONV
  49   static enum iconv_ilseq_handler handlers[] =
  50     { iconveh_error, iconveh_question_mark, iconveh_escape_sequence };
  51   size_t h;
  52   size_t o;
  53   size_t i;
  54 
  55   /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1,
  56      ISO-8859-2, and UTF-8.  */
  57 
  58   /* ------------------------- Test mem_iconveha() ------------------------- */
  59 
  60   /* Test conversion from ISO-8859-2 to ISO-8859-1 with no errors.  */
  61   for (h = 0; h < SIZEOF (handlers); h++)
  62     {
  63       enum iconv_ilseq_handler handler = handlers[h];
  64       static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
  65       static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
  66       for (o = 0; o < 2; o++)
  67         {
  68           size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
  69           char *result = NULL;
  70           size_t length = 0;
  71           int retval = mem_iconveha (input, strlen (input),
  72                                      "ISO-8859-2", "ISO-8859-1",
  73                                      false, handler,
  74                                      offsets,
  75                                      &result, &length);
  76           ASSERT (retval == 0);
  77           ASSERT (length == strlen (expected));
  78           ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
  79           if (o)
  80             {
  81               for (i = 0; i < 37; i++)
  82                 ASSERT (offsets[i] == i);
  83               ASSERT (offsets[37] == MAGIC);
  84               free (offsets);
  85             }
  86           free (result);
  87         }
  88     }
  89 
  90   /* Test conversion from ISO-8859-2 to ISO-8859-1 with EILSEQ.  */
  91   for (h = 0; h < SIZEOF (handlers); h++)
  92     {
  93       enum iconv_ilseq_handler handler = handlers[h];
  94       static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */
  95       for (o = 0; o < 2; o++)
  96         {
  97           size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
  98           char *result = NULL;
  99           size_t length = 0;
 100           int retval = mem_iconveha (input, strlen (input),
 101                                      "ISO-8859-2", "ISO-8859-1",
 102                                      false, handler,
 103                                      offsets,
 104                                      &result, &length);
 105           switch (handler)
 106             {
 107             case iconveh_error:
 108               ASSERT (retval == -1 && errno == EILSEQ);
 109               ASSERT (result == NULL);
 110               if (o)
 111                 free (offsets);
 112               break;
 113             case iconveh_question_mark:
 114               {
 115                 static const char expected[] = "Rafa? Maszkowski";
 116                 ASSERT (retval == 0);
 117                 ASSERT (length == strlen (expected));
 118                 ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
 119                 if (o)
 120                   {
 121                     for (i = 0; i < 16; i++)
 122                       ASSERT (offsets[i] == i);
 123                     ASSERT (offsets[16] == MAGIC);
 124                     free (offsets);
 125                   }
 126                 free (result);
 127               }
 128               break;
 129             case iconveh_escape_sequence:
 130               {
 131                 static const char expected[] = "Rafa\\u0142 Maszkowski";
 132                 ASSERT (retval == 0);
 133                 ASSERT (length == strlen (expected));
 134                 ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
 135                 if (o)
 136                   {
 137                     for (i = 0; i < 16; i++)
 138                       ASSERT (offsets[i] == (i < 5 ? i :
 139                                              i + 5));
 140                     ASSERT (offsets[16] == MAGIC);
 141                     free (offsets);
 142                   }
 143                 free (result);
 144               }
 145               break;
 146             }
 147         }
 148     }
 149 
 150   /* Test conversion from ISO-8859-1 to UTF-8 with no errors.  */
 151   for (h = 0; h < SIZEOF (handlers); h++)
 152     {
 153       enum iconv_ilseq_handler handler = handlers[h];
 154       static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
 155       static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237";
 156       for (o = 0; o < 2; o++)
 157         {
 158           size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
 159           char *result = NULL;
 160           size_t length = 0;
 161           int retval = mem_iconveha (input, strlen (input),
 162                                      "ISO-8859-1", "UTF-8",
 163                                      false, handler,
 164                                      offsets,
 165                                      &result, &length);
 166           ASSERT (retval == 0);
 167           ASSERT (length == strlen (expected));
 168           ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
 169           if (o)
 170             {
 171               for (i = 0; i < 37; i++)
 172                 ASSERT (offsets[i] == (i < 1 ? i :
 173                                        i < 12 ? i + 1 :
 174                                        i < 18 ? i + 2 :
 175                                        i + 3));
 176               ASSERT (offsets[37] == MAGIC);
 177               free (offsets);
 178             }
 179           free (result);
 180         }
 181     }
 182 
 183   /* Test conversion from UTF-8 to ISO-8859-1 with no errors.  */
 184   for (h = 0; h < SIZEOF (handlers); h++)
 185     {
 186       enum iconv_ilseq_handler handler = handlers[h];
 187       static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237";
 188       static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
 189       for (o = 0; o < 2; o++)
 190         {
 191           size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
 192           char *result = NULL;
 193           size_t length = 0;
 194           int retval = mem_iconveha (input, strlen (input),
 195                                      "UTF-8", "ISO-8859-1",
 196                                      false, handler,
 197                                      offsets,
 198                                      &result, &length);
 199           ASSERT (retval == 0);
 200           ASSERT (length == strlen (expected));
 201           ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
 202           if (o)
 203             {
 204               for (i = 0; i < 41; i++)
 205                 ASSERT (offsets[i] == (i < 1 ? i :
 206                                        i == 1 ? (size_t)(-1) :
 207                                        i < 13 ? i - 1 :
 208                                        i == 13 ? (size_t)(-1) :
 209                                        i < 20 ? i - 2 :
 210                                        i == 20 ? (size_t)(-1) :
 211                                        i < 40 ? i - 3 :
 212                                        (size_t)(-1)));
 213               ASSERT (offsets[41] == MAGIC);
 214               free (offsets);
 215             }
 216           free (result);
 217         }
 218     }
 219 
 220   /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ.  */
 221   for (h = 0; h < SIZEOF (handlers); h++)
 222     {
 223       enum iconv_ilseq_handler handler = handlers[h];
 224       static const char input[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */
 225       for (o = 0; o < 2; o++)
 226         {
 227           size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
 228           char *result = NULL;
 229           size_t length = 0;
 230           int retval = mem_iconveha (input, strlen (input),
 231                                      "UTF-8", "ISO-8859-1",
 232                                      false, handler,
 233                                      offsets,
 234                                      &result, &length);
 235           switch (handler)
 236             {
 237             case iconveh_error:
 238               ASSERT (retval == -1 && errno == EILSEQ);
 239               ASSERT (result == NULL);
 240               if (o)
 241                 free (offsets);
 242               break;
 243             case iconveh_question_mark:
 244               {
 245                 static const char expected[] = "Rafa? Maszkowski";
 246                 ASSERT (retval == 0);
 247                 ASSERT (length == strlen (expected));
 248                 ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
 249                 if (o)
 250                   {
 251                     for (i = 0; i < 17; i++)
 252                       ASSERT (offsets[i] == (i < 5 ? i :
 253                                              i == 5 ? (size_t)(-1) :
 254                                              i - 1));
 255                     ASSERT (offsets[17] == MAGIC);
 256                     free (offsets);
 257                   }
 258                 free (result);
 259               }
 260               break;
 261             case iconveh_escape_sequence:
 262               {
 263                 static const char expected[] = "Rafa\\u0142 Maszkowski";
 264                 ASSERT (retval == 0);
 265                 ASSERT (length == strlen (expected));
 266                 ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
 267                 if (o)
 268                   {
 269                     for (i = 0; i < 17; i++)
 270                       ASSERT (offsets[i] == (i < 5 ? i :
 271                                              i == 5 ? (size_t)(-1) :
 272                                              i + 4));
 273                     ASSERT (offsets[17] == MAGIC);
 274                     free (offsets);
 275                   }
 276                 free (result);
 277               }
 278               break;
 279             }
 280         }
 281     }
 282 
 283   /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL.  */
 284   for (h = 0; h < SIZEOF (handlers); h++)
 285     {
 286       enum iconv_ilseq_handler handler = handlers[h];
 287       static const char input[] = "\342";
 288       for (o = 0; o < 2; o++)
 289         {
 290           size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
 291           char *result = NULL;
 292           size_t length = 0;
 293           int retval = mem_iconveha (input, strlen (input),
 294                                      "UTF-8", "ISO-8859-1",
 295                                      false, handler,
 296                                      offsets,
 297                                      &result, &length);
 298           ASSERT (retval == 0);
 299           ASSERT (length == 0);
 300           if (o)
 301             {
 302               ASSERT (offsets[0] == 0);
 303               ASSERT (offsets[1] == MAGIC);
 304               free (offsets);
 305             }
 306           free (result);
 307         }
 308     }
 309 
 310   /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2.  */
 311 # if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun)
 312   if (iconv_supports_encoding ("ISO-2022-JP-2"))
 313     {
 314       /* Test conversions from autodetect_jp to UTF-8.  */
 315       for (h = 0; h < SIZEOF (handlers); h++)
 316         {
 317           enum iconv_ilseq_handler handler = handlers[h];
 318           static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */
 319           static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */
 320           for (o = 0; o < 2; o++)
 321             {
 322               size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
 323               char *result = NULL;
 324               size_t length = 0;
 325               int retval = mem_iconveha (input, strlen (input),
 326                                          "autodetect_jp", "UTF-8",
 327                                          false, handler,
 328                                          offsets,
 329                                          &result, &length);
 330               ASSERT (retval == 0);
 331               ASSERT (length == strlen (expected));
 332               ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
 333               if (o)
 334                 {
 335                   for (i = 0; i < 10; i++)
 336                     ASSERT (offsets[i] == ((i % 2) == 0 ? (i / 2) * 3 : (size_t)(-1)));
 337                   ASSERT (offsets[10] == MAGIC);
 338                   free (offsets);
 339                 }
 340               free (result);
 341             }
 342         }
 343       for (h = 0; h < SIZEOF (handlers); h++)
 344         {
 345           enum iconv_ilseq_handler handler = handlers[h];
 346           static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */
 347           static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */
 348           for (o = 0; o < 2; o++)
 349             {
 350               size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
 351               char *result = NULL;
 352               size_t length = 0;
 353               int retval = mem_iconveha (input, strlen (input),
 354                                          "autodetect_jp", "UTF-8",
 355                                          false, handler,
 356                                          offsets,
 357                                          &result, &length);
 358               ASSERT (retval == 0);
 359               ASSERT (length == strlen (expected));
 360               ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
 361               if (o)
 362                 {
 363                   for (i = 0; i < 10; i++)
 364                     ASSERT (offsets[i] == ((i % 2) == 0 ? (i / 2) * 3 : (size_t)(-1)));
 365                   ASSERT (offsets[10] == MAGIC);
 366                   free (offsets);
 367                 }
 368               free (result);
 369             }
 370         }
 371       for (h = 0; h < SIZEOF (handlers); h++)
 372         {
 373           enum iconv_ilseq_handler handler = handlers[h];
 374           static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */
 375           static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */
 376           for (o = 0; o < 2; o++)
 377             {
 378               size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
 379               char *result = NULL;
 380               size_t length = 0;
 381               int retval = mem_iconveha (input, strlen (input),
 382                                          "autodetect_jp", "UTF-8",
 383                                          false, handler,
 384                                          offsets,
 385                                          &result, &length);
 386               ASSERT (retval == 0);
 387               ASSERT (length == strlen (expected));
 388               ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
 389               if (o)
 390                 {
 391                   for (i = 0; i < 16; i++)
 392                     ASSERT (offsets[i] == (i == 0 ? 0 :
 393                                            i == 5 ? 3 :
 394                                            i == 7 ? 6 :
 395                                            i == 9 ? 9 :
 396                                            i == 11 ? 12 :
 397                                            i == 13 ? 15 :
 398                                            (size_t)(-1)));
 399                   ASSERT (offsets[16] == MAGIC);
 400                   free (offsets);
 401                 }
 402               free (result);
 403             }
 404         }
 405     }
 406 # endif
 407 
 408 # if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) && !defined __UCLIBC__) || _LIBICONV_VERSION >= 0x0105
 409   /* Test conversion from UTF-8 to ISO-8859-1 with transliteration.  */
 410   for (h = 0; h < SIZEOF (handlers); h++)
 411     {
 412       enum iconv_ilseq_handler handler = handlers[h];
 413       static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */
 414       static const char expected[] = "Costs: 27 EUR";
 415       for (o = 0; o < 2; o++)
 416         {
 417           size_t *offsets = (o ? new_offsets (strlen (input)) : NULL);
 418           char *result = NULL;
 419           size_t length = 0;
 420           int retval = mem_iconveha (input, strlen (input),
 421                                      "UTF-8", "ISO-8859-1",
 422                                      true, handler,
 423                                      offsets,
 424                                      &result, &length);
 425           ASSERT (retval == 0);
 426           ASSERT (length == strlen (expected));
 427           ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0);
 428           if (o)
 429             {
 430               for (i = 0; i < 13; i++)
 431                 ASSERT (offsets[i] == (i < 11 ? i : (size_t)(-1)));
 432               ASSERT (offsets[13] == MAGIC);
 433               free (offsets);
 434             }
 435           free (result);
 436         }
 437     }
 438 # endif
 439 
 440   /* ------------------------- Test str_iconveha() ------------------------- */
 441 
 442   /* Test conversion from ISO-8859-2 to ISO-8859-1 with no errors.  */
 443   for (h = 0; h < SIZEOF (handlers); h++)
 444     {
 445       enum iconv_ilseq_handler handler = handlers[h];
 446       static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
 447       static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
 448       char *result = str_iconveha (input, "ISO-8859-2", "ISO-8859-1", false, handler);
 449       ASSERT (result != NULL);
 450       ASSERT (strcmp (result, expected) == 0);
 451       free (result);
 452     }
 453 
 454   /* Test conversion from ISO-8859-2 to ISO-8859-1 with EILSEQ.  */
 455   for (h = 0; h < SIZEOF (handlers); h++)
 456     {
 457       enum iconv_ilseq_handler handler = handlers[h];
 458       static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */
 459       char *result = str_iconveha (input, "ISO-8859-2", "ISO-8859-1", false, handler);
 460       switch (handler)
 461         {
 462         case iconveh_error:
 463           ASSERT (result == NULL && errno == EILSEQ);
 464           break;
 465         case iconveh_question_mark:
 466           {
 467             static const char expected[] = "Rafa? Maszkowski";
 468             ASSERT (result != NULL);
 469             ASSERT (strcmp (result, expected) == 0);
 470             free (result);
 471           }
 472           break;
 473         case iconveh_escape_sequence:
 474           {
 475             static const char expected[] = "Rafa\\u0142 Maszkowski";
 476             ASSERT (result != NULL);
 477             ASSERT (strcmp (result, expected) == 0);
 478             free (result);
 479           }
 480           break;
 481         }
 482     }
 483 
 484   /* Test conversion from ISO-8859-1 to UTF-8 with no errors.  */
 485   for (h = 0; h < SIZEOF (handlers); h++)
 486     {
 487       enum iconv_ilseq_handler handler = handlers[h];
 488       static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
 489       static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237";
 490       char *result = str_iconveha (input, "ISO-8859-1", "UTF-8", false, handler);
 491       ASSERT (result != NULL);
 492       ASSERT (strcmp (result, expected) == 0);
 493       free (result);
 494     }
 495 
 496   /* Test conversion from UTF-8 to ISO-8859-1 with no errors.  */
 497   for (h = 0; h < SIZEOF (handlers); h++)
 498     {
 499       enum iconv_ilseq_handler handler = handlers[h];
 500       static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237";
 501       static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
 502       char *result = str_iconveha (input, "UTF-8", "ISO-8859-1", false, handler);
 503       ASSERT (result != NULL);
 504       ASSERT (strcmp (result, expected) == 0);
 505       free (result);
 506     }
 507 
 508   /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ.  */
 509   for (h = 0; h < SIZEOF (handlers); h++)
 510     {
 511       enum iconv_ilseq_handler handler = handlers[h];
 512       static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */
 513       char *result = str_iconveha (input, "UTF-8", "ISO-8859-1", false, handler);
 514       switch (handler)
 515         {
 516         case iconveh_error:
 517           ASSERT (result == NULL && errno == EILSEQ);
 518           break;
 519         case iconveh_question_mark:
 520           {
 521             static const char expected[] = "Costs: 27 ?";
 522             ASSERT (result != NULL);
 523             ASSERT (strcmp (result, expected) == 0);
 524             free (result);
 525           }
 526           break;
 527         case iconveh_escape_sequence:
 528           {
 529             static const char expected[] = "Costs: 27 \\u20AC";
 530             ASSERT (result != NULL);
 531             ASSERT (strcmp (result, expected) == 0);
 532             free (result);
 533           }
 534           break;
 535         }
 536     }
 537 
 538   /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL.  */
 539   for (h = 0; h < SIZEOF (handlers); h++)
 540     {
 541       enum iconv_ilseq_handler handler = handlers[h];
 542       static const char input[] = "\342";
 543       char *result = str_iconveha (input, "UTF-8", "ISO-8859-1", false, handler);
 544       ASSERT (result != NULL);
 545       ASSERT (strcmp (result, "") == 0);
 546       free (result);
 547     }
 548 
 549   /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2.  */
 550 # if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun)
 551   if (iconv_supports_encoding ("ISO-2022-JP-2"))
 552     {
 553       /* Test conversions from autodetect_jp to UTF-8.  */
 554       for (h = 0; h < SIZEOF (handlers); h++)
 555         {
 556           enum iconv_ilseq_handler handler = handlers[h];
 557           static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */
 558           static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */
 559           char *result = str_iconveha (input, "autodetect_jp", "UTF-8", false, handler);
 560           ASSERT (result != NULL);
 561           ASSERT (strcmp (result, expected) == 0);
 562           free (result);
 563         }
 564       for (h = 0; h < SIZEOF (handlers); h++)
 565         {
 566           enum iconv_ilseq_handler handler = handlers[h];
 567           static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */
 568           static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */
 569           char *result = str_iconveha (input, "autodetect_jp", "UTF-8", false, handler);
 570           ASSERT (result != NULL);
 571           ASSERT (strcmp (result, expected) == 0);
 572           free (result);
 573         }
 574       for (h = 0; h < SIZEOF (handlers); h++)
 575         {
 576           enum iconv_ilseq_handler handler = handlers[h];
 577           static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */
 578           static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */
 579           char *result = str_iconveha (input, "autodetect_jp", "UTF-8", false, handler);
 580           ASSERT (result != NULL);
 581           ASSERT (strcmp (result, expected) == 0);
 582           free (result);
 583         }
 584     }
 585 # endif
 586 
 587 # if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) && !defined __UCLIBC__) || _LIBICONV_VERSION >= 0x0105
 588   /* Test conversion from UTF-8 to ISO-8859-1 with transliteration.  */
 589   for (h = 0; h < SIZEOF (handlers); h++)
 590     {
 591       enum iconv_ilseq_handler handler = handlers[h];
 592       static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */
 593       static const char expected[] = "Costs: 27 EUR";
 594       char *result = str_iconveha (input, "UTF-8", "ISO-8859-1", true, handler);
 595       ASSERT (result != NULL);
 596       ASSERT (strcmp (result, expected) == 0);
 597       free (result);
 598     }
 599 # endif
 600 
 601 #endif
 602 
 603   return 0;
 604 }

/* [previous][next][first][last][top][bottom][index][help] */