1 /*
2 * C99-compatible strtod() implementation
3 * Copyright (c) 2012 Ronald S. Bultje <rsbultje@gmail.com>
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
23 #include <stdlib.h>
24
27
29 {
30 const char *start =
s;
31
33 return start;
34
35 while ((*
s >=
'a' && *
s <=
'z') || (*
s >=
'A' && *
s <=
'Z') ||
36 (*
s >=
'0' && *
s <=
'9') || *
s ==
'_')
38
39 return *
s ==
')' ?
s + 1 : start;
40 }
41
42 #undef strtod
43 double strtod(
const char *,
char **);
44
46 {
47 const char *end;
48 double res;
49
50 /* Skip leading spaces */
52 nptr++;
53
55 end = nptr + 8;
58 end = nptr + 3;
61 end = nptr + 9;
64 end = nptr + 4;
67 end = nptr + 9;
70 end = nptr + 4;
82 /* FIXME this doesn't handle exponents, non-integers (float/double)
83 * and numbers too large for long long */
84 res = strtoll(nptr, (char **)&end, 16);
85 } else {
86 res =
strtod(nptr, (
char **)&end);
87 }
88
89 if (endptr)
90 *endptr = (char *)end;
91
92 return res;
93 }