All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch] printf long format
@ 2005-06-21  4:00 Hollis Blanchard
  2005-06-21 16:27 ` Marco Gerards
  0 siblings, 1 reply; 12+ messages in thread
From: Hollis Blanchard @ 2005-06-21  4:00 UTC (permalink / raw)
  To: grub-devel





^ permalink raw reply	[flat|nested] 12+ messages in thread
* [patch] printf long format
@ 2005-06-21 23:14 Hollis Blanchard
  2005-06-22 11:05 ` Marco Gerards
  0 siblings, 1 reply; 12+ messages in thread
From: Hollis Blanchard @ 2005-06-21 23:14 UTC (permalink / raw)
  To: grub-devel

Hmm, no idea what happened to the first mail.

Debugging a partition map bug, I was adding more grub_dprintf messages...
and re-discovered that our printf doesn't handle e.g. "%lx" format strings (yet
gcc requires these when printing longs).

This patch works for me, though I didn't check that it implements all "l"
formating according to POSIX or SUS or whatever. Has not been tested on 64-bit
platforms. Comments?

-Hollis

	  * kern/misc.c (grub_vsprintf): Add `longfmt'.  If format string
	  contains `l' modifier, get a long from va_arg().

Index: kern/misc.c
===================================================================
RCS file: /cvsroot/grub/grub2/kern/misc.c,v
retrieving revision 1.19
diff -u -p -r1.19 misc.c
--- kern/misc.c	9 May 2005 01:47:37 -0000	1.19
+++ kern/misc.c	21 Jun 2005 04:02:35 -0000
@@ -562,13 +562,14 @@ grub_vsprintf (char *str, const char *fm
 	  char zerofill = ' ';
 	  int rightfill = 0;
 	  int n;
-	  
+	  int longfmt = 0;
+
 	  if (*fmt && *fmt =='-')
 	    {
 	      rightfill = 1;
 	      fmt++;
 	    }
-	  
+
 	  p = (char *) fmt;
 	  /* Read formatting parameters.  */
 	  while (*p && grub_isdigit (*p))
@@ -600,6 +601,11 @@ grub_vsprintf (char *str, const char *fm
 	    }
 
 	  c = *fmt++;
+	  if (c == 'l')
+	    {
+	      longfmt = 1;
+	      c = *fmt++;
+	    }
 
 	  switch (c)
 	    {
@@ -610,7 +616,10 @@ grub_vsprintf (char *str, const char *fm
 	    case 'x':
 	    case 'u':
 	    case 'd':
-	      n = va_arg (args, int);
+	      if (longfmt)
+		n = va_arg (args, long);
+	      else
+		n = va_arg (args, int);
 	      grub_itoa (tmp, c, n);
 	      if (!rightfill && grub_strlen (tmp) < format1)
 		write_fill (zerofill, format1 - grub_strlen (tmp));



^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2005-06-22 20:56 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-06-21  4:00 [patch] printf long format Hollis Blanchard
2005-06-21 16:27 ` Marco Gerards
  -- strict thread matches above, loose matches on Subject: below --
2005-06-21 23:14 Hollis Blanchard
2005-06-22 11:05 ` Marco Gerards
2005-06-22 14:33   ` Hollis Blanchard
2005-06-22 15:30     ` Yoshinori K. Okuji
2005-06-22 16:24       ` Marco Gerards
2005-06-22 17:14         ` Yoshinori K. Okuji
2005-06-22 18:09           ` Marco Gerards
2005-06-22 19:07             ` Yoshinori K. Okuji
2005-06-22 20:14               ` Marco Gerards
2005-06-22 20:53                 ` Yoshinori K. Okuji

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.