diff options
author | Eric Blake <eblake@redhat.com> | 2007-05-04 02:55:16 +0000 |
---|---|---|
committer | Eric Blake <eblake@redhat.com> | 2007-05-04 02:55:16 +0000 |
commit | b9db5292223d1e716a126b5db8a69391ba4ef73e (patch) | |
tree | 15865fe52e65c81bee2654b162c38aeed9743c29 /newlib/libc/stdio/viprintf.c | |
parent | fb3937fade3487b7bd181bc6ab50c74637b6757f (diff) | |
download | cygnal-b9db5292223d1e716a126b5db8a69391ba4ef73e.tar.gz cygnal-b9db5292223d1e716a126b5db8a69391ba4ef73e.tar.bz2 cygnal-b9db5292223d1e716a126b5db8a69391ba4ef73e.zip |
Add support for asnprintf, and improve *printf documentation.
* libc/stdio/Makefile.am (ELIX_SOURCES): Rename...
(ELIX_2_SOURCES): ...to this.
(ELIX_4_SOURCES): Add new variable. Build asnprintf.
(GENERAL_SOURCES): Move dprintf to ELIX_4_SOURCES.
(CHEWOUT_FILES): Include diprintf in documentation.
* libc/stdio/Makefile.in: Regenerate.
* libc/stdio/diprintf.c: Improve documentation.
* libc/stdio/dprintf.c: Likewise.
* libc/stdio/siprintf.c: Likewise.
* libc/stdio/sprintf.c: Likewise.
* libc/stdio/vfprintf.c: Likewise.
* libc/stdio/viprintf.c: Likewise.
* libc/stdio/vsniprintf.c: Consolidate documentation.
* libc/stdio/asiprintf.c: Refer to documentation.
* libc/stdio/asprintf.c: Likewise.
* libc/stdio/fiprintf.c: Likewise.
* libc/stdio/fprintf.c: Likewise.
* libc/stdio/iprintf.c: Likewise.
* libc/stdio/printf.c: Likewise.
* libc/stdio/sniprintf.c: Likewise.
* libc/stdio/vdiprintf.c: Likewise.
* libc/stdio/vdprintf.c: Likewise.
* libc/stdio/vsiprintf.c: Likewise.
* libc/stdio/fvwrite.c (__sfvwrite_r): Handle asnprintf.
* libc/stdio/asniprintf.c (asniprintf, _asniprintf_r): New file.
* libc/stdio/asnprintf.c (asnprintf, _asnprintf_r): New file.
* libc/stdio/vasniprintf.c (vasniprintf, _vasniprintf_r): New
file.
* libc/stdio/vasnprintf.c (vasnprintf, _vasnprintf_r): New file.
* libc/stdio/vdprintf.c (_vdprintf_r): Rewrite to avoid malloc in
typical case.
* libc/stdio/vdiprintf.c (_vdiprintf_r): Likewise.
* libc/include/stdio.h: Add prototypes for new functions; sort
existing functions.
Diffstat (limited to 'newlib/libc/stdio/viprintf.c')
-rw-r--r-- | newlib/libc/stdio/viprintf.c | 103 |
1 files changed, 28 insertions, 75 deletions
diff --git a/newlib/libc/stdio/viprintf.c b/newlib/libc/stdio/viprintf.c index cea96d3db..f5c27c89c 100644 --- a/newlib/libc/stdio/viprintf.c +++ b/newlib/libc/stdio/viprintf.c @@ -17,7 +17,7 @@ /* FUNCTION -<<viprintf>>, <<vfiprintf>>, <<vsiprintf>>---format argument list +<<viprintf>>, <<vfiprintf>>, <<vsiprintf>>, <<vsniprintf>>, <<vasiprintf>>, <<vasniprintf>>---format argument list (integer only) INDEX viprintf @@ -27,6 +27,10 @@ INDEX vsiprintf INDEX vsniprintf +INDEX + vasiprintf +INDEX + vasniprintf ANSI_SYNOPSIS #include <stdio.h> @@ -34,96 +38,45 @@ ANSI_SYNOPSIS int viprintf(const char *<[fmt]>, va_list <[list]>); int vfiprintf(FILE *<[fp]>, const char *<[fmt]>, va_list <[list]>); int vsiprintf(char *<[str]>, const char *<[fmt]>, va_list <[list]>); - int vasiprintf(char **<[strp]>, const char *<[fmt]>, va_list <[list]>); int vsniprintf(char *<[str]>, size_t <[size]>, const char *<[fmt]>, va_list <[list]>); + int vasiprintf(char **<[strp]>, const char *<[fmt]>, va_list <[list]>); + char *vasniprintf(char *<[str]>, size_t *<[size]>, const char *<[fmt]>, + va_list <[list]>); int _viprintf_r(struct _reent *<[reent]>, const char *<[fmt]>, va_list <[list]>); int _vfiprintf_r(struct _reent *<[reent]>, FILE *<[fp]>, const char *<[fmt]>, va_list <[list]>); - int _vasiprintf_r(struct _reent *<[reent]>, char **<[str]>, - const char *<[fmt]>, va_list <[list]>); int _vsiprintf_r(struct _reent *<[reent]>, char *<[str]>, const char *<[fmt]>, va_list <[list]>); - int _vsniprintf_r(struct _reent *<[reent]>, char *<[str]>, size_t <[size]>, - const char *<[fmt]>, va_list <[list]>); - -TRAD_SYNOPSIS - #include <stdio.h> - #include <varargs.h> - int viprintf( <[fmt]>, <[list]>) - char *<[fmt]>; - va_list <[list]>; - - int vfiprintf(<[fp]>, <[fmt]>, <[list]>) - FILE *<[fp]>; - char *<[fmt]>; - va_list <[list]>; - - int vasiprintf(<[strp]>, <[fmt]>, <[list]>) - char **<[strp]>; - char *<[fmt]>; - va_list <[list]>; - - int vsiprintf(<[str]>, <[fmt]>, <[list]>) - char *<[str]>; - char *<[fmt]>; - va_list <[list]>; - - int vsniprintf(<[str]>, <[size]>, <[fmt]>, <[list]>) - char *<[str]>; - size_t <[size]>; - char *<[fmt]>; - va_list <[list]>; - - int _viprintf_r(<[reent]>, <[fmt]>, <[list]>) - struct _reent *<[reent]>; - char *<[fmt]>; - va_list <[list]>; - - int _vfiprintf_r(<[reent]>, <[fp]>, <[fmt]>, <[list]>) - struct _reent *<[reent]>; - FILE *<[fp]>; - char *<[fmt]>; - va_list <[list]>; - - int _vasiprintf_r(<[reent]>, <[strp]>, <[fmt]>, <[list]>) - struct _reent *<[reent]>; - char **<[strp]>; - char *<[fmt]>; - va_list <[list]>; - - int _vsiprintf_r(<[reent]>, <[str]>, <[fmt]>, <[list]>) - struct _reent *<[reent]>; - char *<[str]>; - char *<[fmt]>; - va_list <[list]>; - - int _vsniprintf_r(<[reent]>, <[str]>, <[size]>, <[fmt]>, <[list]>) - struct _reent *<[reent]>; - char *<[str]>; - size_t <[size]>; - char *<[fmt]>; - va_list <[list]>; + int _vsniprintf_r(struct _reent *<[reent]>, char *<[str]>, + size_t <[size]>, const char *<[fmt]>, + va_list <[list]>); + int _vasiprintf_r(struct _reent *<[reent]>, char **<[str]>, + const char *<[fmt]>, va_list <[list]>); + char *_vasniprintf_r(struct _reent *<[reent]>, char *<[str]>, + size_t *<[size]>, const char *<[fmt]>, + va_list <[list]>); DESCRIPTION -<<viprintf>>, <<vfiprintf>>, <<vasiprintf>>, <<vsiprintf>> and -<<vsniprintf>> are (respectively) variants of <<iprintf>>, <<fiprintf>>, -<<asiprintf>>, <<siprintf>>, and <<sniprintf>>. They differ only in -restricting the caller to use non-floating-point format specifiers. +<<viprintf>>, <<vfiprintf>>, <<vasiprintf>>, <<vsiprintf>>, +<<vsniprintf>>, and <<vasniprintf>> are (respectively) variants of +<<iprintf>>, <<fiprintf>>, <<asiprintf>>, <<siprintf>>, <<sniprintf>>, +and <<asniprintf>>. They differ only in allowing their caller to pass +the variable argument list as a <<va_list>> object (initialized by +<<va_start>>) rather than directly accepting a variable number of +arguments. The caller is responsible for calling <<va_end>>. + +<<_viprintf_r>>, <<_vfiprintf_r>>, <<_vasiprintf_r>>, +<<_vsiprintf_r>>, <<_vsniprintf_r>>, and <<_vasniprintf_r>> are +reentrant versions of the above. RETURNS The return values are consistent with the corresponding functions: -<<vasiprintf>>/<<vsiprintf>> returns the number of bytes in the output string, -save that the concluding <<NULL>> is not counted. -<<viprintf>> and <<vfiprintf>> return the number of characters transmitted. -If an error occurs, <<viprintf>> and <<vfiprintf>> return <<EOF>> and -<<vasiprintf>> returns -1. No error returns occur for <<vsiprintf>>. PORTABILITY -<<viprintf>>, <<vfiprintf>>, <<vasiprintf>>, <<vsiprintf>> and <<vsniprintf>> -are newlib extensions. +All of these functions are newlib extensions. Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>, <<lseek>>, <<read>>, <<sbrk>>, <<write>>. |