diff options
author | Ulrich Drepper <drepper@redhat.com> | 1996-09-10 02:00:15 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1996-09-10 02:00:15 +0000 |
commit | 569c558c880779d33c6642662d1aa57dff697244 (patch) | |
tree | 0e0cebd3aa3c32f9f236e8cc97bd534c9130934c /sysdeps/generic/get_str.c | |
parent | c2bb8cabc58851b00d43c15ed4c37ac393a3465b (diff) | |
download | glibc-569c558c880779d33c6642662d1aa57dff697244.tar.gz glibc-569c558c880779d33c6642662d1aa57dff697244.tar.xz glibc-569c558c880779d33c6642662d1aa57dff697244.zip |
update from main archive 960909 cvs/libc-960910
Mon Sep 9 20:31:27 1996 Ulrich Drepper <drepper@cygnus.com> * version.c (banner): Report to bug-glibc@prep not @gnu. Reported by Andreas Jaeger. * libio/stdio.h [!__USE_REENTRANT]: Don't define getc as _IO_getc_unlocked. [__USE_REENTRANT]: Don't define Mon Sep 9 15:59:32 1996 Ulrich Drepper <drepper@cygnus.com> * sysdeps/i386/strrchr.c: Fix bug where NUL byte is not recognized when it is the third byte in the string. Reported by NIIBE Yutaka. * string/tester.c: Add tests for above bug to strlen, strchr, and strrchr tests. Fri Sep 6 21:23:33 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/m68k/fpu/e_acos.c: Deansideclized. Include "math_private.h" to get prototype. * sysdeps/m68k/fpu/e_fmod.c: Likewise. * sysdeps/m68k/fpu/k_cos.c: Likewise. * sysdeps/m68k/fpu/k_sin.c: Likewise. * sysdeps/m68k/fpu/k_tan.c: Likewise. * sysdeps/m68k/fpu/k_sin.c: Remove uneeded indirection of __m81_u. * sysdeps/m68k/fpu/k_tan.c: Likewise. Sun Sep 1 18:01:35 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/m68k/fpu/__math.h: Check for __NO_M81_MATH_INLINES instead of __NO_MATH_INLINES. (__M81_MATH_INLINES): Renamed from __MATH_INLINES. * sysdeps/m68k/fpu/e_acos.c: Define __NO_M81_MATH_INLINES. * sysdeps/m68k/fpu/e_fmod.c: Likewise. * sysdeps/m68k/fpu/k_cos.c: Likewise. * sysdeps/m68k/fpu/k_sin.c: Likewise. * sysdeps/m68k/fpu/k_tan.c: Likewise. * sysdeps/m68k/fpu/s_atan.c: Likewise. * sysdeps/m68k/fpu/s_frexp.c: Likewise. * sysdeps/m68k/fpu/s_ilogb.c: Likewise. * sysdeps/m68k/fpu/s_isinf.c: Likewise. * sysdeps/m68k/fpu/s_ldexp.c: Likewise. * sysdeps/m68k/fpu/s_modf.c: Likewise. * sysdeps/m68k/fpu/k_cos.c: Use inline version of __cos. * sysdeps/m68k/fpu/k_sin.c: Likewise. * sysdeps/m68k/fpu/k_tan.c: Likewise. Mon Sep 9 12:55:14 1996 Ulrich Drepper <drepper@cygnus.com> * nss/nss_files/files-parse.c (INT_FIELD_MAYBE_NULL): Check for available character before converting number and return with error if none is available. Fri Sep 6 22:09:08 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/unix/sysv/linux/init-first.h: New file, generic implementation for architectures where parameters are passed on stack. * sysdeps/unix/sysv/linux/m68k/init-first.h: Removed. * sysdeps/unix/sysv/linux/i386/init-first.h: Removed. Fri Sep 6 22:05:32 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * configure.in: Remove unneeded sysnames frobbing. Mon Sep 9 05:29:09 1996 Ulrich Drepper <drepper@cygnus.com> * time/zic.c: Update from ADO 96l. * time/africa: Update from ADO 96k. * time/antarctica: Likewise. * time/asia: Likewise. * time/australia: Likewise. * time/europe: Likewise. * time/northamerica: Likewise. * time/southamerica: Likewise. Mon Sep 9 05:03:47 1996 NIIBE Yutaka <gniibe@mri.co.jp> * sysdeps/unix/sysv/linux/i386/init-first.h: Work around buggy gcc <= 2.7.2.1 which optimizes away address operations on weak objects. * nss/nss_files/files-parse.c (INT_FIELD_MAYBE_NULL): New macro. Like INT_FIELD but also accept non-existing field. * shadow/sgetspent_r.c (LINE_PARSER): Use INT_FIELD_MAYBE_NULL for last four fields. * shadow/putspent.c (putspent): Print `:' after numeric value. Mon Sep 9 02:42:48 1996 Richard Henderson <rth@tamu.edu> * libio/stdio.h (BUFSIZ): Define using _IO_BUFSIZ. Sun Sep 8 16:43:56 1996 Ulrich Drepper <drepper@cygnus.com> * Make-dist: Filter out $(add-ons) from $(subdirs). Don't distribute TAGS files. ($(tardir).tar): Remove dist.tar when all is done. * manual/Makefile (distribute): Add libc.info*. * libio/Makefile (distribute): Add Banner. * inet/Makefile (headers): Add netinet/tcp.h. * resolv/Makefile (libresolv-routines): Add getnetnamadr. * crypt-README: Removed. * gnu-stabs.h: Removed. * sysdeps/alpha/copysign.S: Renamed to... * sysdeps/alpha/s_copysign.S: ...this. * sysdeps/alpha/fabs.S: Renamed to... * sysdeps/alpha/s_fabs.S: ...this. * sysdeps/m68k/isinfl.c: Renamed to... * sysdeps/m68k/s_isinfl.c: ...this. * sysdeps/m68k/isnanl.c: Renamed to... * sysdeps/m68k/s_isnanl.c: ...this. * sysdeps/sparc/sqrt.c: Renamed to... * sysdeps/sparc/e_sqrt.c: ...this. Function name now is __ieee754_sqrt. * sysdeps/generic/get_str.c: Removed. * sysdeps/ieee754/cbrt.c: Removed. * sysdeps/ieee754/drem.c: Removed. * sysdeps/ieee754/logb.c: Removed. * sysdeps/ieee754/sqrt.c: Removed. * sysdeps/stub/cbrt.c: Removed. * sysdeps/stub/cos.c: Removed. * sysdeps/stub/drem.c: Removed. * sysdeps/stub/isinf.c: Removed. * sysdeps/stub/isinfl.c: Removed. * sysdeps/stub/isnanl.c: Removed. * sysdeps/stub/logb.c: Removed. * sysdeps/stub/sin.c: Removed. * sysdeps/stub/sqrt.c: Removed. * sysdeps/tahoe/log10.c: Removed. * sysdeps/vax/index.s: Removed. * sysdeps/vax/rindex.s: Removed. * sysdeps/vax/bcmp.s: Removed. * sysdeps/vax/log10.c: Removed. * sysdeps/vax/infnan.c: Removed. * sysdeps/vax/Dist: Add fl.h. * sysdeps/unix/sysv/linux/alpha/Dist: Add llseek.S. * inet/rcmd.c (rcmd): Make messages more uniform. Sun Sep 8 14:15:42 1996 Ulrich Drepper <drepper@cygnus.com> * po/de.po: Update. * po/es.po: Update. * po/ko.po: Update. * po/pl.po: New file. * po/nl.po: New file. take care for a possible clash. Nobody will name the domain
Diffstat (limited to 'sysdeps/generic/get_str.c')
-rw-r--r-- | sysdeps/generic/get_str.c | 213 |
1 files changed, 0 insertions, 213 deletions
diff --git a/sysdeps/generic/get_str.c b/sysdeps/generic/get_str.c deleted file mode 100644 index 182815ee18..0000000000 --- a/sysdeps/generic/get_str.c +++ /dev/null @@ -1,213 +0,0 @@ -/* __mpn_get_str -- Convert a MSIZE long limb vector pointed to by MPTR - to a printable string in STR in base BASE. - -Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. - - -This file is part of the GNU C Library. Its master source is NOT part of -the C library, however. This file is in fact copied from the GNU MP -Library and its source lives there. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* Convert the limb vector pointed to by MPTR and MSIZE long to a - char array, using base BASE for the result array. Store the - result in the character array STR. STR must point to an array with - space for the largest possible number represented by a MSIZE long - limb vector + 1 extra character. - - The result is NOT in Ascii, to convert it to printable format, add - '0' or 'A' depending on the base and range. - - Return the number of digits in the result string. - This may include some leading zeros. - - The limb vector pointed to by MPTR is clobbered. */ - -size_t -__mpn_get_str (str, base, mptr, msize) - unsigned char *str; - int base; - mp_ptr mptr; - mp_size_t msize; -{ - mp_limb big_base; -#if UDIV_NEEDS_NORMALIZATION || UDIV_TIME > 2 * UMUL_TIME - int normalization_steps; -#endif -#if UDIV_TIME > 2 * UMUL_TIME - mp_limb big_base_inverted; -#endif - unsigned int dig_per_u; - mp_size_t out_len; - register unsigned char *s; - - big_base = __mp_bases[base].big_base; - - s = str; - - /* Special case zero, as the code below doesn't handle it. */ - if (msize == 0) - { - s[0] = 0; - return 1; - } - - if ((base & (base - 1)) == 0) - { - /* The base is a power of 2. Make conversion from most - significant side. */ - mp_limb n1, n0; - register int bits_per_digit = big_base; - register int x; - register int bit_pos; - register int i; - - n1 = mptr[msize - 1]; - count_leading_zeros (x, n1); - - /* BIT_POS should be R when input ends in least sign. nibble, - R + bits_per_digit * n when input ends in n:th least significant - nibble. */ - - { - int bits; - - bits = BITS_PER_MP_LIMB * msize - x; - x = bits % bits_per_digit; - if (x != 0) - bits += bits_per_digit - x; - bit_pos = bits - (msize - 1) * BITS_PER_MP_LIMB; - } - - /* Fast loop for bit output. */ - i = msize - 1; - for (;;) - { - bit_pos -= bits_per_digit; - while (bit_pos >= 0) - { - *s++ = (n1 >> bit_pos) & ((1 << bits_per_digit) - 1); - bit_pos -= bits_per_digit; - } - i--; - if (i < 0) - break; - n0 = (n1 << -bit_pos) & ((1 << bits_per_digit) - 1); - n1 = mptr[i]; - bit_pos += BITS_PER_MP_LIMB; - *s++ = n0 | (n1 >> bit_pos); - } - - *s = 0; - - return s - str; - } - else - { - /* General case. The base is not a power of 2. Make conversion - from least significant end. */ - - /* If udiv_qrnnd only handles divisors with the most significant bit - set, prepare BIG_BASE for being a divisor by shifting it to the - left exactly enough to set the most significant bit. */ -#if UDIV_NEEDS_NORMALIZATION || UDIV_TIME > 2 * UMUL_TIME - count_leading_zeros (normalization_steps, big_base); - big_base <<= normalization_steps; -#if UDIV_TIME > 2 * UMUL_TIME - /* Get the fixed-point approximation to 1/(BIG_BASE << NORMALIZATION_STEPS). */ - big_base_inverted = __mp_bases[base].big_base_inverted; -#endif -#endif - - dig_per_u = __mp_bases[base].chars_per_limb; - out_len = ((size_t) msize * BITS_PER_MP_LIMB - * __mp_bases[base].chars_per_bit_exactly) + 1; - s += out_len; - - while (msize != 0) - { - int i; - mp_limb n0, n1; - -#if UDIV_NEEDS_NORMALIZATION || UDIV_TIME > 2 * UMUL_TIME - /* If we shifted BIG_BASE above, shift the dividend too, to get - the right quotient. We need to do this every loop, - since the intermediate quotients are OK, but the quotient from - one turn in the loop is going to be the dividend in the - next turn, and the dividend needs to be up-shifted. */ - if (normalization_steps != 0) - { - n0 = __mpn_lshift (mptr, mptr, msize, normalization_steps); - - /* If the shifting gave a carry out limb, store it and - increase the length. */ - if (n0 != 0) - { - mptr[msize] = n0; - msize++; - } - } -#endif - - /* Divide the number at TP with BIG_BASE to get a quotient and a - remainder. The remainder is our new digit in base BIG_BASE. */ - i = msize - 1; - n1 = mptr[i]; - - if (n1 >= big_base) - n1 = 0; - else - { - msize--; - i--; - } - - for (; i >= 0; i--) - { - n0 = mptr[i]; -#if UDIV_TIME > 2 * UMUL_TIME - udiv_qrnnd_preinv (mptr[i], n1, n1, n0, big_base, big_base_inverted); -#else - udiv_qrnnd (mptr[i], n1, n1, n0, big_base); -#endif - } - -#if UDIV_NEEDS_NORMALIZATION || UDIV_TIME > 2 * UMUL_TIME - /* If we shifted above (at previous UDIV_NEEDS_NORMALIZATION tests) - the remainder will be up-shifted here. Compensate. */ - n1 >>= normalization_steps; -#endif - - /* Convert N1 from BIG_BASE to a string of digits in BASE - using single precision operations. */ - for (i = dig_per_u - 1; i >= 0; i--) - { - *--s = n1 % base; - n1 /= base; - if (n1 == 0 && msize == 0) - break; - } - } - - while (s != str) - *--s = 0; - return out_len; - } -} |