/* Internal header for parsing printf format strings.
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of th GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
}
-/* This is defined in reg-printf.c. */
-extern printf_arginfo_function **__printf_arginfo_table;
+/* These are defined in reg-printf.c. */
+extern printf_arginfo_function *__printf_arginfo_table[];
+extern printf_function **__printf_function_table;
/* FORMAT must point to a '%' at the beginning of a spec. Fills in *SPEC
/* Get the format specification. */
spec->info.spec = (wchar_t) *format++;
- if (__printf_arginfo_table != NULL &&
- __printf_arginfo_table[spec->info.spec] != NULL)
+ if (__printf_function_table != NULL
+ && spec->info.spec <= UCHAR_MAX
+ && __printf_arginfo_table[spec->info.spec] != NULL)
/* We don't try to get the types for all arguments if the format
uses more than one. The normal case is covered though. */
spec->ndata_args = (*__printf_arginfo_table[spec->info.spec])
spec->ndata_args = 0;
break;
}
+ }
- if (spec->data_arg == -1 && spec->ndata_args > 0)
- {
- /* There are args consumed, but no positional spec.
- Use the next sequential arg position. */
- spec->data_arg = posn;
- posn += spec->ndata_args;
- nargs += spec->ndata_args;
- }
+ if (spec->data_arg == -1 && spec->ndata_args > 0)
+ {
+ /* There are args consumed, but no positional spec. Use the
+ next sequential arg position. */
+ spec->data_arg = posn;
+ nargs += spec->ndata_args;
}
if (spec->info.spec == L'\0')
-/* Copyright (C) 1991, 92, 93, 95, 96 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 95, 96, 97 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
#define PA_FLAG_PTR (1 << 11)
+
+/* Function which can be registered as `printf'-handlers. */
+
+/* Print floating point value using using abbreviations for the orders
+ of magnitude used for numbers ('k' for kilo, 'm' for mega etc). If
+ the format specifier is a uppercase character powers of 1000 are
+ used. Otherwise powers of 1024. */
+extern int printf_size __P ((FILE *__fp, __const struct printf_info *__info,
+ __const void *__const *args));
+
+/* This is the appropriate argument information function for `printf_size'. */
+extern int printf_size_info __P ((__const struct printf_info *__info,
+ size_t __n, int *__argtypes));
+
+
__END_DECLS
#endif /* printf.h */