diff options
-rw-r--r-- | src/misc/blob.hpp | 2 | ||||
-rw-r--r-- | src/misc/str.hpp | 2 | ||||
-rw-r--r-- | src/misc/strapi.hpp | 29 | ||||
-rw-r--r-- | src/stdafx.h | 8 |
4 files changed, 30 insertions, 11 deletions
diff --git a/src/misc/blob.hpp b/src/misc/blob.hpp index 86d924daf..78cac0f72 100644 --- a/src/misc/blob.hpp +++ b/src/misc/blob.hpp @@ -59,7 +59,9 @@ protected: /** type used as class member */ union { bitem_t *m_pData; ///< ptr to the first byte of data +#if defined(HAS_WCHAR) wchar_t *m_pwData; ///< ptr to the first byte of data +#endif /* HAS_WCHAR */ CHdr *m_pHdr_1; ///< ptr just after the CHdr holding m_size and m_max_size } ptr_u; diff --git a/src/misc/str.hpp b/src/misc/str.hpp index 22276cb9d..e1138616a 100644 --- a/src/misc/str.hpp +++ b/src/misc/str.hpp @@ -183,7 +183,9 @@ struct CStrT : public CBlobT<Tchar> typedef CStrT<char , false> CStrA; ///< Case sensitive ANSI/UTF-8 string typedef CStrT<char , true > CStrCiA; ///< Case insensitive ANSI/UTF-8 string +#if defined(HAS_WCHAR) typedef CStrT<wchar_t, false> CStrW; ///< Case sensitive unicode string typedef CStrT<wchar_t, true > CStrCiW; ///< Case insensitive unicode string +#endif /* HAS_WCHAR */ #endif /* STR_HPP */ diff --git a/src/misc/strapi.hpp b/src/misc/strapi.hpp index c901af6ea..33e22d5b9 100644 --- a/src/misc/strapi.hpp +++ b/src/misc/strapi.hpp @@ -6,12 +6,15 @@ #define STRAPI_HPP #include <string.h> + +#if defined(HAS_WCHAR) #include <wchar.h> #if !defined(_MSC_VER) #define _stricmp strcmp #define _wcsicmp wcscmp -#endif //!_MSC_VER +#endif /* !defined(_MSC_VER) */ +#endif /* HAS_WCHAR */ /** String API mapper base - just mapping by character type, not by case sensitivity yet. * Class template CStrApiBaseT declaration is general, but following inline method @@ -32,35 +35,37 @@ template <> /*static*/ inline size_t CStrApiBaseT<char>::StrLen(const char *s) return ::strlen(s); } -/** ::strlen wrapper specialization for wchar_t */ -template <> /*static*/ inline size_t CStrApiBaseT<wchar_t>::StrLen(const wchar_t *s) -{ - return ::wcslen(s); -} - /** ::vsprintf wrapper specialization for char */ template <> /*static*/ inline int CStrApiBaseT<char>::SPrintFL(char *buf, size_t count, const char *fmt, va_list args) { #if defined(_MSC_VER) && (_MSC_VER >= 1400) // VC 8.0 and above return ::vsnprintf_s(buf, count, count - 1, fmt, args); -#else // ! VC 8.0 and above +#else /* ! VC 8.0 and above */ return ::vsnprintf(buf, count, fmt, args); #endif } +#if defined(HAS_WCHAR) +/** ::strlen wrapper specialization for wchar_t */ +template <> /*static*/ inline size_t CStrApiBaseT<wchar_t>::StrLen(const wchar_t *s) +{ + return ::wcslen(s); +} + /** ::vsprintf wrapper specialization for wchar_t */ template <> /*static*/ inline int CStrApiBaseT<wchar_t>::SPrintFL(wchar_t *buf, size_t count, const wchar_t *fmt, va_list args) { #if defined(_MSC_VER) && (_MSC_VER >= 1400) // VC 8.0 and above return ::_vsnwprintf_s(buf, count, count - 1, fmt, args); -#else // ! VC 8.0 and above +#else /* ! VC 8.0 and above */ # if defined(_WIN32) return ::_vsnwprintf(buf, count, fmt, args); -# else // !_WIN32 +# else /* !_WIN32 */ return ::vswprintf(buf, count, fmt, args); -# endif // !_WIN32 +# endif /* !_WIN32 */ #endif } +#endif /* HAS_WCHAR */ @@ -81,6 +86,7 @@ template <> /*static*/ inline int CStrApiT<char, true>::StrCmp(const char *s1, c return ::_stricmp(s1, s2); } +#if defined(HAS_WCHAR) template <> /*static*/ inline int CStrApiT<wchar_t, false>::StrCmp(const wchar_t *s1, const wchar_t *s2) { return ::wcscmp(s1, s2); @@ -90,5 +96,6 @@ template <> /*static*/ inline int CStrApiT<wchar_t, true>::StrCmp(const wchar_t { return ::_wcsicmp(s1, s2); } +#endif /* HAS_WCHAR */ #endif /* STRAPI_HPP */ diff --git a/src/stdafx.h b/src/stdafx.h index 02a7b32bc..57db80c57 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -341,4 +341,12 @@ NORETURN CDECL error(const char *str, ...); #define NOT_REACHED() error("NOT_REACHED triggered at line %i of %s", __LINE__, __FILE__) +#if !defined(MORPHOS) +/* MorphOS doesn't know wchars, the rest does :( */ +#define HAS_WCHAR +#else +/* And MorphOS doesn't have C++ conformant _stricmp... */ +#define _stricmp stricmp +#endif /* !defined(MORHPOS) */ + #endif /* STDAFX_H */ |