mirror of https://github.com/OpenTTD/OpenTTD
(svn r10562) -Fix: most of the MorphOS issues; MorphOS doesn't know about wchars, so disable all code that has to use wchars for MorphOS.
parent
a2a3b7da24
commit
b8e302d2a0
|
@ -59,7 +59,9 @@ protected:
|
||||||
/** type used as class member */
|
/** type used as class member */
|
||||||
union {
|
union {
|
||||||
bitem_t *m_pData; ///< ptr to the first byte of data
|
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
|
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
|
CHdr *m_pHdr_1; ///< ptr just after the CHdr holding m_size and m_max_size
|
||||||
} ptr_u;
|
} ptr_u;
|
||||||
|
|
||||||
|
|
|
@ -183,7 +183,9 @@ struct CStrT : public CBlobT<Tchar>
|
||||||
|
|
||||||
typedef CStrT<char , false> CStrA; ///< Case sensitive ANSI/UTF-8 string
|
typedef CStrT<char , false> CStrA; ///< Case sensitive ANSI/UTF-8 string
|
||||||
typedef CStrT<char , true > CStrCiA; ///< Case insensitive 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, false> CStrW; ///< Case sensitive unicode string
|
||||||
typedef CStrT<wchar_t, true > CStrCiW; ///< Case insensitive unicode string
|
typedef CStrT<wchar_t, true > CStrCiW; ///< Case insensitive unicode string
|
||||||
|
#endif /* HAS_WCHAR */
|
||||||
|
|
||||||
#endif /* STR_HPP */
|
#endif /* STR_HPP */
|
||||||
|
|
|
@ -6,12 +6,15 @@
|
||||||
#define STRAPI_HPP
|
#define STRAPI_HPP
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#if defined(HAS_WCHAR)
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
|
|
||||||
#if !defined(_MSC_VER)
|
#if !defined(_MSC_VER)
|
||||||
#define _stricmp strcmp
|
#define _stricmp strcmp
|
||||||
#define _wcsicmp wcscmp
|
#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.
|
/** String API mapper base - just mapping by character type, not by case sensitivity yet.
|
||||||
* Class template CStrApiBaseT declaration is general, but following inline method
|
* 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);
|
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 */
|
/** ::vsprintf wrapper specialization for char */
|
||||||
template <> /*static*/ inline int CStrApiBaseT<char>::SPrintFL(char *buf, size_t count, const char *fmt, va_list args)
|
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
|
#if defined(_MSC_VER) && (_MSC_VER >= 1400) // VC 8.0 and above
|
||||||
return ::vsnprintf_s(buf, count, count - 1, fmt, args);
|
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);
|
return ::vsnprintf(buf, count, fmt, args);
|
||||||
#endif
|
#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 */
|
/** ::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)
|
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
|
#if defined(_MSC_VER) && (_MSC_VER >= 1400) // VC 8.0 and above
|
||||||
return ::_vsnwprintf_s(buf, count, count - 1, fmt, args);
|
return ::_vsnwprintf_s(buf, count, count - 1, fmt, args);
|
||||||
#else // ! VC 8.0 and above
|
#else /* ! VC 8.0 and above */
|
||||||
# if defined(_WIN32)
|
# if defined(_WIN32)
|
||||||
return ::_vsnwprintf(buf, count, fmt, args);
|
return ::_vsnwprintf(buf, count, fmt, args);
|
||||||
# else // !_WIN32
|
# else /* !_WIN32 */
|
||||||
return ::vswprintf(buf, count, fmt, args);
|
return ::vswprintf(buf, count, fmt, args);
|
||||||
# endif // !_WIN32
|
# endif /* !_WIN32 */
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#endif /* HAS_WCHAR */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -81,6 +86,7 @@ template <> /*static*/ inline int CStrApiT<char, true>::StrCmp(const char *s1, c
|
||||||
return ::_stricmp(s1, s2);
|
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)
|
template <> /*static*/ inline int CStrApiT<wchar_t, false>::StrCmp(const wchar_t *s1, const wchar_t *s2)
|
||||||
{
|
{
|
||||||
return ::wcscmp(s1, 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);
|
return ::_wcsicmp(s1, s2);
|
||||||
}
|
}
|
||||||
|
#endif /* HAS_WCHAR */
|
||||||
|
|
||||||
#endif /* STRAPI_HPP */
|
#endif /* STRAPI_HPP */
|
||||||
|
|
|
@ -341,4 +341,12 @@ NORETURN
|
||||||
CDECL error(const char *str, ...);
|
CDECL error(const char *str, ...);
|
||||||
#define NOT_REACHED() error("NOT_REACHED triggered at line %i of %s", __LINE__, __FILE__)
|
#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 */
|
#endif /* STDAFX_H */
|
||||||
|
|
Loading…
Reference in New Issue