This is the mail archive of the
ecos-patches@sources.redhat.com
mailing list for the eCos project.
Re: [ECOS] JFFS2 eCos port updated.
- From: Jonathan Larmour <jifl at eCosCentric dot com>
- To: David Woodhouse <dwmw2 at infradead dot org>
- Cc: "Gary D. Thomas" <gary dot thomas at mind dot be>,eCos Patches List <ecos-patches at sources dot redhat dot com>
- Date: Wed, 29 Jan 2003 17:27:14 +0000
- Subject: Re: [ECOS] JFFS2 eCos port updated.
- References: <Pine.LNX.4.44.0301282306210.2372-100000@imladris.demon.co.uk>
David Woodhouse wrote:
Oh, and add supporting %zd in vsprintf to the TODO list :)
Cor, you like bleeding edge. Even OpenBSD doesn't have C99 stuff like this.
Anyway, patch checked in.
Jifl
--
eCosCentric http://www.eCosCentric.com/ <info@eCosCentric.com>
--[ "You can complain because roses have thorns, or you ]--
--[ can rejoice because thorns have roses." -Lincoln ]-- Opinions==mine
Index: ChangeLog
===================================================================
RCS file: /cvs/ecos/ecos/packages/language/c/libc/stdio/current/ChangeLog,v
retrieving revision 1.17
diff -u -5 -p -r1.17 ChangeLog
--- ChangeLog 2 Sep 2002 07:55:37 -0000 1.17
+++ ChangeLog 29 Jan 2003 17:27:03 -0000
@@ -1,5 +1,9 @@
+2003-01-29 Jonathan Larmour <jifl@eCosCentric.com>
+
+ * src/output/vfnprintf.cxx: Add support for C99 'z' flag (size_t).
+
2002-09-02 Andrew Lunn <andrew.lunn@ascom.ch>
* include/stream.inl (set_position): Fixed typo in none buffered
case. Seek pos bytes, not whence bytes.
Index: src/output/vfnprintf.cxx
===================================================================
RCS file: /cvs/ecos/ecos/packages/language/c/libc/stdio/current/src/output/vfnprintf.cxx,v
retrieving revision 1.5
diff -u -5 -p -r1.5 vfnprintf.cxx
--- src/output/vfnprintf.cxx 23 May 2002 23:07:19 -0000 1.5
+++ src/output/vfnprintf.cxx 29 Jan 2003 17:27:03 -0000
@@ -148,10 +148,11 @@ externC mbtowc_fn_type __get_current_loc
#define LONGINT 0x010 /* long integer */
#define QUADINT 0x020 /* quad integer */
#define SHORTINT 0x040 /* short integer */
#define ZEROPAD 0x080 /* zero (as opposed to blank) pad */
#define FPT 0x100 /* Floating point number */
+#define SIZET 0x200 /* size_t */
externC int
vfnprintf ( FILE *stream, size_t n, const char *format, va_list arg)
{
char *fmt; /* format string */
@@ -235,18 +236,20 @@ CYG_MACRO_END
* argument extraction methods.
*/
#define SARG() \
(flags&QUADINT ? va_arg(arg, cyg_int64) : \
- flags&LONGINT ? va_arg(arg, cyg_int32) : \
- flags&SHORTINT ? (long)va_arg(arg, cyg_int32) : \
- (long)va_arg(arg, cyg_int32))
+ flags&LONGINT ? va_arg(arg, long) : \
+ flags&SHORTINT ? (long)(short)va_arg(arg, int) : \
+ flags&SIZET ? va_arg(arg, size_t) : \
+ (long)va_arg(arg, int))
#define UARG() \
(flags&QUADINT ? va_arg(arg, cyg_uint64) : \
- flags&LONGINT ? va_arg(arg, cyg_uint32) : \
- flags&SHORTINT ? (unsigned long)va_arg(arg, cyg_uint32) : \
- (unsigned long)va_arg(arg, cyg_uint32))
+ flags&LONGINT ? va_arg(arg, unsigned long) : \
+ flags&SHORTINT ? (unsigned long)(unsigned short)va_arg(arg, int) : \
+ flags&SIZET ? va_arg(arg, size_t) : \
+ (unsigned long)va_arg(arg, unsigned int))
xdigs = NULL; // stop compiler whinging
fmt = (char *)format;
ret = 0;
@@ -448,10 +451,12 @@ reswitch: switch (ch) {
#endif
if (flags & LONGINT)
*va_arg(arg, long *) = ret;
else if (flags & SHORTINT)
*va_arg(arg, short *) = ret;
+ else if (flags & SIZET)
+ *va_arg(arg, size_t *) = ret;
else
*va_arg(arg, int *) = ret;
continue; /* no output */
case 'O':
flags |= LONGINT;
@@ -570,10 +575,13 @@ number: if ((dprec = pre
}
}
size = buf + BUF - cp;
skipsize:
break;
+ case 'z':
+ flags |= SIZET;
+ goto rflag;
default: /* "%?" prints ?, unless ? is NUL */
if (ch == '\0')
goto done;
/* pretend it was %c with argument ch */
cp = buf;