]> source.dussan.org Git - tigervnc.git/commitdiff
Don't use one va_list variable twice in vsnprintf
authorAdam Tkac <atkac@redhat.com>
Tue, 3 Jun 2008 09:24:49 +0000 (09:24 +0000)
committerAdam Tkac <atkac@redhat.com>
Tue, 3 Jun 2008 09:24:49 +0000 (09:24 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2570 3789f03b-4d11-0410-bbf8-ca57d06f2519

common/rfb/Logger.cxx

index 52d33085576577aef130558cf7e499f5f5dc7763..6b9cfa315c6e7806785bb1e156022facd5068df0 100644 (file)
@@ -41,6 +41,9 @@ static Mutex fpLock;
 static FILE* fp = 0;
 int vsnprintf(char *str, size_t n, const char *format, va_list ap)
 {
+  va_list ap_new;
+  int len, written;
+
   str[0] = 0;
   if (!fp) {
     // Safely create a FILE* for /dev/null if there isn't already one
@@ -51,15 +54,19 @@ int vsnprintf(char *str, size_t n, const char *format, va_list ap)
       fp = fopen("/dev/null","w");
     if (!fp) return 0;
   }
-  int len = vfprintf(fp, format, ap);
+
+  va_copy(ap_new, ap);
+  len = vfprintf(fp, format, ap_new);
+  va_end(ap_new);
+
   if (len <= 0) return 0;
 
   CharArray s(len+1);
   vsprintf(s.buf, format, ap);
 
-  int written = __rfbmin(len, (int)n-1);
+  written = __rfbmin(len, (int)n-1);
   memcpy(str, s.buf, written);
-  str[written] = 0;
+  str[written] = '\0';
   return len;
 }
 #endif