--- psiconv/trunk/lib/psiconv/misc.c 2000/12/13 16:30:21 63 +++ psiconv/trunk/lib/psiconv/misc.c 2004/02/04 12:19:09 196 @@ -1,6 +1,6 @@ /* parse_aux.c - Part of psiconv, a PSION 5 file formats converter - Copyright (c) 1999, 2000 Frodo Looijaard + Copyright (c) 1999-2004 Frodo Looijaard This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,21 +18,44 @@ */ #include "config.h" +#include "compat.h" #include #include #include +#include +#include "common.h" -char *psiconv_make_printable(const char *s) +#ifdef DMALLOC +#include +#endif + + +char *psiconv_make_printable(const psiconv_config config, + const psiconv_string_t input) { - int i; - char *res = malloc(strlen(s) + 1); - if (!res) + int i,len; + psiconv_u8 *intermed; + char *output; + int res; + + if ((res = psiconv_unicode_to_chars(config,input,&intermed))) return NULL; - for (i = 0; i < strlen(s); i ++) - if (s[i] < 0x20 || s[i] >= 0x7f) - res[i] = '.'; + + len = 0; + while (intermed[len]) + len++; + + if (!(output = malloc(sizeof(*output) * (len + 1)))) { + free(intermed); + return NULL; + } + + for (i = 0; i < len; i ++) + if (intermed[i] < 0x20 || intermed[i] >= 0x7f) + output[i] = '.'; else - res[i] = s[i]; - res[strlen(s)] = 0; - return res; + output[i] = intermed[i]; + output[i] = 0; + free(intermed); + return output; }