X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bde733b0c646954653799d75d839960af3bd0d39..d3ae69de983f61c1ede821e32c18ae3a8bd8c70c:/src/common/mimecmn.cpp diff --git a/src/common/mimecmn.cpp b/src/common/mimecmn.cpp index 9325fb81c3..b24cc65838 100644 --- a/src/common/mimecmn.cpp +++ b/src/common/mimecmn.cpp @@ -111,18 +111,16 @@ wxString wxMimeTypeCommands::GetVerbCmd(size_t n) const // wxFileTypeInfo // ---------------------------------------------------------------------------- -wxFileTypeInfo::wxFileTypeInfo(const wxChar *mimeType, - const wxChar *openCmd, - const wxChar *printCmd, - const wxChar *desc, - ...) - : m_mimeType(mimeType), - m_openCmd(openCmd), - m_printCmd(printCmd), - m_desc(desc) +void wxFileTypeInfo::DoVarArgInit(const wxString& mimeType, + const wxString& openCmd, + const wxString& printCmd, + const wxString& desc, + va_list argptr) { - va_list argptr; - va_start(argptr, desc); + m_mimeType = mimeType; + m_openCmd = openCmd; + m_printCmd = printCmd; + m_desc = desc; for ( ;; ) { @@ -132,7 +130,7 @@ wxFileTypeInfo::wxFileTypeInfo(const wxChar *mimeType, #pragma warning(disable: 1684) #endif - const wxChar *ext = va_arg(argptr, const wxChar *); + wxArgNormalizedString ext(WX_VA_ARG_STRING(argptr)); #ifdef __INTELC__ #pragma warning(pop) @@ -143,11 +141,48 @@ wxFileTypeInfo::wxFileTypeInfo(const wxChar *mimeType, break; } - m_exts.Add(ext); + m_exts.Add(ext.GetString()); } +} + +// NB: DoVarArgInit uses WX_VA_ARG_STRING macro to extract the string and this +// macro interprets the argument as char* or wchar_t* depending on build +// (and in UTF8 build, on the current locale). Because only one of the +// vararg forms below is called and the decision about which one gets +// called depends on the same conditions WX_VA_ARG_STRING uses, we can +// implement both of them in the exact same way: + +#if !wxUSE_UTF8_LOCALE_ONLY +void wxFileTypeInfo::VarArgInitWchar(const wxChar *mimeType, + const wxChar *openCmd, + const wxChar *printCmd, + const wxChar *desc, + ...) +{ + va_list argptr; + va_start(argptr, desc); + + DoVarArgInit(mimeType, openCmd, printCmd, desc, argptr); + + va_end(argptr); +} +#endif // !wxUSE_UTF8_LOCALE_ONLY + +#if wxUSE_UNICODE_UTF8 +void wxFileTypeInfo::VarArgInitUtf8(const char *mimeType, + const char *openCmd, + const char *printCmd, + const char *desc, + ...) +{ + va_list argptr; + va_start(argptr, desc); + + DoVarArgInit(mimeType, openCmd, printCmd, desc, argptr); va_end(argptr); } +#endif // wxUSE_UNICODE_UTF8 wxFileTypeInfo::wxFileTypeInfo(const wxArrayString& sArray)