summaryrefslogtreecommitdiffstats
path: root/newlib/libc/stdio/vfprintf.c
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/stdio/vfprintf.c')
-rw-r--r--newlib/libc/stdio/vfprintf.c465
1 files changed, 243 insertions, 222 deletions
diff --git a/newlib/libc/stdio/vfprintf.c b/newlib/libc/stdio/vfprintf.c
index 96fa4ba2e..b61c78d2c 100644
--- a/newlib/libc/stdio/vfprintf.c
+++ b/newlib/libc/stdio/vfprintf.c
@@ -1,4 +1,40 @@
/*
+ * Copyright (c) 1990 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek.
+ *
+ * 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.
+ */
+
+/*
FUNCTION
<<vprintf>>, <<vfprintf>>, <<vsprintf>>---format argument list
@@ -20,15 +56,15 @@ ANSI_SYNOPSIS
int vasprintf(char **<[strp]>, const char *<[fmt]>, va_list <[list]>);
int vsnprintf(char *<[str]>, size_t <[size]>, const char *<[fmt]>, va_list <[list]>);
- int _vprintf_r(void *<[reent]>, const char *<[fmt]>,
+ int _vprintf_r(struct _reent *<[reent]>, const char *<[fmt]>,
va_list <[list]>);
- int _vfprintf_r(void *<[reent]>, FILE *<[fp]>, const char *<[fmt]>,
+ int _vfprintf_r(struct _reent *<[reent]>, FILE *<[fp]>, const char *<[fmt]>,
va_list <[list]>);
- int _vasprintf_r(void *<[reent]>, char **<[str]>, const char *<[fmt]>,
+ int _vasprintf_r(struct _reent *<[reent]>, char **<[str]>, const char *<[fmt]>,
va_list <[list]>);
- int _vsprintf_r(void *<[reent]>, char *<[str]>, const char *<[fmt]>,
+ int _vsprintf_r(struct _reent *<[reent]>, char *<[str]>, const char *<[fmt]>,
va_list <[list]>);
- int _vsnprintf_r(void *<[reent]>, char *<[str]>, size_t <[size]>, const char *<[fmt]>,
+ int _vsnprintf_r(struct _reent *<[reent]>, char *<[str]>, size_t <[size]>, const char *<[fmt]>,
va_list <[list]>);
TRAD_SYNOPSIS
@@ -60,30 +96,30 @@ TRAD_SYNOPSIS
va_list <[list]>;
int _vprintf_r(<[reent]>, <[fmt]>, <[list]>)
- char *<[reent]>;
+ struct _reent *<[reent]>;
char *<[fmt]>;
va_list <[list]>;
int _vfprintf_r(<[reent]>, <[fp]>, <[fmt]>, <[list]>)
- char *<[reent]>;
+ struct _reent *<[reent]>;
FILE *<[fp]>;
char *<[fmt]>;
va_list <[list]>;
int _vasprintf_r(<[reent]>, <[strp]>, <[fmt]>, <[list]>)
- char *<[reent]>;
+ struct _reent *<[reent]>;
char **<[strp]>;
char *<[fmt]>;
va_list <[list]>;
int _vsprintf_r(<[reent]>, <[str]>, <[fmt]>, <[list]>)
- char *<[reent]>;
+ struct _reent *<[reent]>;
char *<[str]>;
char *<[fmt]>;
va_list <[list]>;
int _vsnprintf_r(<[reent]>, <[str]>, <[size]>, <[fmt]>, <[list]>)
- char *<[reent]>;
+ struct _reent *<[reent]>;
char *<[str]>;
size_t <[size]>;
char *<[fmt]>;
@@ -111,42 +147,6 @@ Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>,
<<lseek>>, <<read>>, <<sbrk>>, <<write>>.
*/
-/*
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * 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.
- */
-
#if defined(LIBC_SCCS) && !defined(lint)
/*static char *sccsid = "from: @(#)vfprintf.c 5.50 (Berkeley) 12/16/92";*/
static char *rcsid = "$Id$";
@@ -180,21 +180,19 @@ static char *rcsid = "$Id$";
#endif
#include <_ansi.h>
+#include <reent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
-#include <reent.h>
#include <wchar.h>
#include <string.h>
#include <sys/lock.h>
-
#ifdef _HAVE_STDC
#include <stdarg.h>
#else
#include <varargs.h>
#endif
-
#include "local.h"
#include "fvwrite.h"
#include "vfieeefp.h"
@@ -212,9 +210,9 @@ static char *rcsid = "$Id$";
* then reset it so that it can be reused.
*/
static int
-__sprint(fp, uio)
- FILE *fp;
- register struct __suio *uio;
+_DEFUN(__sprint, (fp, uio),
+ FILE *fp _AND
+ register struct __suio *uio)
{
register int err;
@@ -234,10 +232,10 @@ __sprint(fp, uio)
* worries about ungetc buffers and so forth.
*/
static int
-__sbprintf(fp, fmt, ap)
- register FILE *fp;
- const char *fmt;
- va_list ap;
+_DEFUN(__sbprintf, (fp, fmt, ap),
+ register FILE *fp _AND
+ _CONST char *fmt _AND
+ va_list ap)
{
int ret;
FILE fake;
@@ -251,14 +249,14 @@ __sbprintf(fp, fmt, ap)
/* set up the buffer */
fake._bf._base = fake._p = buf;
- fake._bf._size = fake._w = sizeof(buf);
+ fake._bf._size = fake._w = sizeof (buf);
fake._lbfsize = 0; /* not actually used, but Just In Case */
#ifndef __SINGLE_THREAD__
__lock_init_recursive (*(_LOCK_RECURSIVE_T *)&fake._lock);
#endif
/* do the work, then copy any error status */
- ret = VFPRINTF(&fake, fmt, ap);
+ ret = VFPRINTF (&fake, fmt, ap);
if (ret >= 0 && fflush(&fake))
ret = EOF;
if (fake._flags & __SERR)
@@ -285,13 +283,15 @@ __sbprintf(fp, fmt, ap)
#define DEFPREC 6
#ifdef _NO_LONGDBL
-static char *cvt _PARAMS((struct _reent *, double, int, int, char *, int *, int, int *));
+static char *
+_EXFUN(cvt, (struct _reent *, double, int, int, char *, int *, int, int *));
#else
-static char *cvt _PARAMS((struct _reent *, _LONG_DOUBLE, int, int, char *, int *, int, int *));
-extern int _ldcheck _PARAMS((_LONG_DOUBLE *));
+static char *
+_EXFUN(cvt, (struct _reent *, _LONG_DOUBLE, int, int, char *, int *, int, int *));
+extern int _EXFUN(_ldcheck,(_LONG_DOUBLE *));
#endif
-static int exponent _PARAMS((char *, int, int));
+static int _EXFUN(exponent, (char *, int, int));
#else /* no FLOATING_POINT */
@@ -308,7 +308,7 @@ static int exponent _PARAMS((char *, int, int));
#endif
typedef quad_t * quad_ptr_t;
-typedef void * void_ptr_t;
+typedef _PTR void_ptr_t;
typedef char * char_ptr_t;
typedef long * long_ptr_t;
typedef int * int_ptr_t;
@@ -337,16 +337,17 @@ union arg_val
wint_t val_wint_t;
};
-static union arg_val *get_arg (struct _reent *data, int n, char *fmt,
- va_list *ap, int *numargs, union arg_val *args,
- int *arg_type, char **last_fmt);
+static union arg_val *
+_EXFUN(get_arg, (struct _reent *data, int n, char *fmt,
+ va_list *ap, int *numargs, union arg_val *args,
+ int *arg_type, char **last_fmt));
#endif /* !_NO_POS_ARGS */
/*
* Macros for converting digits to letters and vice versa
*/
#define to_digit(c) ((c) - '0')
-#define is_digit(c) ((unsigned)to_digit(c) <= 9)
+#define is_digit(c) ((unsigned)to_digit (c) <= 9)
#define to_char(n) ((n) + '0')
/*
@@ -368,28 +369,28 @@ static union arg_val *get_arg (struct _reent *data, int n, char *fmt,
#define ZEROPAD 0x080 /* zero (as opposed to blank) pad */
#define FPT 0x100 /* Floating point number */
-int _EXFUN (_VFPRINTF_R, (struct _reent *, FILE *, _CONST char *, va_list));
+int _EXFUN(_VFPRINTF_R, (struct _reent *, FILE *, _CONST char *, va_list));
int
-_DEFUN (VFPRINTF, (fp, fmt0, ap),
- FILE * fp _AND
- _CONST char *fmt0 _AND
- va_list ap)
+_DEFUN(VFPRINTF, (fp, fmt0, ap),
+ FILE * fp _AND
+ _CONST char *fmt0 _AND
+ va_list ap)
{
int result;
- _flockfile(fp);
+ _flockfile (fp);
CHECK_INIT (fp);
result = _VFPRINTF_R (_REENT, fp, fmt0, ap);
- _funlockfile(fp);
+ _funlockfile (fp);
return result;
}
int
-_DEFUN (_VFPRINTF_R, (data, fp, fmt0, ap),
- struct _reent *data _AND
- FILE * fp _AND
- _CONST char *fmt0 _AND
- va_list ap)
+_DEFUN(_VFPRINTF_R, (data, fp, fmt0, ap),
+ struct _reent *data _AND
+ FILE * fp _AND
+ _CONST char *fmt0 _AND
+ va_list ap)
{
register char *fmt; /* format string */
register int ch; /* character from fmt */
@@ -476,10 +477,10 @@ _DEFUN (_VFPRINTF_R, (data, fp, fmt0, ap),
#define PAD(howmany, with) { \
if ((n = (howmany)) > 0) { \
while (n > PADSIZE) { \
- PRINT(with, PADSIZE); \
+ PRINT (with, PADSIZE); \
n -= PADSIZE; \
} \
- PRINT(with, n); \
+ PRINT (with, n); \
} \
}
#define FLUSH() { \
@@ -499,11 +500,11 @@ _DEFUN (_VFPRINTF_R, (data, fp, fmt0, ap),
: arg_index++ < numargs \
? args[n].val_##type \
: numargs < MAX_POS_ARGS \
- ? args[numargs++].val_##type = va_arg(ap, type) \
- : va_arg(ap, type) \
+ ? args[numargs++].val_##type = va_arg (ap, type) \
+ : va_arg (ap, type) \
)
#else
-#define GET_ARG(n, ap, type) (va_arg(ap, type))
+#define GET_ARG(n, ap, type) (va_arg (ap, type))
#endif
/*
@@ -512,34 +513,34 @@ _DEFUN (_VFPRINTF_R, (data, fp, fmt0, ap),
*/
#ifndef _NO_LONGLONG
#define SARG() \
- (flags&QUADINT ? GET_ARG(N, ap, quad_t) : \
- flags&LONGINT ? GET_ARG(N, ap, long) : \
- flags&SHORTINT ? (long)(short)GET_ARG(N, ap, int) : \
- (long)GET_ARG(N, ap, int))
+ (flags&QUADINT ? GET_ARG (N, ap, quad_t) : \
+ flags&LONGINT ? GET_ARG (N, ap, long) : \
+ flags&SHORTINT ? (long)(short)GET_ARG (N, ap, int) : \
+ (long)GET_ARG (N, ap, int))
#define UARG() \
- (flags&QUADINT ? GET_ARG(N, ap, u_quad_t) : \
- flags&LONGINT ? GET_ARG(N, ap, u_long) : \
- flags&SHORTINT ? (u_long)(u_short)GET_ARG(N, ap, int) : \
- (u_long)GET_ARG(N, ap, u_int))
+ (flags&QUADINT ? GET_ARG (N, ap, u_quad_t) : \
+ flags&LONGINT ? GET_ARG (N, ap, u_long) : \
+ flags&SHORTINT ? (u_long)(u_short)GET_ARG (N, ap, int) : \
+ (u_long)GET_ARG (N, ap, u_int))
#else
#define SARG() \
- (flags&LONGINT ? GET_ARG(N, ap, long) : \
- flags&SHORTINT ? (long)(short)GET_ARG(N, ap, int) : \
- (long)GET_ARG(N, ap, int))
+ (flags&LONGINT ? GET_ARG (N, ap, long) : \
+ flags&SHORTINT ? (long)(short)GET_ARG (N, ap, int) : \
+ (long)GET_ARG (N, ap, int))
#define UARG() \
- (flags&LONGINT ? GET_ARG(N, ap, u_long) : \
- flags&SHORTINT ? (u_long)(u_short)GET_ARG(N, ap, int) : \
- (u_long)GET_ARG(N, ap, u_int))
+ (flags&LONGINT ? GET_ARG (N, ap, u_long) : \
+ flags&SHORTINT ? (u_long)(u_short)GET_ARG (N, ap, int) : \
+ (u_long)GET_ARG (N, ap, u_int))
#endif
/* sorry, fprintf(read_only_file, "") returns EOF, not 0 */
- if (cantwrite(fp))
+ if (cantwrite (fp))
return (EOF);
/* optimise fprintf(stderr) (and other unbuffered Unix files) */
if ((fp->_flags & (__SNBF|__SWR|__SRW)) == (__SNBF|__SWR) &&
fp->_file >= 0)
- return (__sbprintf(fp, fmt0, ap));
+ return (__sbprintf (fp, fmt0, ap));
fmt = (char *)fmt0;
uio.uio_iov = iovp = iov;
@@ -560,7 +561,7 @@ _DEFUN (_VFPRINTF_R, (data, fp, fmt0, ap),
for (;;) {
cp = fmt;
#ifdef MB_CAPABLE
- while ((n = _mbtowc_r(data, &wc, fmt, MB_CUR_MAX, &state)) > 0) {
+ while ((n = _mbtowc_r (data, &wc, fmt, MB_CUR_MAX, &state)) > 0) {
if (wc == '%')
break;
fmt += n;
@@ -570,7 +571,7 @@ _DEFUN (_VFPRINTF_R, (data, fp, fmt0, ap),
fmt += 1;
#endif
if ((m = fmt - cp) != 0) {
- PRINT(cp, m);
+ PRINT (cp, m);
ret += m;
}
#ifdef MB_CAPABLE
@@ -613,15 +614,15 @@ reswitch: switch (ch) {
/* we must check for positional arg used for dynamic width */
old_is_pos_arg = is_pos_arg;
is_pos_arg = 0;
- if (is_digit(*fmt)) {
+ if (is_digit (*fmt)) {
char *old_fmt = fmt;
n = 0;
ch = *fmt++;
do {
- n = 10 * n + to_digit(ch);
+ n = 10 * n + to_digit (ch);
ch = *fmt++;
- } while (is_digit(ch));
+ } while (is_digit (ch));
if (ch == '$') {
if (n <= MAX_POS_ARGS) {
@@ -644,7 +645,7 @@ reswitch: switch (ch) {
* -- ANSI X3J11
* They don't exclude field widths read from args.
*/
- width = GET_ARG(n, ap, int);
+ width = GET_ARG (n, ap, int);
#ifndef _NO_POS_ARGS
is_pos_arg = old_is_pos_arg;
#endif
@@ -665,15 +666,15 @@ reswitch: switch (ch) {
/* we must check for positional arg used for dynamic width */
old_is_pos_arg = is_pos_arg;
is_pos_arg = 0;
- if (is_digit(*fmt)) {
+ if (is_digit (*fmt)) {
char *old_fmt = fmt;
n = 0;
ch = *fmt++;
do {
- n = 10 * n + to_digit(ch);
+ n = 10 * n + to_digit (ch);
ch = *fmt++;
- } while (is_digit(ch));
+ } while (is_digit (ch));
if (ch == '$') {
if (n <= MAX_POS_ARGS) {
@@ -689,7 +690,7 @@ reswitch: switch (ch) {
}
}
#endif /* !_NO_POS_ARGS */
- prec = GET_ARG(n, ap, int);
+ prec = GET_ARG (n, ap, int);
#ifndef _NO_POS_ARGS
is_pos_arg = old_is_pos_arg;
#endif
@@ -698,8 +699,8 @@ reswitch: switch (ch) {
goto rflag;
}
n = 0;
- while (is_digit(ch)) {
- n = 10 * n + to_digit(ch);
+ while (is_digit (ch)) {
+ n = 10 * n + to_digit (ch);
ch = *fmt++;
}
prec = n < 0 ? -1 : n;
@@ -716,9 +717,9 @@ reswitch: switch (ch) {
case '5': case '6': case '7': case '8': case '9':
n = 0;
do {
- n = 10 * n + to_digit(ch);
+ n = 10 * n + to_digit (ch);
ch = *fmt++;
- } while (is_digit(ch));
+ } while (is_digit (ch));
#ifndef _NO_POS_ARGS
if (ch == '$') {
if (n <= MAX_POS_ARGS) {
@@ -757,14 +758,14 @@ reswitch: switch (ch) {
if (ch == 'C' || (flags & LONGINT)) {
mbstate_t ps;
- memset((void *)&ps, '\0', sizeof(mbstate_t));
- if ((size = (int)_wcrtomb_r(data, cp,
- (wchar_t)GET_ARG(N, ap, wint_t),
+ memset ((_PTR)&ps, '\0', sizeof (mbstate_t));
+ if ((size = (int)_wcrtomb_r (data, cp,
+ (wchar_t)GET_ARG (N, ap, wint_t),
&ps)) == -1)
goto error;
}
else {
- *cp = GET_ARG(N, ap, int);
+ *cp = GET_ARG (N, ap, int);
size = 1;
}
sign = '\0';
@@ -774,7 +775,7 @@ reswitch: switch (ch) {
/*FALLTHROUGH*/
case 'd':
case 'i':
- _uquad = SARG();
+ _uquad = SARG ();
#ifndef _NO_LONGLONG
if ((quad_t)_uquad < 0)
#else
@@ -801,20 +802,20 @@ reswitch: switch (ch) {
#ifdef _NO_LONGDBL
if (flags & LONGDBL) {
- _fpvalue = (double) GET_ARG(N, ap, _LONG_DOUBLE);
+ _fpvalue = (double) GET_ARG (N, ap, _LONG_DOUBLE);
} else {
- _fpvalue = GET_ARG(N, ap, double);
+ _fpvalue = GET_ARG (N, ap, double);
}
/* do this before tricky precision changes */
- if (isinf(_fpvalue)) {
+ if (isinf (_fpvalue)) {
if (_fpvalue < 0)
sign = '-';
cp = "Inf";
size = 3;
break;
}
- if (isnan(_fpvalue)) {
+ if (isnan (_fpvalue)) {
cp = "NaN";
size = 3;
break;
@@ -823,9 +824,9 @@ reswitch: switch (ch) {
#else /* !_NO_LONGDBL */
if (flags & LONGDBL) {
- _fpvalue = GET_ARG(N, ap, _LONG_DOUBLE);
+ _fpvalue = GET_ARG (N, ap, _LONG_DOUBLE);
} else {
- _fpvalue = (_LONG_DOUBLE)GET_ARG(N, ap, double);
+ _fpvalue = (_LONG_DOUBLE)GET_ARG (N, ap, double);
}
/* do this before tricky precision changes */
@@ -846,7 +847,7 @@ reswitch: switch (ch) {
flags |= FPT;
- cp = cvt(data, _fpvalue, prec, flags, &softsign,
+ cp = cvt (data, _fpvalue, prec, flags, &softsign,
&expt, ch, &ndig);
if (ch == 'g' || ch == 'G') {
@@ -857,7 +858,7 @@ reswitch: switch (ch) {
}
if (ch <= 'e') { /* 'e' or 'E' fmt */
--expt;
- expsize = exponent(expstr, expt, ch);
+ expsize = exponent (expstr, expt, ch);
size = expsize + ndig;
if (ndig > 1 || flags & ALT)
++size;
@@ -885,21 +886,21 @@ reswitch: switch (ch) {
case 'n':
#ifndef _NO_LONGLONG
if (flags & QUADINT)
- *GET_ARG(N, ap, quad_ptr_t) = ret;
+ *GET_ARG (N, ap, quad_ptr_t) = ret;
else
#endif
if (flags & LONGINT)
- *GET_ARG(N, ap, long_ptr_t) = ret;
+ *GET_ARG (N, ap, long_ptr_t) = ret;
else if (flags & SHORTINT)
- *GET_ARG(N, ap, short_ptr_t) = ret;
+ *GET_ARG (N, ap, short_ptr_t) = ret;
else
- *GET_ARG(N, ap, int_ptr_t) = ret;
+ *GET_ARG (N, ap, int_ptr_t) = ret;
continue; /* no output */
case 'O':
flags |= LONGINT;
/*FALLTHROUGH*/
case 'o':
- _uquad = UARG();
+ _uquad = UARG ();
base = OCT;
goto nosign;
case 'p':
@@ -911,7 +912,7 @@ reswitch: switch (ch) {
* -- ANSI X3J11
*/
/* NOSTRICT */
- _uquad = (u_long)(unsigned _POINTER_INT)GET_ARG(N, ap, void_ptr_t);
+ _uquad = (u_long)(unsigned _POINTER_INT)GET_ARG (N, ap, void_ptr_t);
base = HEX;
xdigs = "0123456789abcdef";
flags |= HEXPREFIX;
@@ -920,7 +921,7 @@ reswitch: switch (ch) {
case 's':
case 'S':
sign = '\0';
- if ((cp = GET_ARG(N, ap, char_ptr_t)) == NULL) {
+ if ((cp = GET_ARG (N, ap, char_ptr_t)) == NULL) {
cp = "(null)";
size = 6;
}
@@ -930,7 +931,7 @@ reswitch: switch (ch) {
wcp = (_CONST wchar_t *)cp;
size = m = 0;
- memset((void *)&ps, '\0', sizeof(mbstate_t));
+ memset ((_PTR)&ps, '\0', sizeof (mbstate_t));
/* Count number of bytes needed for multibyte
string that will be produced from widechar
@@ -939,7 +940,7 @@ reswitch: switch (ch) {
while (1) {
if (wcp[m] == L'\0')
break;
- if ((n = (int)_wcrtomb_r(data,
+ if ((n = (int)_wcrtomb_r (data,
buf, wcp[m], &ps)) == -1)
goto error;
if (n + size > prec)
@@ -951,7 +952,7 @@ reswitch: switch (ch) {
}
}
else {
- if ((size = (int)_wcsrtombs_r(data,
+ if ((size = (int)_wcsrtombs_r (data,
NULL, &wcp, 0, &ps)) == -1)
goto error;
wcp = (_CONST wchar_t *)cp;
@@ -961,12 +962,12 @@ reswitch: switch (ch) {
break;
if ((malloc_buf =
- (char *)_malloc_r(data, size + 1)) == NULL)
+ (char *)_malloc_r (data, size + 1)) == NULL)
goto error;
/* Convert widechar string to multibyte string. */
- memset((void *)&ps, '\0', sizeof(mbstate_t));
- if (_wcsrtombs_r(data, malloc_buf,
+ memset ((_PTR)&ps, '\0', sizeof (mbstate_t));
+ if (_wcsrtombs_r (data, malloc_buf,
&wcp, size, &ps) != size)
goto error;
cp = malloc_buf;
@@ -976,9 +977,9 @@ reswitch: switch (ch) {
/*
* can't use strlen; can only look for the
* NUL in the first `prec' characters, and
- * strlen() will go further.
+ * strlen () will go further.
*/
- char *p = memchr(cp, 0, prec);
+ char *p = memchr (cp, 0, prec);
if (p != NULL) {
size = p - cp;
@@ -987,14 +988,14 @@ reswitch: switch (ch) {
} else
size = prec;
} else
- size = strlen(cp);
+ size = strlen (cp);
break;
case 'U':
flags |= LONGINT;
/*FALLTHROUGH*/
case 'u':
- _uquad = UARG();
+ _uquad = UARG ();
base = DEC;
goto nosign;
case 'X':
@@ -1002,7 +1003,7 @@ reswitch: switch (ch) {
goto hex;
case 'x':
xdigs = "0123456789abcdef";
-hex: _uquad = UARG();
+hex: _uquad = UARG ();
base = HEX;
/* leading 0x/X only if non-zero */
if (flags & ALT && _uquad != 0)
@@ -1033,7 +1034,7 @@ number: if ((dprec = prec) >= 0)
switch (base) {
case OCT:
do {
- *--cp = to_char(_uquad & 7);
+ *--cp = to_char (_uquad & 7);
_uquad >>= 3;
} while (_uquad);
/* handle octal leading 0 */
@@ -1044,10 +1045,10 @@ number: if ((dprec = prec) >= 0)
case DEC:
/* many numbers are 1 digit */
while (_uquad >= 10) {
- *--cp = to_char(_uquad % 10);
+ *--cp = to_char (_uquad % 10);
_uquad /= 10;
}
- *--cp = to_char(_uquad);
+ *--cp = to_char (_uquad);
break;
case HEX:
@@ -1059,7 +1060,7 @@ number: if ((dprec = prec) >= 0)
default:
cp = "bug in vfprintf: bad base";
- size = strlen(cp);
+ size = strlen (cp);
goto skipsize;
}
}
@@ -1111,93 +1112,93 @@ number: if ((dprec = prec) >= 0)
/* right-adjusting blank padding */
if ((flags & (LADJUST|ZEROPAD)) == 0)
- PAD(width - realsz, blanks);
+ PAD (width - realsz, blanks);
/* prefix */
if (sign) {
- PRINT(&sign, 1);
+ PRINT (&sign, 1);
} else if (flags & HEXPREFIX) {
ox[0] = '0';
ox[1] = ch;
- PRINT(ox, 2);
+ PRINT (ox, 2);
}
/* right-adjusting zero padding */
if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
- PAD(width - realsz, zeroes);
+ PAD (width - realsz, zeroes);
/* leading zeroes from decimal precision */
- PAD(dprec - size, zeroes);
+ PAD (dprec - size, zeroes);
/* the string or number proper */
#ifdef FLOATING_POINT
if ((flags & FPT) == 0) {
- PRINT(cp, size);
+ PRINT (cp, size);
} else { /* glue together f_p fragments */
if (ch >= 'f') { /* 'f' or 'g' */
if (_fpvalue == 0) {
/* kludge for __dtoa irregularity */
- PRINT("0", 1);
+ PRINT ("0", 1);
if (expt < ndig || (flags & ALT) != 0) {
- PRINT(decimal_point, 1);
- PAD(ndig - 1, zeroes);
+ PRINT (decimal_point, 1);
+ PAD (ndig - 1, zeroes);
}
} else if (expt <= 0) {
- PRINT("0", 1);
+ PRINT ("0", 1);
if(expt || ndig) {
- PRINT(decimal_point, 1);
- PAD(-expt, zeroes);
- PRINT(cp, ndig);
+ PRINT (decimal_point, 1);
+ PAD (-expt, zeroes);
+ PRINT (cp, ndig);
}
} else if (expt >= ndig) {
- PRINT(cp, ndig);
- PAD(expt - ndig, zeroes);
+ PRINT (cp, ndig);
+ PAD (expt - ndig, zeroes);
if (flags & ALT)
- PRINT(".", 1);
+ PRINT (".", 1);
} else {
- PRINT(cp, expt);
+ PRINT (cp, expt);
cp += expt;
- PRINT(".", 1);
- PRINT(cp, ndig-expt);
+ PRINT (".", 1);
+ PRINT (cp, ndig-expt);
}
} else { /* 'e' or 'E' */
if (ndig > 1 || flags & ALT) {
ox[0] = *cp++;
ox[1] = '.';
- PRINT(ox, 2);
+ PRINT (ox, 2);
if (_fpvalue) {
- PRINT(cp, ndig-1);
+ PRINT (cp, ndig-1);
} else /* 0.[0..] */
/* __dtoa irregularity */
- PAD(ndig - 1, zeroes);
+ PAD (ndig - 1, zeroes);
} else /* XeYYY */
- PRINT(cp, 1);
- PRINT(expstr, expsize);
+ PRINT (cp, 1);
+ PRINT (expstr, expsize);
}
}
#else
- PRINT(cp, size);
+ PRINT (cp, size);
#endif
/* left-adjusting padding (always blank) */
if (flags & LADJUST)
- PAD(width - realsz, blanks);
+ PAD (width - realsz, blanks);
/* finally, adjust ret */
ret += width > realsz ? width : realsz;
- FLUSH(); /* copy out the I/O vectors */
+ FLUSH (); /* copy out the I/O vectors */
if (malloc_buf != NULL) {
- free(malloc_buf);
+ free (malloc_buf);
malloc_buf = NULL;
}
}
done:
- FLUSH();
+ FLUSH ();
error:
if (malloc_buf != NULL)
- free(malloc_buf);
- return (__sferror(fp) ? EOF : ret);
+ free (malloc_buf);
+ return (__sferror (fp) ? EOF : ret);
/* NOTREACHED */
}
@@ -1213,16 +1214,29 @@ extern char *_ldtoa_r _PARAMS((struct _reent *, _LONG_DOUBLE, int,
#define word0(x) ldword0(x)
#endif
-static char *
-cvt(data, value, ndigits, flags, sign, decpt, ch, length)
- struct _reent *data;
#ifdef _NO_LONGDBL
- double value;
+static char *
+_DEFUN(cvt, (data, value, ndigits, flags, sign, decpt, ch, length),
+ struct _reent *data _AND
+ double value _AND
+ int ndigits _AND
+ int flags _AND
+ char *sign _AND
+ int *decpt _AND
+ int ch _AND
+ int *length)
#else
- _LONG_DOUBLE value;
+static char *
+_DEFUN(cvt, (data, value, ndigits, flags, sign, decpt, ch, length),
+ struct _reent *data _AND
+ _LONG_DOUBLE value _AND
+ int ndigits _AND
+ int flags _AND
+ char *sign _AND
+ int *decpt _AND
+ int ch _AND
+ int *length)
#endif
- int ndigits, flags, *decpt, ch, *length;
- char *sign;
{
int mode, dsgn;
char *digits, *bp, *rve;
@@ -1248,13 +1262,13 @@ cvt(data, value, ndigits, flags, sign, decpt, ch, length)
#ifdef _NO_LONGDBL
tmp.d = value;
- if (word0(tmp) & Sign_bit) { /* this will check for < 0 and -0.0 */
+ if (word0 (tmp) & Sign_bit) { /* this will check for < 0 and -0.0 */
value = -value;
*sign = '-';
} else
*sign = '\000';
- digits = _dtoa_r(data, value, mode, ndigits, decpt, &dsgn, &rve);
+ digits = _dtoa_r (data, value, mode, ndigits, decpt, &dsgn, &rve);
#else /* !_NO_LONGDBL */
ldptr = (struct ldieee *)&value;
if (ldptr->sign) { /* this will check for < 0 and -0.0 */
@@ -1263,7 +1277,7 @@ cvt(data, value, ndigits, flags, sign, decpt, ch, length)
} else
*sign = '\000';
- digits = _ldtoa_r(data, value, mode, ndigits, decpt, &dsgn, &rve);
+ digits = _ldtoa_r (data, value, mode, ndigits, decpt, &dsgn, &rve);
#endif /* !_NO_LONGDBL */
if ((ch != 'g' && ch != 'G') || flags & ALT) { /* Print trailing zeros */
@@ -1283,9 +1297,10 @@ cvt(data, value, ndigits, flags, sign, decpt, ch, length)
}
static int
-exponent(p0, exp, fmtch)
- char *p0;
- int exp, fmtch;
+_DEFUN(exponent, (p0, exp, fmtch),
+ char *p0 _AND
+ int exp _AND
+ int fmtch)
{
register char *p, *t;
char expbuf[40];
@@ -1301,14 +1316,14 @@ exponent(p0, exp, fmtch)
t = expbuf + 40;
if (exp > 9) {
do {
- *--t = to_char(exp % 10);
+ *--t = to_char (exp % 10);
} while ((exp /= 10) > 9);
- *--t = to_char(exp);
+ *--t = to_char (exp);
for (; t < expbuf + 40; *p++ = *t++);
}
else {
*p++ = '0';
- *p++ = to_char(exp);
+ *p++ = to_char (exp);
}
return (p - p0);
}
@@ -1389,7 +1404,7 @@ typedef enum {
PWPOS, /* get positional parameter value for variable width or precision */
} ACTION;
-const static CH_CLASS chclass[256] = {
+_CONST static CH_CLASS chclass[256] = {
/* 00-07 */ OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER,
/* 08-0f */ OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER,
/* 10-17 */ OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER,
@@ -1424,7 +1439,7 @@ const static CH_CLASS chclass[256] = {
/* f8-ff */ OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER,
};
-const static STATE state_table[MAX_STATE][MAX_CH_CLASS] = {
+_CONST static STATE state_table[MAX_STATE][MAX_CH_CLASS] = {
/* '0' '1-9' '$' MODFR SPEC '.' '*' FLAG OTHER */
/* START */ { SFLAG, WDIG, DONE, SMOD, DONE, SDOT, VARW, SFLAG, DONE },
/* SFLAG */ { SFLAG, WDIG, DONE, SMOD, DONE, SDOT, VARW, SFLAG, DONE },
@@ -1439,7 +1454,7 @@ const static STATE state_table[MAX_STATE][MAX_CH_CLASS] = {
/* VPDIG */ { DONE, DONE, PREC, DONE, DONE, DONE, DONE, DONE, DONE },
};
-const static ACTION action_table[MAX_STATE][MAX_CH_CLASS] = {
+_CONST static ACTION action_table[MAX_STATE][MAX_CH_CLASS] = {
/* '0' '1-9' '$' MODFR SPEC '.' '*' FLAG OTHER */
/* START */ { NOOP, NUMBER, NOOP, GETMOD, GETARG, NOOP, NOOP, NOOP, NOOP },
/* SFLAG */ { NOOP, NUMBER, NOOP, GETMOD, GETARG, NOOP, NOOP, NOOP, NOOP },
@@ -1456,9 +1471,15 @@ const static ACTION action_table[MAX_STATE][MAX_CH_CLASS] = {
/* function to get positional parameter N where n = N - 1 */
static union arg_val *
-get_arg (struct _reent *data, int n, char *fmt, va_list *ap,
- int *numargs_p, union arg_val *args,
- int *arg_type, char **last_fmt)
+_DEFUN(get_arg, (data, n, fmt, ap, numargs_p, args, arg_type, last_fmt),
+ struct _reent *data _AND
+ int n _AND
+ char *fmt _AND
+ va_list *ap _AND
+ int *numargs_p _AND
+ union arg_val *args _AND
+ int *arg_type _AND
+ char **last_fmt)
{
int ch;
int number, flags;
@@ -1489,7 +1510,7 @@ get_arg (struct _reent *data, int n, char *fmt, va_list *ap,
while (*fmt && n >= numargs)
{
#ifdef MB_CAPABLE
- while ((nbytes = _mbtowc_r(data, &wc, fmt, MB_CUR_MAX, &wc_state)) > 0)
+ while ((nbytes = _mbtowc_r (data, &wc, fmt, MB_CUR_MAX, &wc_state)) > 0)
{
fmt += nbytes;
if (wc == '%')
@@ -1610,27 +1631,27 @@ get_arg (struct _reent *data, int n, char *fmt, va_list *ap,
switch (spec_type)
{
case LONG_INT:
- args[numargs++].val_long = va_arg(*ap, long);
+ args[numargs++].val_long = va_arg (*ap, long);
break;
case QUAD_INT:
- args[numargs++].val_quad_t = va_arg(*ap, quad_t);
+ args[numargs++].val_quad_t = va_arg (*ap, quad_t);
break;
case WIDE_CHAR:
- args[numargs++].val_wint_t = va_arg(*ap, wint_t);
+ args[numargs++].val_wint_t = va_arg (*ap, wint_t);
break;
case CHAR:
case SHORT_INT:
case INT:
- args[numargs++].val_int = va_arg(*ap, int);
+ args[numargs++].val_int = va_arg (*ap, int);
break;
case CHAR_PTR:
- args[numargs++].val_char_ptr_t = va_arg(*ap, char *);
+ args[numargs++].val_char_ptr_t = va_arg (*ap, char *);
break;
case DOUBLE:
- args[numargs++].val_double = va_arg(*ap, double);
+ args[numargs++].val_double = va_arg (*ap, double);
break;
case LONG_DOUBLE:
- args[numargs++].val__LONG_DOUBLE = va_arg(*ap, _LONG_DOUBLE);
+ args[numargs++].val__LONG_DOUBLE = va_arg (*ap, _LONG_DOUBLE);
break;
}
}
@@ -1638,13 +1659,13 @@ get_arg (struct _reent *data, int n, char *fmt, va_list *ap,
break;
case GETPOS: /* we have positional specifier */
if (arg_type[0] == -1)
- memset (arg_type, 0, sizeof(int) * MAX_POS_ARGS);
+ memset (arg_type, 0, sizeof (int) * MAX_POS_ARGS);
pos = number - 1;
max_pos_arg = (max_pos_arg > pos ? max_pos_arg : pos);
break;
case PWPOS: /* we have positional specifier for width or precision */
if (arg_type[0] == -1)
- memset (arg_type, 0, sizeof(int) * MAX_POS_ARGS);
+ memset (arg_type, 0, sizeof (int) * MAX_POS_ARGS);
number -= 1;
arg_type[number] = INT;
max_pos_arg = (max_pos_arg > number ? max_pos_arg : number);
@@ -1653,18 +1674,18 @@ get_arg (struct _reent *data, int n, char *fmt, va_list *ap,
--fmt;
/* fallthrough */
case GETPW: /* we have a variable precision or width to acquire */
- args[numargs++].val_int = va_arg(*ap, int);
+ args[numargs++].val_int = va_arg (*ap, int);
break;
case NUMBER: /* we have a number to process */
number = (ch - '0');
- while ((ch = *fmt) != '\0' && is_digit(ch))
+ while ((ch = *fmt) != '\0' && is_digit (ch))
{
number = number * 10 + (ch - '0');
++fmt;
}
break;
case SKIPNUM: /* we have a number to skip */
- while ((ch = *fmt) != '\0' && is_digit(ch))
+ while ((ch = *fmt) != '\0' && is_digit (ch))
++fmt;
break;
case NOOP:
@@ -1686,28 +1707,28 @@ get_arg (struct _reent *data, int n, char *fmt, va_list *ap,
switch (arg_type[numargs])
{
case LONG_INT:
- args[numargs++].val_long = va_arg(*ap, long);
+ args[numargs++].val_long = va_arg (*ap, long);
break;
case QUAD_INT:
- args[numargs++].val_quad_t = va_arg(*ap, quad_t);
+ args[numargs++].val_quad_t = va_arg (*ap, quad_t);
break;
case CHAR_PTR:
- args[numargs++].val_char_ptr_t = va_arg(*ap, char *);
+ args[numargs++].val_char_ptr_t = va_arg (*ap, char *);
break;
case DOUBLE:
- args[numargs++].val_double = va_arg(*ap, double);
+ args[numargs++].val_double = va_arg (*ap, double);
break;
case LONG_DOUBLE:
- args[numargs++].val__LONG_DOUBLE = va_arg(*ap, _LONG_DOUBLE);
+ args[numargs++].val__LONG_DOUBLE = va_arg (*ap, _LONG_DOUBLE);
break;
case WIDE_CHAR:
- args[numargs++].val_wint_t = va_arg(*ap, wint_t);
+ args[numargs++].val_wint_t = va_arg (*ap, wint_t);
break;
case INT:
case SHORT_INT:
case CHAR:
default:
- args[numargs++].val_int = va_arg(*ap, int);
+ args[numargs++].val_int = va_arg (*ap, int);
break;
}
}