summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/smallprint.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/smallprint.cc')
-rw-r--r--winsup/cygwin/smallprint.cc15
1 files changed, 14 insertions, 1 deletions
diff --git a/winsup/cygwin/smallprint.cc b/winsup/cygwin/smallprint.cc
index 8ff0ac0cd..9e59cc7b0 100644
--- a/winsup/cygwin/smallprint.cc
+++ b/winsup/cygwin/smallprint.cc
@@ -73,6 +73,7 @@ __small_vsprintf (char *dst, const char *fmt, va_list ap)
DWORD err = GetLastError ();
+ long Rval = 0;
while (*fmt)
{
int i, n = 0x7fff;
@@ -146,8 +147,14 @@ __small_vsprintf (char *dst, const char *fmt, va_list ap)
strcpy (dst, "Win32 error ");
dst = __rn (dst + sizeof ("Win32 error"), 10, 0, err, len, pad, LMASK);
break;
+ case 'R':
case 'd':
- dst = rnarg (dst, 10, addsign, len, pad);
+ {
+ long val = va_arg (ap, long);
+ dst = __rn (dst, 10, addsign, val, len, pad, LMASK);
+ if (c == 'R')
+ Rval = val;
+ }
break;
case 'D':
dst = rnargLL (dst, 10, addsign, len, pad);
@@ -241,6 +248,12 @@ __small_vsprintf (char *dst, const char *fmt, va_list ap)
}
}
}
+ if (Rval < 0)
+ {
+ strcpy (dst, ", errno ");
+ dst += strlen (", errno ");
+ dst = __rn (dst, 10, false, get_errno (), 0, 0, LMASK);
+ }
*dst = 0;
SetLastError (err);
return dst - orig;