All pastes #221846 Raw Edit

gisburn

public c v1 · immutable
#221846 ·published 2006-10-25 22:17 UTC
rendered paste body
#include <stdlib.h>#include <stdio.h>#include <iconv.h>wchar_t unicodetowc(unsigned long unicode_value, wchar_t fallback_char){    iconv_t icd;    const char *inbuf_ptr;    char       *outpuf_ptr;    char        iconv_outbuf[32];    size_t      iconv_inlen,                iconv_outlen,                iconv_res;    wchar_t     res[2];    int         mbtowc_res;        icd = iconv_open("ISO8859-1", "UCS-4");    if (icd == (iconv_t)-1)    {        fprintf(stderr, "iconv_open() failed\n");        return fallback_char;    }    inbuf_ptr = (char *)&unicode_value;    outpuf_ptr = iconv_outbuf;    iconv_inlen = sizeof(unicode_value);    iconv_outlen = sizeof(iconv_outbuf);        iconv_res = iconv(icd,          &inbuf_ptr,  &iconv_inlen,          &outpuf_ptr, &iconv_outlen);    fprintf(stderr, "iconv() returned %d, iconv_inlen=%d, iconv_outlen=%d\n",            iconv_res,            (int)iconv_inlen,            (int)iconv_outlen);    if (iconv_res == -1)    {        fprintf(stderr, "iconv() failed\n");        return fallback_char;    }         fwrite(outpuf_ptr, 1, sizeof(iconv_outbuf) - iconv_outlen, stdout);         /* terminate output string */    *(iconv_outbuf + (sizeof(iconv_outbuf) - iconv_outlen)) = '\0';    mbtowc_res = mbtowc(res, outpuf_ptr, 1);    if (mbtowc_res == -1)    {        fprintf(stderr, "mbtowc() failed\n");        return fallback_char;    }        fprintf(stderr, "mbtowc returned %d, '%s'\n", mbtowc_res, outpuf_ptr);         return res[0];}int main( int ac , char *av[] ){    puts("# start.");        printf("## -%C-\n", unicodetowc('a', '?'));        puts("# done.");    return EXIT_SUCCESS;}