This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB 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: [PATCH] long long for printf on MinGW


Daniel Jacobowitz wrote:
Go ahead with the patch.  We can rip it out if we switch to gnulib's
printf.

Committed.


I've attached the final verion. It's only the patch offsets that have changed since the last patch posted.

Thanks

Andrew
2008-04-23  Andrew Stubbs  <andrew.stubbs@st.com>

	* printcmd.c: Define USE_PRINTF_I64 and PRINTF_HAS_LONG_LONG on MinGW.
	(printf_command): Convert %lld to %I64d when USE_PRINTF_I64 set.

Index: gdb/printcmd.c
===================================================================
RCS file: /cvs/src/src/gdb/printcmd.c,v
retrieving revision 1.117
diff -u -p -r1.117 printcmd.c
--- gdb/printcmd.c	30 Jan 2008 19:19:51 -0000	1.117
+++ gdb/printcmd.c	23 Apr 2008 12:05:33 -0000
@@ -47,6 +47,13 @@
 #include "tui/tui.h"		/* For tui_active et.al.   */
 #endif
 
+#if defined(__MINGW32__)
+# define USE_PRINTF_I64 1
+# define PRINTF_HAS_LONG_LONG
+#else
+# define USE_PRINTF_I64 0
+#endif
+
 extern int asm_demangle;	/* Whether to demangle syms in asm printouts */
 extern int addressprint;	/* Whether to print hex addresses in HLL " */
 
@@ -2009,8 +2016,23 @@ printf_command (char *arg, int from_tty)
 		   *f);
 
 	  f++;
-	  strncpy (current_substring, last_arg, f - last_arg);
-	  current_substring += f - last_arg;
+
+	  if (lcount > 1 && USE_PRINTF_I64)
+	    {
+	      /* Windows' printf does support long long, but not the usual way.
+		 Convert %lld to %I64d.  */
+	      int length_before_ll = f - last_arg - 1 - lcount;
+	      strncpy (current_substring, last_arg, length_before_ll);
+	      strcpy (current_substring + length_before_ll, "I64");
+	      current_substring[length_before_ll + 3] =
+		last_arg[length_before_ll + lcount];
+	      current_substring += length_before_ll + 4;
+	    }
+	  else
+	    {
+	      strncpy (current_substring, last_arg, f - last_arg);
+	      current_substring += f - last_arg;
+	    }
 	  *current_substring++ = '\0';
 	  last_arg = f;
 	  argclass[nargs_wanted++] = this_argclass;

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