This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

printf and NL_ARGMAX


Currently, if configured with --enable-newlib-io-pos-args, printf
hard-codes the decision of how many %n$ positional parameters to support
with MAX_POS_ARGS set to 32.  But since I hope to fix scanf to also
support positional parameters, this should probably be fixed to follow
POSIX and refer to NL_ARGMAX in limits.h.  Furthermore, POSIX only
requires support for 9 positional parameters, so it should be possible for
newlib clients to alter how much storage printf requires by setting
NL_ARGMAX in their limits.h override.

OK to apply?

2007-04-21  Eric Blake  <ebb9@byu.net>

	* libc/include/limits.h (NL_ARGMAX): Define a default value.
	* libc/stdio/vfprintf.c (MAX_POS_ARGS): Define in terms of
	NL_ARGMAX, if present.

-- 
Don't work too hard, make some time for fun as well!

Eric Blake             ebb9@byu.net
Index: libc/include/limits.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/limits.h,v
retrieving revision 1.1
diff -u -p -r1.1 limits.h
--- libc/include/limits.h	11 Sep 2002 18:36:39 -0000	1.1
+++ libc/include/limits.h	21 Apr 2007 12:46:51 -0000
@@ -9,6 +9,11 @@
 #  define MB_LEN_MAX    1
 # endif
 
+/* Maximum number of positional arguments, if _WANT_IO_POS_ARGS.  */
+# ifndef NL_ARGMAX
+#  define NL_ARGMAX 32
+# endif
+
 /* if do not have #include_next support, then we
    have to define the limits here. */
 # if !defined __GNUC__ || __GNUC__ < 2
@@ -124,4 +129,3 @@
 /* `_GCC_LIMITS_H_' is what GCC's file defines.  */
 # include_next <limits.h>
 #endif /* __GNUC__ && !_GCC_LIMITS_H_ */
-
Index: libc/stdio/vfprintf.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/stdio/vfprintf.c,v
retrieving revision 1.49
diff -u -p -r1.49 vfprintf.c
--- libc/stdio/vfprintf.c	13 Apr 2007 01:57:33 -0000	1.49
+++ libc/stdio/vfprintf.c	21 Apr 2007 12:46:51 -0000
@@ -320,7 +320,11 @@ typedef int  *   int_ptr_t;
 typedef short *  short_ptr_t;
 
 #ifndef _NO_POS_ARGS
-#define MAX_POS_ARGS 32
+# ifdef NL_ARGMAX
+#  define MAX_POS_ARGS NL_ARGMAX
+# else
+#  define MAX_POS_ARGS 32
+# endif
 
 union arg_val
 {

Attachment: signature.asc
Description: OpenPGP digital signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]