Blame iconvdata/bug-iconv2.c

Packit 6c4009
/* Test case by Akira Higuchi <a@kondara.org>.  */
Packit 6c4009
Packit 6c4009
#include <stdio.h>
Packit 6c4009
#include <stdlib.h>
Packit 6c4009
#include <iconv.h>
Packit 6c4009
Packit 6c4009
int
Packit 6c4009
main (void)
Packit 6c4009
{
Packit 6c4009
  const char *dummy_codesets[] =
Packit 6c4009
  {
Packit 6c4009
    "ISO_8859-1", "ISO_8859-2", "ISO_8859-3", "ISO_8859-4",
Packit 6c4009
    "ISO_8859-5", "ISO_8859-6", "ISO_8859-7", "ISO_8859-8"
Packit 6c4009
  };
Packit 6c4009
  iconv_t dummy_cd[8], cd_a;
Packit 6c4009
  int i;
Packit 6c4009
  char buffer[1024], *to = buffer;
Packit 6c4009
  char *from = (char *) "foobar";
Packit 6c4009
  size_t to_left = 1024, from_left = 6;
Packit 6c4009
Packit 6c4009
  /* load dummy modules */
Packit 6c4009
  for (i = 0; i < 8; i++)
Packit 6c4009
    if ((dummy_cd[i] = iconv_open (dummy_codesets[i], "UTF8")) == (iconv_t) -1)
Packit 6c4009
      exit (1);
Packit 6c4009
Packit 6c4009
  /* load a module... */
Packit 6c4009
  if ((cd_a = iconv_open ("EUC-JP", "UTF8")) == (iconv_t) -1)
Packit 6c4009
    exit (1);
Packit 6c4009
  /* and close it once. we'll reload this later */
Packit 6c4009
  iconv_close (cd_a);
Packit 6c4009
Packit 6c4009
  /* unload dummy modules */
Packit 6c4009
  for (i = 0; i < 8; i++)
Packit 6c4009
    iconv_close (dummy_cd[i]);
Packit 6c4009
Packit 6c4009
  /* load the module again */
Packit 6c4009
  if ((cd_a = iconv_open ("EUC-JP", "UTF8")) == (iconv_t) -1)
Packit 6c4009
    exit (1);
Packit 6c4009
Packit 6c4009
  puts ("This used to crash");
Packit 6c4009
  printf ("%zd\n", iconv (cd_a, &from, &from_left, &to, &to_left));
Packit 6c4009
  iconv_close (cd_a);
Packit 6c4009
Packit 6c4009
  puts ("works now");
Packit 6c4009
Packit 6c4009
  return 0;
Packit 6c4009
}