summaryrefslogtreecommitdiff
path: root/Build/source/libs/mpfr/mpfr-src/src/inp_str.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/mpfr/mpfr-src/src/inp_str.c')
-rw-r--r--Build/source/libs/mpfr/mpfr-src/src/inp_str.c109
1 files changed, 0 insertions, 109 deletions
diff --git a/Build/source/libs/mpfr/mpfr-src/src/inp_str.c b/Build/source/libs/mpfr/mpfr-src/src/inp_str.c
deleted file mode 100644
index e5b27ace139..00000000000
--- a/Build/source/libs/mpfr/mpfr-src/src/inp_str.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* mpfr_inp_str -- input a number in base BASE from stdio stream STREAM
- and store the result in ROP
-
-Copyright 1999, 2001-2002, 2004, 2006-2020 Free Software Foundation, Inc.
-Contributed by the AriC and Caramba projects, INRIA.
-
-This file is part of the GNU MPFR Library.
-
-The GNU MPFR Library is free software; you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation; either version 3 of the License, or (at your
-option) any later version.
-
-The GNU MPFR 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 Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser General Public License
-along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
-https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
-51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <ctype.h>
-
-#include "mpfr-impl.h"
-
-/* The original version of this function came from GMP's mpf/inp_str.c;
- it has been adapted for MPFR. */
-
-size_t
-mpfr_inp_str (mpfr_ptr rop, FILE *stream, int base, mpfr_rnd_t rnd_mode)
-{
- unsigned char *str;
- size_t alloc_size, str_size;
- int c;
- int retval;
- size_t nread;
-
- alloc_size = 100;
- str = (unsigned char *) mpfr_allocate_func (alloc_size);
- str_size = 0;
- nread = 0;
-
- /* Skip whitespace. EOF will be detected later. */
- do
- {
- c = getc (stream);
- nread++;
- }
- while (isspace (c));
-
- /* number of characters read is nread */
-
- for (;;)
- {
- MPFR_ASSERTD (str_size < (size_t) -1);
- if (str_size >= alloc_size)
- {
- size_t old_alloc_size = alloc_size;
- alloc_size = alloc_size / 2 * 3;
- /* Handle overflow in unsigned integer arithmetic... */
- if (MPFR_UNLIKELY (alloc_size <= old_alloc_size))
- alloc_size = (size_t) -1;
- MPFR_ASSERTD (str_size < alloc_size);
- str = (unsigned char *)
- mpfr_reallocate_func (str, old_alloc_size, alloc_size);
- }
- if (c == EOF || isspace (c))
- break;
- str[str_size++] = (unsigned char) c;
- if (str_size == (size_t) -1)
- break;
- c = getc (stream);
- }
- ungetc (c, stream);
-
- if (MPFR_UNLIKELY (str_size == (size_t) -1 || str_size == 0 ||
- (c == EOF && ! feof (stream))))
- {
- /* size_t overflow or I/O error */
- retval = -1;
- }
- else
- {
- /* number of characters read is nread + str_size - 1 */
-
- /* We exited the "for" loop by the first break instruction,
- then necessarily str_size >= alloc_size was checked, so
- now str_size < alloc_size. */
- MPFR_ASSERTD (str_size < alloc_size);
-
- str[str_size] = '\0';
-
- retval = mpfr_set_str (rop, (char *) str, base, rnd_mode);
- }
-
- mpfr_free_func (str, alloc_size);
-
- if (retval == -1)
- return 0; /* error */
-
- MPFR_ASSERTD (nread >= 1);
- str_size += nread - 1;
- if (MPFR_UNLIKELY (str_size < nread - 1)) /* size_t overflow */
- return 0; /* however rop has been set successfully */
- else
- return str_size;
-}