]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/wxcrt.h
added template wxScopedArray<> too
[wxWidgets.git] / include / wx / wxcrt.h
index 04b5fa6e4d30d36b9c15f5072c044facf2f73b0b..662ea9758dd08dccbe8abdd68b4394b92027ae2f 100644 (file)
 #include "wx/wxcrtbase.h"
 #include "wx/string.h"
 
-#if defined (__VISUALC__) || defined (__DMC__)
-    #define HAVE_NO_VSSCANF 1
+#ifndef __WX_SETUP_H__
+// For non-configure builds assume vsscanf is available, if not Visual C or DMC
+#if !defined (__VISUALC__) && !defined (__DMC__)
+    #define HAVE_VSSCANF 1
+#endif
 #endif
 
 // ============================================================================
@@ -36,9 +39,6 @@ inline bool wxIsEmpty(const wxString& s) { return s.empty(); }
 inline bool wxIsEmpty(const wxCStrData& s) { return s.AsString().empty(); }
 
 
-// FIXME-UTF8: get rid of this, it's ANSI only anyway
-WXDLLIMPEXP_BASE bool wxOKlibc(); /* for internal use */
-
 
 /* multibyte to wide char conversion functions and macros */
 
@@ -181,6 +181,36 @@ inline size_t wxStrlen(const wxWCharBuffer& s) { return wxStrlen(s.data()); }
 inline size_t wxStrlen(const wxString& s) { return s.length(); }
 inline size_t wxStrlen(const wxCStrData& s) { return s.AsString().length(); }
 
+// this is a function new in 2.9 so we don't care about backwards compatibility and
+// so don't need to support wxCharBuffer/wxWCharBuffer overloads
+#if defined(wxCRT_StrnlenA)
+inline size_t wxStrnlen(const char *str, size_t maxlen) { return wxCRT_StrnlenA(str, maxlen); }
+#else
+inline size_t wxStrnlen(const char *str, size_t maxlen)
+{
+    size_t n;
+    for ( n = 0; n < maxlen; n++ )
+        if ( !str[n] )
+            break;
+
+    return n;
+}
+#endif
+
+#if defined(wxCRT_StrnlenW)
+inline size_t wxStrnlen(const wchar_t *str, size_t maxlen) { return wxCRT_StrnlenW(str, maxlen); }
+#else
+inline size_t wxStrnlen(const wchar_t *str, size_t maxlen)
+{
+    size_t n;
+    for ( n = 0; n < maxlen; n++ )
+        if ( !str[n] )
+            break;
+
+    return n;
+}
+#endif
+
 // NB: these are defined in wxcrtbase.h, see the comment there
 // inline char* wxStrdup(const char *s) { return wxStrdupA(s); }
 // inline wchar_t* wxStrdup(const wchar_t *s) { return wxStrdupW(s); }
@@ -231,6 +261,36 @@ inline char *wxStrncpy(char *dest, const wchar_t *src, size_t n)
 inline wchar_t *wxStrncpy(wchar_t *dest, const char *src, size_t n)
     { return wxCRT_StrncpyW(dest, wxConvLibc.cMB2WC(src), n); }
 
+// this is a function new in 2.9 so we don't care about backwards compatibility and
+// so don't need to support wchar_t/char overloads
+inline size_t wxStrlcpy(char *dest, const char *src, size_t n)
+{
+    const size_t len = wxCRT_StrlenA(src);
+
+    if ( n )
+    {
+        if ( n-- > len )
+            n = len;
+        wxCRT_StrncpyA(dest, src, n);
+        dest[n] = '\0';
+    }
+
+    return len;
+}
+inline size_t wxStrlcpy(wchar_t *dest, const wchar_t *src, size_t n)
+{
+    const size_t len = wxCRT_StrlenW(src);
+    if ( n )
+    {
+        if ( n-- > len )
+            n = len;
+        wxCRT_StrncpyW(dest, src, n);
+        dest[n] = L'\0';
+    }
+
+    return len;
+}
+
 inline char *wxStrcat(char *dest, const char *src)
     { return wxCRT_StrcatA(dest, src); }
 inline wchar_t *wxStrcat(wchar_t *dest, const wchar_t *src)