X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/84fff0b395adcfecd09dd65389ba7c1c47dd7eee..f861258fcace51a1aaba2f31c7498b3ba9e31371:/src/common/wxchar.cpp diff --git a/src/common/wxchar.cpp b/src/common/wxchar.cpp index 1307daaf50..68acc24013 100644 --- a/src/common/wxchar.cpp +++ b/src/common/wxchar.cpp @@ -24,6 +24,9 @@ #pragma hdrstop #endif +#define _ISOC9X_SOURCE 1 // to get vsscanf() +#define _BSD_SOURCE 1 // to still get strdup() + #include #include #include @@ -39,6 +42,10 @@ size_t wxMB2WC(wchar_t *buf, const char *psz, size_t n) { if (buf) { + if (!n || !*psz) { + if (n) *buf = _T('\0'); + return 0; + } return mbstowcs(buf, psz, n); } @@ -57,6 +64,11 @@ size_t wxMB2WC(wchar_t *buf, const char *psz, size_t n) size_t wxWC2MB(char *buf, const wchar_t *pwz, size_t n) { if (buf) { + if (!n || !*pwz) { + // glibc2.1 chokes on null input + if (n) *buf = '\0'; + return 0; + } return wcstombs(buf, pwz, n); } @@ -137,12 +149,12 @@ int WXDLLEXPORT wxFprintf(FILE *stream, const wxChar *fmt, ...) int ret; va_start(argptr, fmt); - ret = wxFvprintf(stream, fmt, argptr); + ret = wxVfprintf(stream, fmt, argptr); va_end(argptr); return ret; } -int WXDLLEXPORT wxFvprintf(FILE *stream, const wxChar *fmt, va_list argptr) +int WXDLLEXPORT wxVfprintf(FILE *stream, const wxChar *fmt, va_list argptr) { wxString str; str.PrintfV(fmt,argptr); @@ -170,6 +182,26 @@ int WXDLLEXPORT wxVsprintf(wxChar *buf, const wxChar *fmt, va_list argptr) wxStrcpy(buf,str.c_str()); return str.Len(); } + +int WXDLLEXPORT wxSscanf(const wxChar *buf, const wxChar *fmt, ...) +{ + va_list argptr; + int ret; + + va_start(argptr, fmt); + ret = wxVsscanf(buf, fmt, argptr); + va_end(argptr); + return ret; +} + +int WXDLLEXPORT wxVsscanf(const wxChar *buf, const wxChar *fmt, va_list argptr) +{ + int ret; + // this will work only for numeric conversion! Strings will not be converted correctly + // hopefully this is all we'll need + ret = vsscanf(wxConv_libc.cWX2MB(buf), wxConv_libc.cWX2MB(fmt), argptr); + return ret; +} #endif #ifndef wxAtof