OSDN Git Service

* libc/stdio/sprintf.c: Document 'm' conversion specifier.
authoryselkowitz <yselkowitz>
Fri, 13 Jan 2012 09:13:56 +0000 (09:13 +0000)
committeryselkowitz <yselkowitz>
Fri, 13 Jan 2012 09:13:56 +0000 (09:13 +0000)
* libc/stdio/swprintf.c: Ditto.
* libc/stdio/vfprintf.c (_VFPRINTF_R) [_GLIBC_EXTENSION]: Handle 'm'
conversion specifier.
* libc/stdio/vfwprintf.c (_VFWPRINTF_R) [_GLIBC_EXTENSION]: Ditto.

newlib/ChangeLog
newlib/libc/stdio/sprintf.c
newlib/libc/stdio/swprintf.c
newlib/libc/stdio/vfprintf.c
newlib/libc/stdio/vfwprintf.c

index 970e58f..fb697e0 100644 (file)
@@ -1,3 +1,11 @@
+2012-01-13  Yaakov Selkowitz  <yselkowitz@users.sourceforge.net>
+
+       * libc/stdio/sprintf.c: Document 'm' conversion specifier.
+       * libc/stdio/swprintf.c: Ditto.
+       * libc/stdio/vfprintf.c (_VFPRINTF_R) [_GLIBC_EXTENSION]: Handle 'm'
+       conversion specifier.
+       * libc/stdio/vfwprintf.c (_VFWPRINTF_R) [_GLIBC_EXTENSION]: Ditto.
+
 2012-01-12  Yaakov Selkowitz  <yselkowitz@users.sourceforge.net>
 
        * libc/include/tgmath.h: New header.
index 072622e..0914b23 100644 (file)
@@ -518,6 +518,10 @@ DESCRIPTION
                        implementation is similar to <<%#tx>>), except
                        that <<0x>> appears even for the NULL pointer.
 
+               o m
+                       Prints the output of <<strerror(errno)>>; no
+                       argument is required.  A GNU extension.
+
                o-
        O-
 
index 6348017..4e964be 100644 (file)
@@ -498,6 +498,10 @@ DESCRIPTION
                        implementation is similar to <<%#tx>>), except
                        that <<0x>> appears even for the NULL pointer.
 
+               o m
+                       Prints the output of <<strerror(errno)>>; no
+                       argument is required.  A GNU extension.
+
                o-
        O-
 
index be35d24..e3fc099 100644 (file)
@@ -1225,6 +1225,15 @@ reswitch:        switch (ch) {
                                sign = '-';
                        break;
 #endif /* FLOATING_POINT */
+#ifdef _GLIBC_EXTENSION
+               case 'm':  /* extension */
+                       {
+                               int dummy;
+                               cp = _strerror_r (data, data->_errno, 1, &dummy);
+                       }
+                       flags &= ~LONGINT;
+                       goto string;
+#endif
                case 'n':
 #ifndef _NO_LONGLONG
                        if (flags & QUADINT)
@@ -1272,8 +1281,11 @@ reswitch:        switch (ch) {
 #ifdef _WANT_IO_C99_FORMATS
                case 'S':
 #endif
-                       sign = '\0';
                        cp = GET_ARG (N, ap, char_ptr_t);
+#ifdef _GLIBC_EXTENSION
+string:
+#endif
+                       sign = '\0';
 #ifndef __OPTIMIZE_SIZE__
                        /* Behavior is undefined if the user passed a
                           NULL string when precision is not 0.
index 79020f3..d76fff0 100644 (file)
@@ -1074,6 +1074,15 @@ reswitch:        switch (ch) {
                                sign = L'-';
                        break;
 #endif /* FLOATING_POINT */
+#ifdef _GLIBC_EXTENSION
+               case L'm':  /* GNU extension */
+                       {
+                               int dummy;
+                               cp = (wchar_t *) _strerror_r (data, data->_errno, 1, &dummy);
+                       }
+                       flags &= ~LONGINT;
+                       goto string;
+#endif
                case L'n':
 #ifndef _NO_LONGLONG
                        if (flags & QUADINT)
@@ -1118,8 +1127,11 @@ reswitch:        switch (ch) {
 #ifdef _WANT_IO_C99_FORMATS
                case L'S':      /* POSIX extension */
 #endif
-                       sign = '\0';
                        cp = GET_ARG (N, ap, wchar_ptr_t);
+#ifdef _GLIBC_EXTENSION
+string:
+#endif
+                       sign = '\0';
 #ifndef __OPTIMIZE_SIZE__
                        /* Behavior is undefined if the user passed a
                           NULL string when precision is not 0.
@@ -1132,7 +1144,7 @@ reswitch: switch (ch) {
                        else
 #endif /* __OPTIMIZE_SIZE__ */
 #ifdef _MB_CAPABLE
-                       if (ch == L's' && !(flags & LONGINT)) {
+                       if (ch != L'S' && !(flags & LONGINT)) {
                                char *arg = (char *) cp;
                                size_t insize = 0, nchars = 0, nconv = 0;
                                mbstate_t ps;