aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--manual/nss.texi2
-rw-r--r--stdio-common/_itoa.c83
3 files changed, 47 insertions, 41 deletions
diff --git a/ChangeLog b/ChangeLog
index 0f4ac9859a..c82015c406 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
1999-05-05 Ulrich Drepper <drepper@cygnus.com>
+ * stdio-common/_itoa.c (_itoa): Fix special 32bit platform case
+ with specific bases and only few bits set in second word.
+
* timezone/Makefile (install-others): Create target directory
before creating tzfiles.
diff --git a/manual/nss.texi b/manual/nss.texi
index dd8aa9e210..e3ff131875 100644
--- a/manual/nss.texi
+++ b/manual/nss.texi
@@ -226,7 +226,7 @@ value for the actions are normally what you want, and only need to be
changed in exceptional cases.
If the optional @code{!} is placed before the @var{status} this means
-the following action is used for all statii but @var{status} itself.
+the following action is used for all statuses but @var{status} itself.
I.e., @code{!} is negation as in the C language (and others).
Before we explain the exception which makes this action item necessary
diff --git a/stdio-common/_itoa.c b/stdio-common/_itoa.c
index af4836036f..3a7cd78003 100644
--- a/stdio-common/_itoa.c
+++ b/stdio-common/_itoa.c
@@ -175,46 +175,49 @@ _itoa (value, buflim, base, upper_case)
switch (base)
{
-#define RUN_2N(BITS) \
- do \
- { \
- /* `unsigned long long int' always has 64 bits. */ \
- mp_limb_t work_hi = value >> (64 - BITS_PER_MP_LIMB); \
- \
- if (BITS_PER_MP_LIMB == 32) \
- { \
- if (work_hi != 0) \
- { \
- mp_limb_t work_lo; \
- int cnt; \
- \
- work_lo = value & 0xfffffffful; \
- for (cnt = BITS_PER_MP_LIMB / BITS; cnt > 0; --cnt) \
- { \
- *--bp = digits[work_lo & ((1ul << BITS) - 1)]; \
- work_lo >>= BITS; \
- } \
- if (BITS_PER_MP_LIMB % BITS != 0) \
- { \
- work_lo \
- |= ((work_hi \
- & ((1 << (BITS - BITS_PER_MP_LIMB%BITS)) \
- - 1)) \
- << BITS_PER_MP_LIMB % BITS); \
- *--bp = digits[work_lo]; \
- work_hi >>= BITS - BITS_PER_MP_LIMB % BITS; \
- } \
- } \
- else \
- work_hi = value & 0xfffffffful; \
- } \
- do \
- { \
- *--bp = digits[work_hi & ((1 << BITS) - 1)]; \
- work_hi >>= BITS; \
- } \
- while (work_hi != 0); \
- } \
+#define RUN_2N(BITS) \
+ do \
+ { \
+ /* `unsigned long long int' always has 64 bits. */ \
+ mp_limb_t work_hi = value >> (64 - BITS_PER_MP_LIMB); \
+ \
+ if (BITS_PER_MP_LIMB == 32) \
+ { \
+ if (work_hi != 0) \
+ { \
+ mp_limb_t work_lo; \
+ int cnt; \
+ \
+ work_lo = value & 0xfffffffful; \
+ for (cnt = BITS_PER_MP_LIMB / BITS; cnt > 0; --cnt) \
+ { \
+ *--bp = digits[work_lo & ((1ul << BITS) - 1)]; \
+ work_lo >>= BITS; \
+ } \
+ if (BITS_PER_MP_LIMB % BITS != 0) \
+ { \
+ work_lo \
+ |= ((work_hi \
+ & ((1 << (BITS - BITS_PER_MP_LIMB%BITS)) \
+ - 1)) \
+ << BITS_PER_MP_LIMB % BITS); \
+ work_hi >>= BITS - BITS_PER_MP_LIMB % BITS; \
+ if (work_hi == 0) \
+ work_hi = work_lo; \
+ else \
+ *--bp = digits[work_lo]; \
+ } \
+ } \
+ else \
+ work_hi = value & 0xfffffffful; \
+ } \
+ do \
+ { \
+ *--bp = digits[work_hi & ((1 << BITS) - 1)]; \
+ work_hi >>= BITS; \
+ } \
+ while (work_hi != 0); \
+ } \
while (0)
case 8:
RUN_2N (3);