summaryrefslogtreecommitdiff
path: root/src/strtoc.c
diff options
context:
space:
mode:
authorenge <enge@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2009-03-19 11:31:34 +0000
committerenge <enge@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2009-03-19 11:31:34 +0000
commit9789a00771c4d683fe3d6e6f9574b0f228d16036 (patch)
tree1121c6a92dac37cd8c3ec5bb9ee95a9db29bdd81 /src/strtoc.c
parent3a61f0483bdde1ee951d56609d453bf40cd85297 (diff)
downloadmpc-9789a00771c4d683fe3d6e6f9574b0f228d16036.tar.gz
strtoc returns -1 upon error
git-svn-id: svn://scm.gforge.inria.fr/svn/mpc/trunk@467 211d60ee-9f03-0410-a15a-8952a2c7a4e4
Diffstat (limited to 'src/strtoc.c')
-rw-r--r--src/strtoc.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/src/strtoc.c b/src/strtoc.c
index cd3e2d7..6da6959 100644
--- a/src/strtoc.c
+++ b/src/strtoc.c
@@ -1,6 +1,6 @@
/* mpc_strtoc -- Read a complex number from a string.
-Copyright (C) 2009 Philippe Th\'eveny
+Copyright (C) 2009 Philippe Th\'eveny, Andreas Enge
This file is part of the MPC Library.
@@ -26,24 +26,24 @@ MA 02111-1307, USA. */
#include "config.h"
+static void
+skip_whitespace (char **p) {
+ while (isspace ((unsigned char) **p))
+ (*p)++;
+}
+
int
-mpc_strtoc (mpc_ptr rop, char *nptr, char **endptr, int base, mpc_rnd_t rnd)
-{
- char *p;
- char *end;
- int bracketed = 0;
+mpc_strtoc (mpc_ptr rop, char *nptr, char **endptr, int base, mpc_rnd_t rnd) {
+ char *p, *end;
+ int bracketed = 0;
- int inex_re = 0;
- int inex_im = 0;
+ int inex_re = 0, inex_im = 0;
- if (base != 0 && (base < 2 || base > 62))
- goto error;
-
- if (nptr == NULL)
+ if (nptr == NULL || base > 36 || base == 1)
goto error;
p = nptr;
- for (p = nptr; isspace (*p); ++p);
+ skip_whitespace (&p);
if (*p == '(')
{
@@ -67,7 +67,7 @@ mpc_strtoc (mpc_ptr rop, char *nptr, char **endptr, int base, mpc_rnd_t rnd)
if (end == p)
goto error;
p = end;
-
+
if (*p != ')')
goto error;
@@ -87,5 +87,5 @@ mpc_strtoc (mpc_ptr rop, char *nptr, char **endptr, int base, mpc_rnd_t rnd)
*endptr = nptr;
mpfr_set_nan (MPC_RE (rop));
mpfr_set_nan (MPC_IM (rop));
- return 0;
+ return -1;
}