Commit 0ad2d338 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

utf8_vfprintf(): simplify

parent 130ff9a3
...@@ -197,36 +197,19 @@ char *ToLocaleDup (const char *utf8) ...@@ -197,36 +197,19 @@ char *ToLocaleDup (const char *utf8)
#endif #endif
} }
/**
* Formats an UTF-8 string as vasprintf(), then print it to stdout, with
* appropriate conversion to local encoding.
*/
static int utf8_vasprintf( char **str, const char *fmt, va_list ap )
{
char *utf8;
int res = vasprintf( &utf8, fmt, ap );
if( res == -1 )
return -1;
#ifdef ASSUME_UTF8
*str = utf8;
#else
*str = ToLocaleDup( utf8 );
free( utf8 );
#endif
return res;
}
/** /**
* Formats an UTF-8 string as vfprintf(), then print it, with * Formats an UTF-8 string as vfprintf(), then print it, with
* appropriate conversion to local encoding. * appropriate conversion to local encoding.
*/ */
int utf8_vfprintf( FILE *stream, const char *fmt, va_list ap ) int utf8_vfprintf( FILE *stream, const char *fmt, va_list ap )
{ {
#ifdef ASSUME_UTF8
return vfprintf (stream, fmt, ap);
#else
char *str; char *str;
int res; int res;
#if defined( WIN32 ) && !defined( UNDER_CE ) # if defined( WIN32 ) && !defined( UNDER_CE )
/* Writing to the console is a lot of fun on Microsoft Windows. /* Writing to the console is a lot of fun on Microsoft Windows.
* If you use the standard I/O functions, you must use the OEM code page, * If you use the standard I/O functions, you must use the OEM code page,
* which is different from the usual ANSI code page. Or maybe not, if the * which is different from the usual ANSI code page. Or maybe not, if the
...@@ -259,15 +242,19 @@ int utf8_vfprintf( FILE *stream, const char *fmt, va_list ap ) ...@@ -259,15 +242,19 @@ int utf8_vfprintf( FILE *stream, const char *fmt, va_list ap )
free (str); free (str);
return res; return res;
} }
#endif # endif
res = utf8_vasprintf (&str, fmt, ap); res = vasprintf (&str, fmt, ap);
if (unlikely(res == -1)) if (unlikely(res == -1))
return -1; return -1;
fputs( str, stream ); char *ansi = ToLocaleDup (str);
free( str ); free (str);
fputs (ansi, stream);
free (ansi);
return res; return res;
#endif
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment