From 3aa077cebc213cd81734ff62809df1611c40fc86 Mon Sep 17 00:00:00 2001 From: Michael Wetherell Date: Thu, 1 Jun 2006 09:44:35 +0000 Subject: [PATCH] Build fix for systems linux where va_list is an array type. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39508 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/wxchar.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/common/wxchar.cpp b/src/common/wxchar.cpp index 3532e0533b..56095eefa8 100644 --- a/src/common/wxchar.cpp +++ b/src/common/wxchar.cpp @@ -958,15 +958,25 @@ int WXDLLEXPORT wxVsnprintf_(wxChar *buf, size_t lenMax, return -1; // format strings with both positional and // non-positional conversion specifier are unsupported !! + // on platforms where va_list is an array type, it is necessary to make a + // copy to be able to pass it to LoadArg as a reference. + bool ok = true; + va_list ap; + wxVaCopy(ap, argptr); + // now load arguments from stack - for (i=0; i < nargs; i++) { - if (!pspec[i]) - return -1; // user forgot a positional parameter (e.g. %$1s %$3s) ? - if (!pspec[i]->LoadArg(&argdata[i], argptr)) - return -1; // this means that wxPrintfConvSpec::Parse failed - // to set its 'type' to a valid value... + for (i=0; i < nargs && ok; i++) { + // !pspec[i] if user forgot a positional parameter (e.g. %$1s %$3s) ? + // or LoadArg false if wxPrintfConvSpec::Parse failed to set its 'type' + // to a valid value... + ok = pspec[i] && pspec[i]->LoadArg(&argdata[i], ap); } + va_end(ap); + + if (!ok) + return -1; + // finally, process each conversion specifier with its own argument toparse = format; for (i=0; i < nargs; i++) -- 2.45.2