From a6790c5f113e0fa5daf45d0815876509cd7f546b Mon Sep 17 00:00:00 2001
From: Corinna Vinschen <corinna@vinschen.de>
Date: Fri, 22 Feb 2002 18:22:24 +0000
Subject: [PATCH] 	* smallprint.c (rn): Allow long long values. 
 (__small_vsprintf): Add 'D', 'U' and 'X' formats for long long 
 parameters.

---
 winsup/cygwin/ChangeLog    |  6 ++++++
 winsup/cygwin/smallprint.c | 15 ++++++++++++---
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index b74de2f63..e8958d079 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,9 @@
+2001-02-22  Corinna Vinschen  <corinna@vinschen.de>
+
+	* smallprint.c (rn): Allow long long values.
+	(__small_vsprintf): Add 'D', 'U' and 'X' formats for long long
+	parameters.
+
 2002-02-19  Christopher Faylor  <cgf@redhat.com>
 
 	* fhandler.cc (fhandler_base::puts_readahead): Remove default parameter
diff --git a/winsup/cygwin/smallprint.c b/winsup/cygwin/smallprint.c
index d6be72a6c..97a2b6ce1 100644
--- a/winsup/cygwin/smallprint.c
+++ b/winsup/cygwin/smallprint.c
@@ -19,11 +19,11 @@ int __small_sprintf (char *dst, const char *fmt,...);
 int __small_vsprintf (char *dst, const char *fmt, va_list ap);
 
 static char *
-rn (char *dst, int base, int dosign, int val, int len, int pad)
+rn (char *dst, int base, int dosign, long long val, int len, int pad)
 {
-  /* longest number is 4294967295, 10 digits */
+  /* longest number is ULLONG_MAX, 18446744073709551615, 20 digits */
   unsigned uval;
-  char res[10];
+  char res[20];
   static const char str[16] = "0123456789ABCDEF";
   int l = 0;
 
@@ -126,9 +126,15 @@ __small_vsprintf (char *dst, const char *fmt, va_list ap)
 		case 'd':
 		  dst = rn (dst, 10, addsign, va_arg (ap, int), len, pad);
 		  break;
+		case 'D':
+		  dst = rn (dst, 10, addsign, va_arg (ap, long long), len, pad);
+		  break;
 		case 'u':
 		  dst = rn (dst, 10, 0, va_arg (ap, int), len, pad);
 		  break;
+		case 'U':
+		  dst = rn (dst, 10, 0, va_arg (ap, long long), len, pad);
+		  break;
 		case 'p':
 		  *dst++ = '0';
 		  *dst++ = 'x';
@@ -136,6 +142,9 @@ __small_vsprintf (char *dst, const char *fmt, va_list ap)
 		case 'x':
 		  dst = rn (dst, 16, 0, va_arg (ap, int), len, pad);
 		  break;
+		case 'X':
+		  dst = rn (dst, 16, 0, va_arg (ap, long long), len, pad);
+		  break;
 		case 'P':
 		  if (!GetModuleFileName (NULL, tmp, MAX_PATH))
 		    s = "cygwin program";