This is the mail archive of the ecos-patches@sources.redhat.com mailing list for the eCos 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]

Re: [ECOS] JFFS2 eCos port updated.


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;

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