]> git.saurik.com Git - wxWidgets.git/commitdiff
Implemented the various printf() functions under
authorRobert Roebling <robert@roebling.de>
Sat, 10 Aug 2002 11:58:15 +0000 (11:58 +0000)
committerRobert Roebling <robert@roebling.de>
Sat, 10 Aug 2002 11:58:15 +0000 (11:58 +0000)
    Unicode with their GNU libc 2.2 funtions. This
    saves us some unicode<->ansi conversion and we
    no longer need the experimental printf() code
    in string.cpp. I had to implement wxSprintf()
    using wxSnprintf() as the former doesn't exist
    in Unicode GNU libc 2.2.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16442 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/string.h
include/wx/wxchar.h
src/common/string.cpp
src/common/wxchar.cpp

index b9319c6b7ab9db972d804c531de54daf2549ebd7..7f4245d2aadaf1b3e86eadd9927e229542928a9b 100644 (file)
@@ -165,16 +165,32 @@ inline int Stricmp(const char *psz1, const char *psz2)
 #endif  // OS/compiler
 }
 
+#ifndef wxSnprintf   
 // wxSnprintf() is like snprintf() if it's available and sprintf() (always
-// available, but dangerous!) if not
+// available, but dangerous!) if not.
 extern int WXDLLEXPORT wxSnprintf(wxChar *buf, size_t len,
                                   const wxChar *format,
                                   ...) ATTRIBUTE_PRINTF_3;
+#else
+// GNU libc 2.2 only has for wxSnprintf for Unicode called swprintf
+// so we imitate wxSprintf using it.
+extern int WXDLLEXPORT wxSprintf(wxChar *buf,
+                                  const wxChar *format,
+                                  ...) ATTRIBUTE_PRINTF_2;
+#endif
 
+#ifndef wxVsnprintf
 // and wxVsnprintf() is like vsnprintf() or vsprintf()
 extern int WXDLLEXPORT wxVsnprintf(wxChar *buf, size_t len,
                                    const wxChar *format,
                                    va_list argptr);
+#else
+// GNU libc 2.2 only has for wxVsnprintf for Unicode called vswprintf
+// so we imitate wxVsprintf using it.
+extern int WXDLLEXPORT wxVsprintf(wxChar *buf,
+                                  const wxChar *format,
+                                  va_list argptr);
+#endif
 
 // return an empty wxString
 class WXDLLEXPORT wxString; // not yet defined
index eecb6b5a4e417cee179ab8bb59fec2287231ca53..21afa7f864348adaba983c8930dace21ae019c54 100644 (file)
@@ -372,6 +372,29 @@ typedef unsigned __WCHAR_TYPE__ wxUChar;
 #      define  wxStrtoul   wcstoul
 #      define  wxStrxfrm   wcsxfrm
 
+#      define  wxFgetc     fgetwc
+#      define  wxFgetchar  fgetwchar
+#      define  wxFgets     fgetws
+#      define  wxFputc     fputwc
+#      define  wxFputchar  fputwchar
+#      define  wxFprintf   fwprintf
+#      define  wxFscanf    fwscanf
+#      define  wxGetc      getwc
+#      define  wxGetchar   getwchar
+#      define  wxGets      getws
+#      define  wxPrintf    wprintf
+#      define  wxPutc      wputc
+#      define  wxPutchar   wputchar
+#      define  wxPuts      putws
+#      define  wxScanf     wscanf
+#      define  wxSnprintf  swprintf
+#      define  wxSscanf    swscanf
+#      define  wxUngetc    ungetwc
+#      define  wxVfprint   vfwprintf
+#      define  wxVprintf   vwprintf
+#      define  wxVsscanf   vswscanf
+#      define  wxVsnprintf vswprintf
+
 // glibc doesn't have wc equivalents of the other stuff
 #      define wxNEED_WX_STDIO_H
 #      define wxNEED_WX_STDLIB_H
@@ -482,29 +505,30 @@ typedef unsigned __WCHAR_TYPE__ wxUChar;
 #  endif
 
 #  ifdef wxNEED_WX_STDIO_H
+#    define  wxFopen     fopen
+#    define  wxFreopen   freopen
+#    define  wxPerror    perror
+#    define  wxRemove    remove
+#    define  wxRename    rename
+#    define  wxTmpnam    tmpnam
+
 #    define  wxFgetc     fgetc
 #    define  wxFgetchar  fgetchar
 #    define  wxFgets     fgets
-#    define  wxFopen     fopen
 #    define  wxFputc     fputc
 #    define  wxFputchar  fputchar
 #    define  wxFprintf   fprintf
-#    define  wxFreopen   freopen
 #    define  wxFscanf    fscanf
 #    define  wxGetc      getc
 #    define  wxGetchar   getchar
 #    define  wxGets      gets
-#    define  wxPerror    perror
 #    define  wxPrintf    printf
 #    define  wxPutc      putc
 #    define  wxPutchar   putchar
 #    define  wxPuts      puts
-#    define  wxRemove    remove
-#    define  wxRename    rename
 #    define  wxScanf     scanf
 #    define  wxSprintf   sprintf
 #    define  wxSscanf    sscanf
-#    define  wxTmpnam    tmpnam
 #    define  wxUngetc    ungetc
 #    define  wxVfprint   vfprintf
 #    define  wxVprintf   vprintf
@@ -513,6 +537,7 @@ typedef unsigned __WCHAR_TYPE__ wxUChar;
 #    undef wxNEED_WX_STDIO_H
 #  endif
 
+
 #  ifdef wxNEED_WX_STDLIB_H
 #    define  wxAtof      atof
 #    define  wxAtoi      atoi
@@ -640,14 +665,6 @@ WXDLLEXPORT FILE *   wxFopen(const wxChar *path, const wxChar *mode);
 WXDLLEXPORT FILE *   wxFreopen(const wxChar *path, const wxChar *mode, FILE *stream);
 WXDLLEXPORT int      wxRemove(const wxChar *path);
 WXDLLEXPORT int      wxRename(const wxChar *oldpath, const wxChar *newpath);
-WXDLLEXPORT int      wxPrintf(const wxChar *fmt, ...) ATTRIBUTE_PRINTF_1;
-WXDLLEXPORT int      wxVprintf(const wxChar *fmt, va_list argptr);
-WXDLLEXPORT int      wxFprintf(FILE *stream, const wxChar *fmt, ...) ATTRIBUTE_PRINTF_2;
-WXDLLEXPORT int      wxVfprintf(FILE *stream, const wxChar *fmt, va_list argptr);
-WXDLLEXPORT int      wxSprintf(wxChar *buf, const wxChar *fmt, ...) ATTRIBUTE_PRINTF_2;
-WXDLLEXPORT int      wxVsprintf(wxChar *buf, const wxChar *fmt, va_list argptr);
-WXDLLEXPORT int      wxSscanf(const wxChar *buf, const wxChar *fmt, ...) ATTRIBUTE_PRINTF_2;
-WXDLLEXPORT int      wxVsscanf(const wxChar *buf, const wxChar *fmt, va_list argptr);
 #endif
 
 #ifndef wxAtof
index e232c8a79d989f50ea7d495451d2d9b186f9b4b9..6956cdd521f20b7dd5424f4d0a41cc93d1c5b686 100644 (file)
@@ -48,7 +48,9 @@
 
 #if wxUSE_UNICODE
     #undef wxUSE_EXPERIMENTAL_PRINTF
-    #define wxUSE_EXPERIMENTAL_PRINTF 1
+    #ifndef wvsnprintf
+        #define wxUSE_EXPERIMENTAL_PRINTF 1
+    #endif
 #endif
 
 // allocating extra space for each string consumes more memory but speeds up
@@ -184,11 +186,11 @@ wxSTD ostream& operator<<(wxSTD ostream& os, const wxString& str)
 
 #endif  //std::string compatibility
 
-extern int WXDLLEXPORT wxVsnprintf(wxChar *buf, size_t len,
-                                   const wxChar *format, va_list argptr)
+#ifndef wxVsnprintf
+int WXDLLEXPORT wxVsnprintf(wxChar *buf, size_t len,
+                            const wxChar *format, va_list argptr)
 {
 #if wxUSE_UNICODE
-    // FIXME should use wvsnprintf() or whatever if it's available
     wxString s;
     int iLen = s.PrintfV(format, argptr);
     if ( iLen != -1 )
@@ -210,9 +212,20 @@ extern int WXDLLEXPORT wxVsnprintf(wxChar *buf, size_t len,
     return rc;
 #endif // Unicode/ANSI
 }
+#else
+// GNU libc 2.2 only has for wxVsnprintf for Unicode called vswprintf
+// so we imitate wxVsprintf using it.
+int WXDLLEXPORT wxVsprintf(wxChar *buf,
+                           const wxChar *format,
+                           va_list argptr)
+{
+    return vswprintf( buf, 10000, format, argptr );
+}
+#endif
 
-extern int WXDLLEXPORT wxSnprintf(wxChar *buf, size_t len,
-                                  const wxChar *format, ...)
+#ifndef wxSnprintf   
+int WXDLLEXPORT wxSnprintf(wxChar *buf, size_t len,
+                           const wxChar *format, ...)
 {
     va_list argptr;
     va_start(argptr, format);
@@ -223,6 +236,23 @@ extern int WXDLLEXPORT wxSnprintf(wxChar *buf, size_t len,
 
     return iLen;
 }
+#else
+// GNU libc 2.2 only has for wxSnprintf for Unicode called swprintf
+// so we imitate wxSprintf using it.
+int WXDLLEXPORT wxSprintf(wxChar *buf,
+                          const wxChar *format,
+                          ...) ATTRIBUTE_PRINTF_2
+{
+    va_list argptr;
+    va_start(argptr, format);
+
+    int iLen = swprintf(buf, 10000, format, argptr);
+
+    va_end(argptr);
+
+    return iLen;
+}
+#endif
 
 // ----------------------------------------------------------------------------
 // private classes
index 657a0554c2eac439d7e3d3ed1be5f2ff9d2df37c..eaaef7ad4a591fe328b51a0c8e63dc65305d85df 100644 (file)
@@ -393,85 +393,6 @@ WXDLLEXPORT int wxRename(const wxChar *oldpath, const wxChar *newpath)
 {
     return rename( wxConvFile.cWX2MB(oldpath), wxConvFile.cWX2MB(newpath) );
 }
-
-int WXDLLEXPORT wxPrintf(const wxChar *fmt, ...)
-{
-  va_list argptr;
-  int ret;
-
-  va_start(argptr, fmt);
-  ret = wxVprintf(fmt, argptr);
-  va_end(argptr);
-  return ret;
-}
-
-int WXDLLEXPORT wxVprintf(const wxChar *fmt, va_list argptr)
-{
-  wxString str;
-  str.PrintfV(fmt,argptr);
-  printf("%s", (const char*)str.mb_str());
-  return str.Len();
-}
-
-int WXDLLEXPORT wxFprintf(FILE *stream, const wxChar *fmt, ...)
-{
-  va_list argptr;
-  int ret;
-
-  va_start(argptr, fmt);
-  ret = wxVfprintf(stream, fmt, argptr);
-  va_end(argptr);
-  return ret;
-}
-
-int WXDLLEXPORT wxVfprintf(FILE *stream, const wxChar *fmt, va_list argptr)
-{
-  wxString str;
-  str.PrintfV(fmt,argptr);
-  fprintf(stream, "%s", (const char*)str.mb_str());
-  return str.Len();
-}
-
-int WXDLLEXPORT wxSprintf(wxChar *buf, const wxChar *fmt, ...)
-{
-  va_list argptr;
-  int ret;
-
-  va_start(argptr, fmt);
-  ret = wxVsprintf(buf, fmt, argptr);
-  va_end(argptr);
-  return ret;
-}
-
-int WXDLLEXPORT wxVsprintf(wxChar *buf, const wxChar *fmt, va_list argptr)
-{
-  // this might be sort of inefficient, but it doesn't matter since
-  // we'd prefer people to use wxString::Printf directly instead anyway
-  wxString str;
-  str.PrintfV(fmt,argptr);
-  wxStrcpy(buf,str.c_str());
-  return str.Len();
-}
-
-int WXDLLEXPORT wxSscanf(const wxChar *buf, const wxChar *fmt, ...)
-{
-  va_list argptr;
-  int ret;
-
-  va_start(argptr, fmt);
-  ret = wxVsscanf(buf, fmt, argptr);
-  va_end(argptr);
-  return ret;
-}
-
-int WXDLLEXPORT wxVsscanf(const wxChar *buf, const wxChar *fmt, va_list argptr)
-{
-  int ret;
-  // this will work only for numeric conversion! Strings will not be converted correctly
-  // hopefully this is all we'll need
-  ret = vsscanf(wxConvLibc.cWX2MB(buf), wxConvLibc.cWX2MB(fmt), argptr);
-  return ret;
-}
 #endif
 
 #ifndef wxAtof