Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/share/man/man3 Add a separate varargs(3) manual page, reusin...
details: https://anonhg.NetBSD.org/src/rev/0773d67febd2
branches: trunk
changeset: 521757:0773d67febd2
user: kleink <kleink%NetBSD.org@localhost>
date: Mon Feb 04 20:09:46 2002 +0000
description:
Add a separate varargs(3) manual page, reusing stdarg(3) contents, and
remove the name `varargs' from stdarg(3); inspired by conversation with
Charles Hannum.
diffstat:
share/man/man3/Makefile | 6 +-
share/man/man3/stdarg.3 | 3 +-
share/man/man3/varargs.3 | 206 +++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 210 insertions(+), 5 deletions(-)
diffs (250 lines):
diff -r 12a718b48f7b -r 0773d67febd2 share/man/man3/Makefile
--- a/share/man/man3/Makefile Mon Feb 04 19:07:47 2002 +0000
+++ b/share/man/man3/Makefile Mon Feb 04 20:09:46 2002 +0000
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.22 2001/10/22 04:37:57 lukem Exp $
+# $NetBSD: Makefile,v 1.23 2002/02/04 20:09:46 kleink Exp $
# @(#)Makefile 8.2 (Berkeley) 12/13/93
MAN= _DIAGASSERT.3 assert.3 bitstring.3 dlfcn.3 end.3 intro.3 queue.3 \
- stdarg.3
+ stdarg.3 varargs.3
MLINKS+=end.3 edata.3 end.3 etext.3
MLINKS+=queue.3 LIST_EMPTY.3
MLINKS+=queue.3 LIST_ENTRY.3 queue.3 LIST_FIRST.3 queue.3 LIST_HEAD.3
@@ -28,7 +28,7 @@
MLINKS+=queue.3 CIRCLEQ_INSERT_HEAD.3 queue.3 CIRCLEQ_INSERT_TAIL.3
MLINKS+=queue.3 CIRCLEQ_LAST.3 queue.3 CIRCLEQ_NEXT.3 queue.3 CIRCLEQ_PREV.3
MLINKS+=queue.3 CIRCLEQ_REMOVE.3
-MLINKS+=stdarg.3 varargs.3 stdarg.3 va_arg.3 stdarg.3 va_copy.3 \
+MLINKS+=stdarg.3 va_arg.3 stdarg.3 va_copy.3 \
stdarg.3 va_end.3 stdarg.3 va_start.3
MLINKS+=dlfcn.3 dlopen.3 dlfcn.3 dlclose.3 dlfcn.3 dlsym.3 dlfcn.3 dlctl.3 \
dlfcn.3 dlerror.3 dlfcn.3 dladdr.3
diff -r 12a718b48f7b -r 0773d67febd2 share/man/man3/stdarg.3
--- a/share/man/man3/stdarg.3 Mon Feb 04 19:07:47 2002 +0000
+++ b/share/man/man3/stdarg.3 Mon Feb 04 20:09:46 2002 +0000
@@ -1,4 +1,4 @@
-.\" $NetBSD: stdarg.3,v 1.11 2002/02/04 18:27:38 kleink Exp $
+.\" $NetBSD: stdarg.3,v 1.12 2002/02/04 20:09:46 kleink Exp $
.\"
.\" Copyright (c) 1990, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -42,7 +42,6 @@
.Os
.Sh NAME
.Nm stdarg ,
-.Nm varargs ,
.Nm va_arg ,
.Nm va_copy ,
.Nm va_end ,
diff -r 12a718b48f7b -r 0773d67febd2 share/man/man3/varargs.3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/share/man/man3/varargs.3 Mon Feb 04 20:09:46 2002 +0000
@@ -0,0 +1,206 @@
+.\" $NetBSD: varargs.3,v 1.1 2002/02/04 20:09:46 kleink Exp $
+.\"
+.\" Copyright (c) 1990, 1991, 1993
+.\" The Regents of the University of California. All rights reserved.
+.\"
+.\" This code is derived from software contributed to Berkeley by
+.\" the American National Standards Committee X3, on Information
+.\" Processing Systems.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed by the University of
+.\" California, Berkeley and its contributors.
+.\" 4. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" From:
+.\" (#)stdarg.3 8.1 (Berkeley) 6/5/93
+.\" NetBSD: stdarg.3,v 1.11 2002/02/04 18:27:38 kleink Exp
+.\"
+.Dd February 4, 2002
+.Dt VARARGS 3
+.Os
+.Sh NAME
+.Nm varargs
+.Nd variable argument lists
+.Sh SYNOPSIS
+.Fd #include <varargs.h>
+.Ft void
+.Fn va_start "va_list ap"
+.Ft type
+.Fn va_arg "va_list ap" type
+.Ft void
+.Fn va_end "va_list ap"
+.Sh DESCRIPTION
+.Bf -symbolic
+These historic interfaces are provided to support compilation of
+existing programs only.
+New code should use the
+.Xr stdarg 3
+interfaces.
+.Ef
+.Pp
+A function may be called with a varying number of arguments of varying
+types.
+The include file
+.Aq Pa varargs.h
+declares a type
+.Pq Em va_list
+and defines three macros for stepping
+through a list of arguments whose number and types are not known to
+the called function.
+.Pp
+The called function must name an argument
+.Fa va_alist ,
+which marks the start of the variable argument list,
+and which is naturally the last argument named.
+It is declared by
+.Fa va_dcl ,
+which should not be followed by a semicolon.
+The called function also must declare an object of type
+.Em va_list
+which is used by the macros
+.Fn va_start ,
+.Fn va_arg ,
+and
+.Fn va_end .
+.Pp
+The
+.Fn va_start
+macro initializes
+.Fa ap
+for subsequent use by
+.Fn va_arg
+and
+.Fn va_end ,
+and must be called first.
+.Pp
+It is possible for
+.Fa va_alist
+to be the only parameter to a function, resulting in it being possible
+for a function to have no fixed arguments preceeding the variable
+argument list.
+.Pp
+The
+.Fn va_start
+macro returns no value.
+.Pp
+The
+.Fn va_arg
+macro expands to an expression that has the type and value of the next
+argument in the call.
+The parameter
+.Fa ap
+is the
+.Em va_list Fa ap
+initialized by
+.Fn va_start .
+Each call to
+.Fn va_arg
+modifies
+.Fa ap
+so that the next call returns the next argument.
+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
+adding a *
+to
+.Fa type .
+.Pp
+If there is no next argument, or if
+.Fa type
+is not compatible with the type of the actual next argument
+(as promoted according to the default argument promotions),
+random errors will occur.
+.Pp
+The first use of the
+.Fn va_arg
+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_end
+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
+takes a string of format characters and prints out the argument
+associated with each format character based on the type.
+.Bd -literal -offset indent
+void foo(fmt, va_alist)
+ char *fmt;
+ va_dcl
+{
+ va_list ap;
+ int d;
+ char c, *p, *s;
+
+ va_start(ap);
+ while (*fmt)
+ switch (*fmt++) {
+ case 's': /* string */
+ s = va_arg(ap, char *);
+ printf("string %s\en", s);
+ break;
+ case 'd': /* int */
+ d = va_arg(ap, int);
+ printf("int %d\en", d);
+ break;
+ case 'c': /* char */
+ c = va_arg(ap, char);
+ printf("char %c\en", c);
+ break;
+ }
+ va_end(ap);
+}
+.Ed
+.Sh SEE ALSO
+.Xr stdarg 3
+.Sh STANDARDS
+These historic macros were replaced in
+.St -ansiC
+by the include file
+.Aq Pa stdarg.h ;
+see
+.Xr stdarg 3
+for its description.
+.Sh COMPATIBILITY
+These macros are
+.Em not
+compatible with the new macros they were replaced by.
+In particular, it is not possible for a
+.Em stdarg
+function to have no fixed arguments.
Home |
Main Index |
Thread Index |
Old Index