[vlc-devel] commit: Revert "win32: make vlc_vsnprintf more like c99 vsnprintf" ( Jean-Baptiste Kempf )

git version control git at videolan.org
Thu Apr 9 22:34:57 CEST 2009


vlc | branch: master | Jean-Baptiste Kempf <jb at videolan.org> | Thu Apr  9 20:58:54 2009 +0200| [ff3ff3ee0f36513d18ac102f5359ac607771d791] | committer: Jean-Baptiste Kempf 

Revert "win32: make vlc_vsnprintf more like c99 vsnprintf"

This reverts commit 30f33e7a0e3726404e4b9d2f51840e8de1a527f3.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ff3ff3ee0f36513d18ac102f5359ac607771d791
---

 include/vlc_fixups.h |   33 ++++++++-------------------------
 1 files changed, 8 insertions(+), 25 deletions(-)

diff --git a/include/vlc_fixups.h b/include/vlc_fixups.h
index 6914daa..6088eb5 100644
--- a/include/vlc_fixups.h
+++ b/include/vlc_fixups.h
@@ -123,7 +123,6 @@ static inline int vlc_vsprintf (char *str, const char *format, va_list ap)
 }
 # define vsprintf vlc_vsprintf
 
-static inline int vasprintf (char **strp, const char *fmt, va_list ap);
 static inline int vlc_vsnprintf (char *str, size_t size, const char *format, va_list ap)
 {
     int must_free = vlc_fix_format_string (&format);
@@ -131,18 +130,7 @@ static inline int vlc_vsnprintf (char *str, size_t size, const char *format, va_
      * to 'aid' portability/standards compliance, mingw provides a
      * static version of vsnprintf that is buggy.  Be sure to use
      * MSVCRT version, at least it behaves as expected */
-    /* MSVCRT _vsnprintf does not:
-     *  - null terminate string if insufficient storage
-     *  - return the number of characters that would've been written
-     */
-    int ret = _vsnprintf (str, size-1, format, ap);
-    str[size-1] = 0; /* ensure the null gets written */
-    if (ret == -1)
-    {
-        /* work out the number of chars that should've been written */
-        ret = vasprintf (&str, format, ap);
-        if (ret >= 0 && str) free (str);
-    }
+    int ret = _vsnprintf (str, size, format, ap);
     if (must_free) free ((char *)format);
     return ret;
 }
@@ -207,7 +195,7 @@ static inline int vlc_snprintf (char *str, size_t size, const char *format, ...)
 # include <stdarg.h>
 static inline int vasprintf (char **strp, const char *fmt, va_list ap)
 {
-#ifndef WIN32
+#ifndef UNDER_CE
     int len = vsnprintf (NULL, 0, fmt, ap) + 1;
     char *res = (char *)malloc (len);
     if (res == NULL)
@@ -215,31 +203,27 @@ static inline int vasprintf (char **strp, const char *fmt, va_list ap)
     *strp = res;
     return vsnprintf (res, len, fmt, ap);
 #else
-    /* HACK: vsnprintf in the Win32 API behaves like
+    /* HACK: vsnprintf in the WinCE API behaves like
      * the one in glibc 2.0 and doesn't return the number of characters
      * it needed to copy the string.
      * cf http://msdn.microsoft.com/en-us/library/1kt27hek.aspx
      * and cf the man page of vsnprintf
-     */
-    int must_free = vlc_fix_format_string (&fmt);
-    int n, size = 2 * strlen (fmt);
+     *
+     Guess we need no more than 50 bytes. */
+    int n, size = 50;
     char *res, *np;
 
     if ((res = (char *) malloc (size)) == NULL)
-    {
-        if (must_free) free ((char *)fmt);
         return -1;
-    }
 
     while (1)
     {
-        n = _vsnprintf (res, size, fmt, ap);
+        n = vsnprintf (res, size, fmt, ap);
 
         /* If that worked, return the string. */
         if (n > -1 && n < size)
         {
             *strp = res;
-            if (must_free) free ((char *)fmt);
             return n;
         }
 
@@ -249,7 +233,6 @@ static inline int vasprintf (char **strp, const char *fmt, va_list ap)
         if ((np = (char *) realloc (res, size)) == NULL)
         {
             free(res);
-            if (must_free) free ((char *)fmt);
             return -1;
         }
         else
@@ -258,7 +241,7 @@ static inline int vasprintf (char **strp, const char *fmt, va_list ap)
         }
 
     }
-#endif /* WIN32 */
+#endif /* UNDER_CE */
 }
 #endif
 




More information about the vlc-devel mailing list