svn commit: r308053 - stable/11/cddl/contrib/opensolaris/lib/libdtrace/common
George V. Neville-Neil
gnn at FreeBSD.org
Fri Oct 28 16:27:59 UTC 2016
Author: gnn
Date: Fri Oct 28 16:27:58 2016
New Revision: 308053
URL: https://svnweb.freebsd.org/changeset/base/308053
Log:
Corrected non-portable reuse of va_list in dt_printf()
Submitted by: Graeme Jenkinson
Reviewed by: markj
Modified:
stable/11/cddl/contrib/opensolaris/lib/libdtrace/common/dt_subr.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/cddl/contrib/opensolaris/lib/libdtrace/common/dt_subr.c
==============================================================================
--- stable/11/cddl/contrib/opensolaris/lib/libdtrace/common/dt_subr.c Fri Oct 28 16:22:45 2016 (r308052)
+++ stable/11/cddl/contrib/opensolaris/lib/libdtrace/common/dt_subr.c Fri Oct 28 16:27:58 2016 (r308053)
@@ -581,6 +581,7 @@ int
dt_printf(dtrace_hdl_t *dtp, FILE *fp, const char *format, ...)
{
va_list ap;
+ va_list ap2;
int n;
#ifndef illumos
@@ -605,11 +606,13 @@ dt_printf(dtrace_hdl_t *dtp, FILE *fp, c
len = dtp->dt_sprintf_buflen - len;
assert(len >= 0);
- if ((n = vsnprintf(buf, len, format, ap)) < 0)
+ va_copy(ap2, ap);
+ if ((n = vsnprintf(buf, len, format, ap2)) < 0)
n = dt_set_errno(dtp, errno);
+ va_end(ap2);
va_end(ap);
-
+
return (n);
}
@@ -640,11 +643,14 @@ dt_printf(dtrace_hdl_t *dtp, FILE *fp, c
dtp->dt_buffered_buf[0] = '\0';
}
- if ((needed = vsnprintf(NULL, 0, format, ap)) < 0) {
+ va_copy(ap2, ap);
+ if ((needed = vsnprintf(NULL, 0, format, ap2)) < 0) {
rval = dt_set_errno(dtp, errno);
+ va_end(ap2);
va_end(ap);
return (rval);
}
+ va_end(ap2);
if (needed == 0) {
va_end(ap);
@@ -670,12 +676,15 @@ dt_printf(dtrace_hdl_t *dtp, FILE *fp, c
dtp->dt_buffered_size <<= 1;
}
+ va_copy(ap2, ap);
if (vsnprintf(&dtp->dt_buffered_buf[dtp->dt_buffered_offs],
- avail, format, ap) < 0) {
+ avail, format, ap2) < 0) {
rval = dt_set_errno(dtp, errno);
+ va_end(ap2);
va_end(ap);
return (rval);
}
+ va_end(ap2);
dtp->dt_buffered_offs += needed;
assert(dtp->dt_buffered_buf[dtp->dt_buffered_offs] == '\0');
@@ -683,8 +692,10 @@ dt_printf(dtrace_hdl_t *dtp, FILE *fp, c
return (0);
}
- n = vfprintf(fp, format, ap);
+ va_copy(ap2, ap);
+ n = vfprintf(fp, format, ap2);
fflush(fp);
+ va_end(ap2);
va_end(ap);
if (n < 0) {
More information about the svn-src-stable-11
mailing list