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);
}