Loading...
--- Libc/Libc-763.12/man/stdarg.3
+++ Libc/Libc-498.1.7/man/stdarg.3
@@ -1,3 +1,5 @@
+.\"	$NetBSD: stdarg.3,v 1.3 1994/11/30 15:24:37 jtc Exp $
+.\"
 .\" Copyright (c) 1990, 1991, 1993
 .\"	The Regents of the University of California.  All rights reserved.
 .\"
@@ -34,29 +36,26 @@
 .\" SUCH DAMAGE.
 .\"
 .\"	@(#)stdarg.3	8.1 (Berkeley) 6/5/93
-.\" $FreeBSD: src/share/man/man3/stdarg.3,v 1.15 2005/01/21 08:36:36 ru Exp $
-.\"
-.Dd October 25, 2002
+.\"
+.Dd June 5, 1993
 .Dt STDARG 3
 .Os
 .Sh NAME
 .Nm stdarg
 .Nd variable argument lists
 .Sh SYNOPSIS
-.In stdarg.h
+.Fd #include <stdarg.h>
 .Ft void
 .Fn va_start "va_list ap" last
 .Ft type
 .Fn va_arg "va_list ap" type
-.Ft void
-.Fn va_copy "va_list dest" "va_list src"
 .Ft void
 .Fn va_end "va_list ap"
 .Sh DESCRIPTION
 A function may be called with a varying number of arguments of varying
 types.
 The include file
-.In stdarg.h
+.Aq Pa stdarg.h
 declares a type
 .Pq Em va_list
 and defines three macros for stepping
@@ -68,37 +67,32 @@
 which is used by the macros
 .Fn va_start ,
 .Fn va_arg ,
-.Fn va_copy ,
 and
 .Fn va_end .
 .Pp
 The
 .Fn va_start
-macro must be called first, and it initializes
-.Fa ap ,
-which can be passed to
-.Fn va_arg
-for each argument to be processed.
-Calling
-.Fn va_end
-signals that there are no further arguments, and causes
+macro initializes
 .Fa ap
-to be invalidated.
-Note that each call to
-.Fn va_start
-must be matched by a call to
+for subsequent use by
+.Fn va_arg
+and
 .Fn va_end ,
-from within the same function.
+and must be called first.
 .Pp
 The parameter
 .Fa last
 is the name of the last parameter before the variable argument list,
-i.e., the last parameter of which the calling function knows the type.
+i.e. the last parameter of which the calling function knows the type.
 .Pp
 Because the address of this parameter is used in the
 .Fn va_start
 macro, it should not be declared as a register variable, or as a
 function or an array type.
+.Pp
+The
+.Fn va_start
+macro returns no value.
 .Pp
 The
 .Fn va_arg
@@ -106,11 +100,11 @@
 argument in the call.
 The parameter
 .Fa ap
-is the
+is the 
 .Em va_list Fa ap
 initialized by
 .Fn va_start .
-Each call to
+Each call to 
 .Fn va_arg
 modifies
 .Fa ap
@@ -118,7 +112,7 @@
 The parameter
 .Fa type
 is a type name specified so that the type of a pointer to an
-object that has the specified type can be obtained simply by
+object that has the specified type can be obtained simply by 
 adding a *
 to
 .Fa type .
@@ -131,47 +125,22 @@
 .Pp
 The first use of the
 .Fn va_arg
-macro after that of the
-.Fn va_start
-macro returns the argument after
+macro after that of the 
+.Fn va_start
+macro returns the argument after 
 .Fa last .
 Successive invocations return the values of the remaining
 arguments.
 .Pp
 The
-.Fn va_copy
-macro copies the state of the variable argument list, 
-.Fa src ,
-previously initialized by
-.Fn va_start ,
-to the variable argument list,
-.Fa dest ,
-which must not have been previously initialized by
-.Fn va_start ,
-without an intervening call to
-.Fn va_end .
-The state preserved in
-.Fa dest
-is equivalent to calling
-.Fn va_start
-and
-.Fn va_arg
-on
-.Fa dest
-in the same way as was used on
-.Fa src .
-The copied variable argument list can subsequently be passed to
-.Fn va_arg ,
-and must finally be passed to
 .Fn va_end
-when through with it.
-.Pp
-After a variable argument list is invalidated by
-.Fn va_end ,
-it can be reinitialized with
-.Fn va_start
-or made a copy of another variable argument list with
-.Fn va_copy .
+macro handles a normal return from the function whose variable argument
+list was initialized by 
+.Fn va_start .
+.Pp
+The
+.Fn va_end
+macro returns no value.
 .Sh EXAMPLES
 The function
 .Em foo
@@ -180,12 +149,11 @@
 .Bd -literal -offset indent
 void foo(char *fmt, ...)
 {
-	va_list ap, ap2;
+	va_list ap;
 	int d;
-	char c, *s;
+	char c, *p, *s;
 
 	va_start(ap, fmt);
-	va_copy(ap2, ap);
 	while (*fmt)
 		switch(*fmt++) {
 		case 's':			/* string */
@@ -197,45 +165,39 @@
 			printf("int %d\en", d);
 			break;
 		case 'c':			/* char */
-			/* Note: char is promoted to int. */
-			c = va_arg(ap, int);
+			c = va_arg(ap, char);
 			printf("char %c\en", c);
 			break;
 		}
 	va_end(ap);
-	...
-	/* use ap2 to iterate over the arguments again */
-	...
-	va_end(ap2);
 }
 .Ed
+.Sh STANDARDS
+The
+.Fn va_start ,
+.Fn va_arg ,
+and
+.Fn va_end
+macros conform to
+.St -ansiC .
 .Sh COMPATIBILITY
 These macros are
 .Em not
 compatible with the historic macros they replace.
 A backward compatible version can be found in the include
-file
-.In varargs.h .
-.Sh STANDARDS
-The
-.Fn va_start ,
-.Fn va_arg ,
-.Fn va_copy ,
-and
-.Fn va_end
-macros conform to
-.St -isoC-99 .
+file 
+.Aq Pa varargs.h .
 .Sh BUGS
 Unlike the
 .Em varargs
 macros, the
-.Nm
+.Nm stdarg
 macros do not permit programmers to
 code a function with no fixed arguments.
 This problem generates work mainly when converting
 .Em varargs
 code to
-.Nm
+.Nm stdarg
 code,
 but it also creates difficulties for variadic functions that
 wish to pass all of their arguments on to a function