diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | manual/nss.texi | 2 | ||||
-rw-r--r-- | stdio-common/_itoa.c | 83 |
3 files changed, 47 insertions, 41 deletions
@@ -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 dd8aa9e..e3ff131 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 af48360..3a7cd78 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); |