You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by sj...@apache.org on 2010/03/23 03:20:29 UTC

svn commit: r926431 - /incubator/trafficserver/traffic/trunk/libinktomi++/ink_sprintf.cc

Author: sjiang
Date: Tue Mar 23 02:20:28 2010
New Revision: 926431

URL: http://svn.apache.org/viewvc?rev=926431&view=rev
Log:
TS-268: ink_bvsprintf should do a va_copy to be idempotent


Modified:
    incubator/trafficserver/traffic/trunk/libinktomi++/ink_sprintf.cc

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_sprintf.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_sprintf.cc?rev=926431&r1=926430&r2=926431&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_sprintf.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_sprintf.cc Tue Mar 23 02:20:28 2010
@@ -69,6 +69,8 @@ ink_bvsprintf(char *buffer, char *format
 {
   int d_val;
   char *s, *d, *p, *s_val, d_buffer[32];
+  va_list ap_local;
+  va_copy(ap_local, ap);
 
   s = format;
   d = buffer;
@@ -105,7 +107,7 @@ ink_bvsprintf(char *buffer, char *format
     {
     case 's':                  // %s pattern
       ++s;                      // consume 's'
-      s_val = va_arg(ap, char *);       // grab string argument
+      s_val = va_arg(ap_local, char *);       // grab string argument
       p = s_val;                // temporary pointer
       if (buffer)               // if have output buffer
         while (*p) {
@@ -119,7 +121,7 @@ ink_bvsprintf(char *buffer, char *format
       break;
     case 'd':                  // %d pattern
       ++s;                      // consume 'd'
-      d_val = va_arg(ap, int);  // grab integer argument
+      d_val = va_arg(ap_local, int);  // grab integer argument
       snprintf(d_buffer, sizeof(d_buffer), "%d", d_val);        // stringify integer
       p = d_buffer;             // temporary pointer
       if (buffer)               // if have output buffer
@@ -145,5 +147,6 @@ ink_bvsprintf(char *buffer, char *format
     *d = NUL;
   ++d;
 
+  va_end(ap_local);
   return (int) (d - buffer);
 }