]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/wxcrt.cpp
add wx/unix/private directory
[wxWidgets.git] / src / common / wxcrt.cpp
index 0cbcd5aa24adf4b9b21482c241dd76f4243dc3e3..a3abc326bf75ea0631364d82ef0793f64f44f10f 100644 (file)
@@ -253,9 +253,7 @@ int vswscanf(const wxChar *ws, const wxChar *format, va_list argptr)
     wxCHECK_MSG( wxStrstr(format, _T("%c")) == NULL, -1,
                  _T("incomplete vswscanf implementation doesn't allow %c") );
 
-    va_list argcopy;
-    wxVaCopy(argcopy, argptr);
-    return vsscanf(wxConvLibc.cWX2MB(ws), wxConvLibc.cWX2MB(format), argcopy);
+    return vsscanf(wxConvLibc.cWX2MB(ws), wxConvLibc.cWX2MB(format), argptr);
 }
 
 int vfwscanf(FILE *stream, const wxChar *format, va_list argptr)
@@ -606,7 +604,21 @@ int wxCRT_Vsprintf( wxChar *str, const wxChar *format, va_list argptr )
 // wrappers to printf and scanf function families
 // ----------------------------------------------------------------------------
 
-int wxDoSprintf(char *str, const wxString& format, ...)
+#if !wxUSE_UTF8_LOCALE_ONLY
+int wxDoSprintfWchar(char *str, const wxChar *format, ...)
+{
+    va_list argptr;
+    va_start(argptr, format);
+
+    int rv = wxVsprintf(str, format, argptr);
+
+    va_end(argptr);
+    return rv;
+}
+#endif // !wxUSE_UTF8_LOCALE_ONLY
+
+#if wxUSE_UNICODE_UTF8
+int wxDoSprintfUtf8(char *str, const char *format, ...)
 {
     va_list argptr;
     va_start(argptr, format);
@@ -616,9 +628,12 @@ int wxDoSprintf(char *str, const wxString& format, ...)
     va_end(argptr);
     return rv;
 }
+#endif // wxUSE_UNICODE_UTF8
 
 #if wxUSE_UNICODE
-int wxDoSprintf(wchar_t *str, const wxString& format, ...)
+
+#if !wxUSE_UTF8_LOCALE_ONLY
+int wxDoSprintfWchar(wchar_t *str, const wxChar *format, ...)
 {
     va_list argptr;
     va_start(argptr, format);
@@ -628,9 +643,38 @@ int wxDoSprintf(wchar_t *str, const wxString& format, ...)
     va_end(argptr);
     return rv;
 }
-#endif
+#endif // !wxUSE_UTF8_LOCALE_ONLY
+
+#if wxUSE_UNICODE_UTF8
+int wxDoSprintfUtf8(wchar_t *str, const char *format, ...)
+{
+    va_list argptr;
+    va_start(argptr, format);
+
+    int rv = wxVsprintf(str, format, argptr);
+
+    va_end(argptr);
+    return rv;
+}
+#endif // wxUSE_UNICODE_UTF8
+
+#endif // wxUSE_UNICODE
+
+#if !wxUSE_UTF8_LOCALE_ONLY
+int wxDoSnprintfWchar(char *str, size_t size, const wxChar *format, ...)
+{
+    va_list argptr;
+    va_start(argptr, format);
+
+    int rv = wxVsnprintf(str, size, format, argptr);
+
+    va_end(argptr);
+    return rv;
+}
+#endif // !wxUSE_UTF8_LOCALE_ONLY
 
-int wxDoSnprintf(char *str, size_t size, const wxString& format, ...)
+#if wxUSE_UNICODE_UTF8
+int wxDoSnprintfUtf8(char *str, size_t size, const char *format, ...)
 {
     va_list argptr;
     va_start(argptr, format);
@@ -640,9 +684,12 @@ int wxDoSnprintf(char *str, size_t size, const wxString& format, ...)
     va_end(argptr);
     return rv;
 }
+#endif // wxUSE_UNICODE_UTF8
 
 #if wxUSE_UNICODE
-int wxDoSnprintf(wchar_t *str, size_t size, const wxString& format, ...)
+
+#if !wxUSE_UTF8_LOCALE_ONLY
+int wxDoSnprintfWchar(wchar_t *str, size_t size, const wxChar *format, ...)
 {
     va_list argptr;
     va_start(argptr, format);
@@ -652,7 +699,22 @@ int wxDoSnprintf(wchar_t *str, size_t size, const wxString& format, ...)
     va_end(argptr);
     return rv;
 }
-#endif
+#endif // !wxUSE_UTF8_LOCALE_ONLY
+
+#if wxUSE_UNICODE_UTF8
+int wxDoSnprintfUtf8(wchar_t *str, size_t size, const char *format, ...)
+{
+    va_list argptr;
+    va_start(argptr, format);
+
+    int rv = wxVsnprintf(str, size, format, argptr);
+
+    va_end(argptr);
+    return rv;
+}
+#endif // wxUSE_UNICODE_UTF8
+
+#endif // wxUSE_UNICODE
 
 
 #ifdef HAVE_BROKEN_VSNPRINTF_DECL
@@ -660,6 +722,8 @@ int wxDoSnprintf(wchar_t *str, size_t size, const wxString& format, ...)
 #endif
 
 #if wxUSE_UNICODE
+
+#if !wxUSE_UTF8_LOCALE_ONLY
 static int ConvertStringToBuf(const wxString& s, char *out, size_t outsize)
 {
     const wxWX2WCbuf buf = s.wc_str();
@@ -670,6 +734,7 @@ static int ConvertStringToBuf(const wxString& s, char *out, size_t outsize)
     else
         return wxConvLibc.FromWChar(NULL, 0, buf);
 }
+#endif // !wxUSE_UTF8_LOCALE_ONLY
 
 #if wxUSE_UNICODE_UTF8
 static int ConvertStringToBuf(const wxString& s, wchar_t *out, size_t outsize)
@@ -681,17 +746,14 @@ static int ConvertStringToBuf(const wxString& s, wchar_t *out, size_t outsize)
     // else: not enough space
     return len;
 }
-#endif
+#endif // wxUSE_UNICODE_UTF8
 
 template<typename T>
 static size_t PrintfViaString(T *out, size_t outsize,
                               const wxString& format, va_list argptr)
 {
-    va_list argcopy;
-    wxVaCopy(argcopy, argptr);
-
     wxString s;
-    s.PrintfV(format, argcopy);
+    s.PrintfV(format, argptr);
 
     return ConvertStringToBuf(s, out, outsize);
 }
@@ -699,21 +761,18 @@ static size_t PrintfViaString(T *out, size_t outsize,
 
 int wxVsprintf(char *str, const wxString& format, va_list argptr)
 {
-    va_list argcopy;
-    wxVaCopy(argcopy, argptr);
-
 #if wxUSE_UTF8_LOCALE_ONLY
-    return vsprintf(str, format.wx_str(), argcopy);
+    return vsprintf(str, format.wx_str(), argptr);
 #else
     #if wxUSE_UNICODE_UTF8
     if ( wxLocaleIsUtf8 )
-        return vsprintf(str, format.wx_str(), argcopy);
+        return vsprintf(str, format.wx_str(), argptr);
     else
     #endif
     #if wxUSE_UNICODE
-    return PrintfViaString(str, wxNO_LEN, format, argcopy);
+    return PrintfViaString(str, wxNO_LEN, format, argptr);
     #else
-    return wxCRT_Vsprintf(str, format, argcopy);
+    return wxCRT_Vsprintf(str, format, argptr);
     #endif
 #endif
 }
@@ -721,18 +780,15 @@ int wxVsprintf(char *str, const wxString& format, va_list argptr)
 #if wxUSE_UNICODE
 int wxVsprintf(wchar_t *str, const wxString& format, va_list argptr)
 {
-    va_list argcopy;
-    wxVaCopy(argcopy, argptr);
-
 #if wxUSE_UNICODE_WCHAR
-    return wxCRT_Vsprintf(str, format, argcopy);
+    return wxCRT_Vsprintf(str, format, argptr);
 #else // wxUSE_UNICODE_UTF8
     #if !wxUSE_UTF8_LOCALE_ONLY
     if ( !wxLocaleIsUtf8 )
-        return wxCRT_Vsprintf(str, format, argcopy);
+        return wxCRT_Vsprintf(str, format, argptr);
     else
     #endif
-        return PrintfViaString(str, wxNO_LEN, format, argcopy);
+        return PrintfViaString(str, wxNO_LEN, format, argptr);
 #endif // wxUSE_UNICODE_UTF8
 }
 #endif // wxUSE_UNICODE
@@ -740,15 +796,12 @@ int wxVsprintf(wchar_t *str, const wxString& format, va_list argptr)
 int wxVsnprintf(char *str, size_t size, const wxString& format, va_list argptr)
 {
     int rv;
-    va_list argcopy;
-    wxVaCopy(argcopy, argptr);
-
 #if wxUSE_UTF8_LOCALE_ONLY
-    rv = vsnprintf(str, size, format.wx_str(), argcopy);
+    rv = vsnprintf(str, size, format.wx_str(), argptr);
 #else
     #if wxUSE_UNICODE_UTF8
     if ( wxLocaleIsUtf8 )
-        rv = vsnprintf(str, size, format.wx_str(), argcopy);
+        rv = vsnprintf(str, size, format.wx_str(), argptr);
     else
     #endif
     #if wxUSE_UNICODE
@@ -756,10 +809,10 @@ int wxVsnprintf(char *str, size_t size, const wxString& format, va_list argptr)
         // NB: if this code is called, then wxString::PrintV() would use the
         //     wchar_t* version of wxVsnprintf(), so it's safe to use PrintV()
         //     from here
-        rv = PrintfViaString(str, size, format, argcopy);
+        rv = PrintfViaString(str, size, format, argptr);
     }
     #else
-    rv = wxCRT_Vsnprintf(str, size, format, argcopy);
+    rv = wxCRT_Vsnprintf(str, size, format, argptr);
     #endif
 #endif
 
@@ -774,22 +827,20 @@ int wxVsnprintf(char *str, size_t size, const wxString& format, va_list argptr)
 int wxVsnprintf(wchar_t *str, size_t size, const wxString& format, va_list argptr)
 {
     int rv;
-    va_list argcopy;
-    wxVaCopy(argcopy, argptr);
 
 #if wxUSE_UNICODE_WCHAR
-    rv = wxCRT_Vsnprintf(str, size, format, argcopy);
+    rv = wxCRT_Vsnprintf(str, size, format, argptr);
 #else // wxUSE_UNICODE_UTF8
     #if !wxUSE_UTF8_LOCALE_ONLY
     if ( !wxLocaleIsUtf8 )
-        rv = wxCRT_Vsnprintf(str, size, format, argcopy);
+        rv = wxCRT_Vsnprintf(str, size, format, argptr);
     else
     #endif
     {
         // NB: if this code is called, then wxString::PrintV() would use the
         //     char* version of wxVsnprintf(), so it's safe to use PrintV()
         //     from here
-        rv = PrintfViaString(str, size, format, argcopy);
+        rv = PrintfViaString(str, size, format, argptr);
     }
 #endif // wxUSE_UNICODE_UTF8
 
@@ -1260,12 +1311,14 @@ wxChar * WXDLLEXPORT wxGetenv(const wxChar *name)
 #endif
 }
 
+#endif // wxNEED_WX_STDLIB_H
+
+#ifdef wxNEED_WXSYSTEM
 int WXDLLEXPORT wxSystem(const wxChar *psz)
 {
     return system(wxConvLibc.cWX2MB(psz));
 }
-
-#endif // wxNEED_WX_STDLIB_H
+#endif // wxNEED_WXSYSTEM
 
 #ifdef wxNEED_WX_TIME_H
 WXDLLEXPORT size_t
@@ -1391,8 +1444,7 @@ static wxULongLong_t wxStrtoullBase(const wxChar* nptr, wxChar** endptr, int bas
 
     if ( endptr )
     {
-        const wxChar& endref = *i;
-        *endptr = &(wxChar&)endref;
+        *endptr = (wxChar*)(nptr + (i - wxstr.begin()));
     }
 
     return sum;