Commit Diff


commit - 52e5e85b025b9f520324997ea1410e0e6a9aa84c
commit + 039b8c9af0866a5a6607cbdd992b586896d48cdc
blob - de28bae8d38b2aacd8280f309c4064e7056c91ab
blob + 0a1fb8159714d4aaf82d40ef13c1ab2e381fabde
--- src/libmp/port/mpfmt.c
+++ src/libmp/port/mpfmt.c
@@ -40,10 +40,10 @@ to32(mpint *b, char *buf, int len)
 	return rv;
 }
 
-static char set16[] = "0123456789ABCDEF";
-
+static char upper16[] = "0123456789ABCDEF";
+static char lower16[] = "0123456789abcdef";
 static int
-to16(mpint *b, char *buf, int len)
+to16(mpint *b, char *buf, int len, char *set16)
 {
 	mpdigit *p, x;
 	int i, j;
@@ -123,31 +123,9 @@ to10(mpint *b, char *buf, int len)
 	return 0;
 }
 
-int
-mpfmt(Fmt *fmt)
+static char*
+_mptoa(mpint *b, int base, char *buf, int len, char *set16)
 {
-	mpint *b;
-	char *p;
-
-	b = va_arg(fmt->args, mpint*);
-	if(b == nil)
-		return fmtstrcpy(fmt, "*");
-	
-	p = mptoa(b, fmt->prec, nil, 0);
-	fmt->flags &= ~FmtPrec;
-
-	if(p == nil)
-		return fmtstrcpy(fmt, "*");
-	else{
-		fmtstrcpy(fmt, p);
-		free(p);
-		return 0;
-	}
-}
-
-char*
-mptoa(mpint *b, int base, char *buf, int len)
-{
 	char *out;
 	int rv, alloced;
 
@@ -177,7 +155,7 @@ mptoa(mpint *b, int base, char *buf, int len)
 		break;
 	default:
 	case 16:
-		rv = to16(b, out, len);
+		rv = to16(b, out, len, set16);
 		break;
 	case 10:
 		rv = to10(b, out, len);
@@ -190,3 +168,36 @@ mptoa(mpint *b, int base, char *buf, int len)
 	}
 	return buf;
 }
+
+char*
+mptoa(mpint *b, int base, char *buf, int len)
+{
+	return _mptoa(b, base, buf, len, upper16);
+}
+
+int
+mpfmt(Fmt *fmt)
+{
+	mpint *b;
+	char *p;
+	char *set16;
+
+	b = va_arg(fmt->args, mpint*);
+	if(b == nil)
+		return fmtstrcpy(fmt, "*");
+
+	set16 = upper16;
+	if(fmt->flags & FmtLong)
+		set16 = lower16;
+	p = _mptoa(b, fmt->prec, nil, 0, set16);
+	fmt->flags &= ~FmtPrec;
+
+	if(p == nil)
+		return fmtstrcpy(fmt, "*");
+	else{
+		fmtstrcpy(fmt, p);
+		free(p);
+		return 0;
+	}
+}
+