free (fcode);
static size_t convert_file_from_to (FILE *file,				    const char *fromcodes, const char *tocodes,				    char **fromcode, char **tocode, CONTENT *info){  char *fcode;  char **tcode;  const char *c, *c1;  size_t n, ret;  int ncodes, i, cn;  /* Count the tocodes */  ncodes = 0;  for (c = tocodes; c; c = c1 ? c1 + 1 : 0)  {    c1 = strchr (c, ':');    n = c1 ? c1 - c : strlen (c);    if (!n)      continue;    ++ncodes;  }  /* Copy them */  tcode = safe_malloc (ncodes * sizeof (char *));  for (c = tocodes, i = 0; c; c = c1 ? c1 + 1 : 0, i++)  {    c1 = strchr (c, ':');    n = c1 ? c1 - c : strlen (c);    if (!n)      continue;    tcode[i] = malloc (n+1);    memcpy (tcode[i], c, n), tcode[i][n] = '\0';  }  /* Try each fromcode in turn */  ret = (size_t)(-1);  for (c = fromcodes; c; c = c1 ? c1 + 1 : 0)  {    c1 = strchr (c, ':');    n = c1 ? c1 - c : strlen (c);    if (!n)      continue;    fcode = malloc (n+1);    memcpy (fcode, c, n), fcode[n] = '\0';    ret = convert_file_to (file, fcode, ncodes, (const char **)tcode,			   &cn, info);    if (ret != (size_t)(-1)) {      *fromcode = fcode;      *tocode = tcode[cn];      tcode[cn] = 0;      break;    }    free (fcode);  }  /* Free memory */  for (i = 0; i < ncodes; i++)    free (tcode[i]);  return ret;}