* Name: wx/wxcrtbase.h
* Purpose: Type-safe ANSI and Unicode builds compatible wrappers for
* CRT functions
- * Author: Joel Farley, Ove Kåven
+ * Author: Joel Farley, Ove K�ven
* Modified by: Vadim Zeitlin, Robert Roebling, Ron Lee
* Created: 1998/06/12
* RCS-ID: $Id$
#include <wctype.h>
#include <time.h>
+#ifdef __WINDOWS__
+#include <io.h>
+#endif
#if defined(HAVE_STRTOK_R) && defined(__DARWIN__) && defined(_MSL_USING_MW_C_HEADERS) && _MSL_USING_MW_C_HEADERS
char *strtok_r(char *, const char *, char **);
#ifdef __cplusplus
#if wxUSE_UNICODE_UTF8
- // flag indicating whether the current locale uses UTF-8 or not; must be
- // updated every time the locale is changed!
+ /* flag indicating whether the current locale uses UTF-8 or not; must be
+ updated every time the locale is changed! */
#if wxUSE_UTF8_LOCALE_ONLY
#define wxLocaleIsUtf8 true
#else
extern WXDLLIMPEXP_BASE bool wxLocaleIsUtf8;
#endif
- // function used to update the flag:
+ /* function used to update the flag: */
extern WXDLLIMPEXP_BASE void wxUpdateLocaleIsUtf8();
- #else // !wxUSE_UNICODE_UTF8
+ #else /* !wxUSE_UNICODE_UTF8 */
inline void wxUpdateLocaleIsUtf8() {}
- #endif // wxUSE_UNICODE_UTF8/!wxUSE_UNICODE_UTF8
-#endif // __cplusplus
+ #endif /* wxUSE_UNICODE_UTF8/!wxUSE_UNICODE_UTF8 */
+#endif /* __cplusplus */
/* -------------------------------------------------------------------------
#endif
#if defined(__WINDOWS__)
#define wxCRT_StrdupW _wcsdup
-#elif !defined(__DARWIN__) && !defined( __VMS )
+#elif defined(HAVE_WCSDUP)
#define wxCRT_StrdupW wcsdup
#endif
#endif
/* supply strtoll and strtoull, if needed */
-#ifndef wxCRT_StrtollA
- WXDLLIMPEXP_BASE wxLongLong_t wxCRT_StrtollA(const char* nptr, char** endptr, int base);
- WXDLLIMPEXP_BASE wxULongLong_t wxCRT_StrtoullA(const char* nptr, char** endptr, int base);
-#endif
-#ifndef wxCRT_StrtollW
- WXDLLIMPEXP_BASE wxLongLong_t wxCRT_StrtollW(const wchar_t* nptr, wchar_t** endptr, int base);
- WXDLLIMPEXP_BASE wxULongLong_t wxCRT_StrtoullW(const wchar_t* nptr, wchar_t** endptr, int base);
-#endif
+#ifdef wxLongLong_t
+ #ifndef wxCRT_StrtollA
+ WXDLLIMPEXP_BASE wxLongLong_t wxCRT_StrtollA(const char* nptr,
+ char** endptr,
+ int base);
+ WXDLLIMPEXP_BASE wxULongLong_t wxCRT_StrtoullA(const char* nptr,
+ char** endptr,
+ int base);
+ #endif
+ #ifndef wxCRT_StrtollW
+ WXDLLIMPEXP_BASE wxLongLong_t wxCRT_StrtollW(const wchar_t* nptr,
+ wchar_t** endptr,
+ int base);
+ WXDLLIMPEXP_BASE wxULongLong_t wxCRT_StrtoullW(const wchar_t* nptr,
+ wchar_t** endptr,
+ int base);
+ #endif
+#endif // wxLongLong_t
/* -------------------------------------------------------------------------
/* these functions are only needed in the form used for filenames (i.e. char*
on Unix, wchar_t* on Windows), so we don't need to use A/W suffix: */
-#if wxMBFILES || !wxUSE_UNICODE // ANSI filenames
+#if wxMBFILES || !wxUSE_UNICODE /* ANSI filenames */
#define wxCRT_Fopen fopen
#define wxCRT_Freopen freopen
#define wxCRT_Remove remove
#define wxCRT_Rename rename
-#else // Unicode filenames
+#else /* Unicode filenames */
/* special case: these functions are missing under Win9x with Unicows so we
have to implement them ourselves */
#endif
#endif
-#endif // wxMBFILES/!wxMBFILES
+#endif /* wxMBFILES/!wxMBFILES */
#define wxCRT_PutsA puts
#define wxCRT_FputsA fputs
WXDLLIMPEXP_BASE int wxCRT_FputcW(wchar_t wc, FILE *stream);
#endif
-#define wxCRT_TmpnamA tmpnam
-#ifdef _ttmpnam
- #define wxCRT_TmpnamW _wtmpnam
-#endif
-
-#ifndef wxCRT_TmpnamW
-WXDLLIMPEXP_BASE wchar_t *wxCRT_TmpnamW(wchar_t *s);
-#endif
+/*
+ NB: tmpnam() is unsafe and thus is not wrapped!
+ Use other wxWidgets facilities instead:
+ wxFileName::CreateTempFileName, wxTempFile, or wxTempFileOutputStream
+*/
+#define wxTmpnam(x) wxTmpnam_is_insecure_use_wxTempFile_instead
#define wxCRT_PerrorA perror
#ifdef wxHAVE_TCHAR_SUPPORT
#define wxCRT_TolowerW towlower
#define wxCRT_ToupperW towupper
#endif
-#else // !__GLIBC__
+#else /* !__GLIBC__ */
/* There is a bug in VC6 C RTL: toxxx() functions dosn't do anything
with signed chars < 0, so "fix" it here. */
#define wxCRT_TolowerW(c) towlower((wxUChar)(wxChar)(c))
#define wxCRT_ToupperW(c) towupper((wxUChar)(wxChar)(c))
-#endif // __GLIBC__/!__GLIBC__
+#endif /* __GLIBC__/!__GLIBC__ */