about summary refs log tree commit diff
path: root/manual/stdio.texi
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2015-10-17 12:02:22 +0200
committerFlorian Weimer <fweimer@redhat.com>2015-10-17 12:02:22 +0200
commitf546f87c4ffb1642ffc96b8d614c329ed35252c3 (patch)
treeadb75afb2d8b6432fd738bed624cde26f6c403c8 /manual/stdio.texi
parent213938ee8ad50156063c3b38c3d236c6f713eb4a (diff)
downloadglibc-f546f87c4ffb1642ffc96b8d614c329ed35252c3.tar.gz
glibc-f546f87c4ffb1642ffc96b8d614c329ed35252c3.tar.xz
glibc-f546f87c4ffb1642ffc96b8d614c329ed35252c3.zip
The va_list pointer is unspecified after a call to vfprintf [BZ #18982]
This adjusts the documentation to the existing implementation.
Diffstat (limited to 'manual/stdio.texi')
-rw-r--r--manual/stdio.texi24
1 files changed, 10 insertions, 14 deletions
diff --git a/manual/stdio.texi b/manual/stdio.texi
index 5d317747f5..c0753b19cd 100644
--- a/manual/stdio.texi
+++ b/manual/stdio.texi
@@ -2621,20 +2621,16 @@ choice, you are ready to call @code{vprintf}.  That argument and all
 subsequent arguments that were passed to your function are used by
 @code{vprintf} along with the template that you specified separately.
 
-In some other systems, the @code{va_list} pointer may become invalid
-after the call to @code{vprintf}, so you must not use @code{va_arg}
-after you call @code{vprintf}.  Instead, you should call @code{va_end}
-to retire the pointer from service.  However, you can safely call
-@code{va_start} on another pointer variable and begin fetching the
-arguments again through that pointer.  Calling @code{vprintf} does not
-destroy the argument list of your function, merely the particular
-pointer that you passed to it.
-
-GNU C does not have such restrictions.  You can safely continue to fetch
-arguments from a @code{va_list} pointer after passing it to
-@code{vprintf}, and @code{va_end} is a no-op.  (Note, however, that
-subsequent @code{va_arg} calls will fetch the same arguments which
-@code{vprintf} previously used.)
+@strong{Portability Note:} The value of the @code{va_list} pointer is
+undetermined after the call to @code{vprintf}, so you must not use
+@code{va_arg} after you call @code{vprintf}.  Instead, you should call
+@code{va_end} to retire the pointer from service.  You can call
+@code{va_start} again and begin fetching the arguments from the start of
+the variable argument list.  (Alternatively, you can use @code{va_copy}
+to make a copy of the @code{va_list} pointer before calling
+@code{vfprintf}.)  Calling @code{vprintf} does not destroy the argument
+list of your function, merely the particular pointer that you passed to
+it.
 
 Prototypes for these functions are declared in @file{stdio.h}.
 @pindex stdio.h