aboutsummaryrefslogtreecommitdiff
path: root/src/libmp/port
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-02-13 18:34:57 +0000
committerrsc <devnull@localhost>2005-02-13 18:34:57 +0000
commit039b8c9af0866a5a6607cbdd992b586896d48cdc (patch)
treee356319104ca2f764197fea17e8f4ce06fbdc56d /src/libmp/port
parent52e5e85b025b9f520324997ea1410e0e6a9aa84c (diff)
downloadplan9port-039b8c9af0866a5a6607cbdd992b586896d48cdc.tar.gz
plan9port-039b8c9af0866a5a6607cbdd992b586896d48cdc.tar.bz2
plan9port-039b8c9af0866a5a6607cbdd992b586896d48cdc.zip
add %lB for lower case
Diffstat (limited to 'src/libmp/port')
-rw-r--r--src/libmp/port/mpfmt.c67
1 files changed, 39 insertions, 28 deletions
diff --git a/src/libmp/port/mpfmt.c b/src/libmp/port/mpfmt.c
index de28bae8..0a1fb815 100644
--- a/src/libmp/port/mpfmt.c
+++ b/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,30 +123,8 @@ to10(mpint *b, char *buf, int len)
return 0;
}
-int
-mpfmt(Fmt *fmt)
-{
- 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)
+static char*
+_mptoa(mpint *b, int base, char *buf, int len, char *set16)
{
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;
+ }
+}
+