X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2523e9b70044baa92a1c63ffdfe179c28ad53536..86e37f69bc90fc4c4714de0eda219995f3a62056:/src/common/mimecmn.cpp diff --git a/src/common/mimecmn.cpp b/src/common/mimecmn.cpp index 1db9b7176c..bbd1d1e86d 100644 --- a/src/common/mimecmn.cpp +++ b/src/common/mimecmn.cpp @@ -35,6 +35,7 @@ #include "wx/intl.h" #include "wx/log.h" #include "wx/module.h" + #include "wx/crt.h" #endif //WX_PRECOMP #include "wx/file.h" @@ -111,15 +112,12 @@ wxString wxMimeTypeCommands::GetVerbCmd(size_t n) const // wxFileTypeInfo // ---------------------------------------------------------------------------- -void wxFileTypeInfo::VarArgInit(const wxString& mimeType, - const wxString& openCmd, - const wxString& printCmd, - const wxString& 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; @@ -146,9 +144,46 @@ void wxFileTypeInfo::VarArgInit(const wxString& mimeType, 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) @@ -601,7 +636,18 @@ wxFileType * wxMimeTypesManager::GetFileTypeFromExtension(const wxString& ext) { EnsureImpl(); - wxFileType *ft = m_impl->GetFileTypeFromExtension(ext); + + wxString::const_iterator i = ext.begin(); + const wxString::const_iterator end = ext.end(); + wxString extWithoutDot; + if ( i != end && *i == '.' ) + extWithoutDot.assign(++i, ext.end()); + else + extWithoutDot = ext; + + wxCHECK_MSG( !ext.empty(), NULL, _T("extension can't be empty") ); + + wxFileType *ft = m_impl->GetFileTypeFromExtension(extWithoutDot); if ( !ft ) { // check the fallbacks