X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/79668caec9becf6ff5d40ba0479e5f2ccb6a3091..05159a2750ed2cc5945a85bc5fc6849ad1a30e75:/include/wx/wxchar.h diff --git a/include/wx/wxchar.h b/include/wx/wxchar.h index aa3ebf4875..03a406d0ff 100644 --- a/include/wx/wxchar.h +++ b/include/wx/wxchar.h @@ -80,9 +80,17 @@ // Required for wxPrintf() etc #include +// Almost all compiler have strdup(), but not quite all: CodeWarrior under Mac +// and VC++ for Windows CE don't provide it +#if !(defined(__MWERKS__) && defined(__WXMAC__)) && !defined(__WXWINCE__) + // use #define, not inline wrapper, as it is tested with #ifndef below + #define wxStrdupA strdup +#endif + // non Unix compilers which do have wchar.h (but not tchar.h which is included -// below and which includes wchar.h anyhow) -#if defined(__MWERKS__) || defined(__VISAGECPP__) +// below and which includes wchar.h anyhow). +// Actually MinGW has tchar.h, but it does not include wchar.h +#if defined(__MWERKS__) || defined(__VISAGECPP__) || defined(__MINGW32__) #ifndef HAVE_WCHAR_H #define HAVE_WCHAR_H #endif @@ -90,7 +98,18 @@ #if wxUSE_WCHAR_T #ifdef HAVE_WCHAR_H - #include + // the current (as of Nov 2002) version of cygwin has a bug in its + // wchar.h -- there is no extern "C" around the declarations in it and + // this results in linking errors later; also, at least on some + // Cygwin versions, wchar.h requires sys/types.h + #ifdef __CYGWIN__ + #include + extern "C" { + #endif // Cygwin + #include + #ifdef __CYGWIN__ + } + #endif // Cygwin #elif defined(HAVE_WCSTR_H) // old compilers have relevant declarations here #include @@ -257,6 +276,7 @@ #define wxStrcoll _tcscoll #define wxStrcpy _tcscpy #define wxStrcspn _tcscspn + #define wxStrdupW _wcsdup // notice the 'W'! #define wxStrftime _tcsftime #define wxStricmp _tcsicmp #define wxStrnicmp _tcsnicmp @@ -446,9 +466,7 @@ #define wxStrcoll strcoll #define wxStrcpy strcpy #define wxStrcspn strcspn - #if !defined(__MWERKS__) || !defined(__WXMAC__) - #define wxStrdup strdup - #endif + // wxStricmp and wxStrnicmp are defined below #define wxStrlen_ strlen // used in wxStrlen inline function #define wxStrncat strncat @@ -559,6 +577,17 @@ inline bool wxIsEmpty(const wxChar *p) { return !p || !*p; } // safe version of strlen() (returns 0 if passed NULL pointer) inline size_t wxStrlen(const wxChar *psz) { return psz ? wxStrlen_(psz) : 0; } +// each of strdup() and wcsdup() may or may not be available but we need both +// of them anyhow for wx/buffer.h so we define the missing one(s) in +// wxchar.cpp and so we should always have both wxStrdupA and wxStrdupW +// defined -- if this is somehow not the case in some situations, please +// correct that and not the lines here +#if wxUSE_UNICODE + #define wxStrdup wxStrdupW +#else + #define wxStrdup wxStrdupA +#endif + WXDLLEXPORT bool wxOKlibc(); // for internal use // ---------------------------------------------------------------------------- @@ -593,10 +622,12 @@ WXDLLEXPORT bool wxOKlibc(); // for internal use #endif #endif // wxVsnprintf_ not defined yet -#ifndef wxVsnprintf_ +#ifndef wxSnprintf_ // no [v]snprintf(), cook our own WXDLLEXPORT int wxSnprintf_(wxChar *buf, size_t len, const wxChar *format, ...) ATTRIBUTE_PRINTF_3; +#endif +#ifndef wxVsnprintf_ WXDLLEXPORT int wxVsnprintf_(wxChar *buf, size_t len, const wxChar *format, va_list argptr); #endif @@ -721,8 +752,12 @@ WXDLLEXPORT bool wxOKlibc(); // for internal use WXDLLEXPORT size_t wxStrxfrm(wxChar *dest, const wxChar *src, size_t n); #endif // wxNEED_WX_STRING_H -#ifndef wxStrdup -WXDLLEXPORT wxChar * wxStrdup(const wxChar *psz); +#ifndef wxStrdupA +WXDLLEXPORT char *wxStrdupA(const char *psz); +#endif + +#ifndef wxStrdupW +WXDLLEXPORT wchar_t *wxStrdupW(const wchar_t *pwz); #endif #ifndef wxStricmp