projects
/
u
/
mdw
/
catacomb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix fencepost bugs in binary radix writing.
[u/mdw/catacomb]
/
mptext.c
diff --git
a/mptext.c
b/mptext.c
index
565322d
..
40e1764
100644
(file)
--- a/
mptext.c
+++ b/
mptext.c
@@
-1,6
+1,6
@@
/* -*-c-*-
*
/* -*-c-*-
*
- * $Id: mptext.c,v 1.1
4 2002/10/09 00:33:44
mdw Exp $
+ * $Id: mptext.c,v 1.1
5 2002/10/15 19:18:15
mdw Exp $
*
* Textual representation of multiprecision numbers
*
*
* Textual representation of multiprecision numbers
*
@@
-30,6
+30,9
@@
/*----- Revision history --------------------------------------------------*
*
* $Log: mptext.c,v $
/*----- Revision history --------------------------------------------------*
*
* $Log: mptext.c,v $
+ * Revision 1.15 2002/10/15 19:18:15 mdw
+ * Fix fencepost bugs in binary radix writing.
+ *
* Revision 1.14 2002/10/09 00:33:44 mdw
* Allow `0o' and `0b' prefixes for octal and binary (from Haskell)
*
* Revision 1.14 2002/10/09 00:33:44 mdw
* Allow `0o' and `0b' prefixes for octal and binary (from Haskell)
*
@@
-629,11
+632,12
@@
static int binary(mp *m, int bit, int radix, const mptext_ops *ops, void *p)
/* --- Work out where to start --- */
n = mp_bits(m);
/* --- Work out where to start --- */
n = mp_bits(m);
- n += bit - (n % bit);
+ if (n % bit)
+ n += bit - (n % bit);
b = n % MPW_BITS;
n /= MPW_BITS;
b = n % MPW_BITS;
n /= MPW_BITS;
-
- if (n > MP_LEN(m)) {
+
+ if (n >
=
MP_LEN(m)) {
n--;
b += MPW_BITS;
}
n--;
b += MPW_BITS;
}
@@
-704,6
+708,9
@@
int mp_write(mp *m, int radix, const mptext_ops *ops, void *p)
{
int rc;
{
int rc;
+ if (MP_EQ(m, MP_ZERO))
+ return (ops->put("0", 1, p));
+
/* --- Set various things up --- */
m = MP_COPY(m);
/* --- Set various things up --- */
m = MP_COPY(m);