------- Comment #1 from fxcoudert at gcc dot gnu dot org  2007-08-06 23:46 
-------
Hi Tobias, what do you think about this patch? I think it would add %u for
unsigned int, %lu for unsigned long int, %li and %ld for long int. I have no
time to test, but I think it should work ok (I wrote the current version of
these functions...) 


Index: error.c
===================================================================
--- error.c     (revision 127224)
+++ error.c     (working copy)
@@ -113,19 +113,13 @@ error_string (const char *p)

 /* Print a formatted integer to the error buffer or output.  */

-#define IBUF_LEN 30
+#define IBUF_LEN 60

 static void
-error_integer (int i)
+error_uinteger (unsigned long int i)
 {
   char *p, int_buf[IBUF_LEN];

-  if (i < 0)
-    {
-      i = -i;
-      error_char ('-');
-    }
-
   p = int_buf + IBUF_LEN - 1;
   *p-- = '\0';

@@ -141,6 +135,22 @@ error_integer (int i)
   error_string (p + 1);
 }

+static void
+error_integer (long int i)
+{
+  unsigned long int u;
+
+  if (i < 0)
+    {
+      u = (unsigned long int) -i;
+      error_char ('-');
+    }
+  else
+    u = i;
+
+  error_uinteger (u);
+}
+

 /* Show the file, where it was included, and the source line, give a
    locus.  Calls error_printf() recursively, but the recursion is at
@@ -368,7 +378,8 @@ show_loci (locus *l1, locus *l2)
 static void ATTRIBUTE_GCC_GFC(2,0)
 error_print (const char *type, const char *format0, va_list argp)
 {
-  enum { TYPE_CURRENTLOC, TYPE_LOCUS, TYPE_INTEGER, TYPE_CHAR, TYPE_STRING,
+  enum { TYPE_CURRENTLOC, TYPE_LOCUS, TYPE_INTEGER, TYPE_UINTEGER,
+         TYPE_LONGINT, TYPE_ULONGINT, TYPE_CHAR, TYPE_STRING,
         NOTYPE };
   struct
   {
@@ -377,6 +388,9 @@ error_print (const char *type, const cha
     union
     {
       int intval;
+      unsigned int uintval;
+      long int longintval;
+      unsigned long int ulongintval;
       char charval;
       const char * stringval;
     } u;
@@ -453,6 +467,18 @@ error_print (const char *type, const cha
            arg[pos].type = TYPE_INTEGER;
            break;

+         case 'u':
+           arg[pos].type = TYPE_UINTEGER;
+
+         case 'l':
+           c = *format++;
+           if (c == 'u')
+             arg[pos].type = TYPE_ULONGINT;
+           else if (c == 'i' || c == 'd')
+             arg[pos].type = TYPE_LONGINT;
+           else
+             gcc_unreachable ();
+
          case 'c':
            arg[pos].type = TYPE_CHAR;
            break;
@@ -499,6 +525,18 @@ error_print (const char *type, const cha
            arg[pos].u.intval = va_arg (argp, int);
            break;

+         case TYPE_UINTEGER:
+           arg[pos].u.uintval = va_arg (argp, unsigned int);
+           break;
+
+         case TYPE_LONGINT:
+           arg[pos].u.longintval = va_arg (argp, long int);
+           break;
+
+         case TYPE_ULONGINT:
+           arg[pos].u.ulongintval = va_arg (argp, unsigned long int);
+           break;
+
          case TYPE_CHAR:
            arg[pos].u.charval = (char) va_arg (argp, int);
            break;
@@ -568,6 +606,19 @@ error_print (const char *type, const cha
        case 'i':
          error_integer (spec[n++].u.intval);
          break;
+
+       case 'u':
+         error_uinteger (spec[n++].u.uintval);
+         break;
+
+       case 'l':
+         format++;
+         if (*format == 'u')
+           error_uinteger (spec[n++].u.ulongintval);
+         else
+           error_integer (spec[n++].u.longintval);
+         break;
+
        }
     }



-- 

fxcoudert at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |fxcoudert at gcc dot gnu dot
                   |                            |org
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
   Last reconfirmed|0000-00-00 00:00:00         |2007-08-06 23:46:07
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32860

Reply via email to