]>
Commit | Line | Data |
---|---|---|
224401c7 JP |
1 | diff --git a/src/fcname.c b/src/fcname.c |
2 | index 79e413e..2172d70 100644 | |
3 | --- a/src/fcname.c | |
4 | +++ b/src/fcname.c | |
5 | @@ -330,13 +330,36 @@ FcNameConvert (FcType type, FcChar8 *string) | |
6 | case FcTypeRange: | |
7 | if (sscanf ((char *) string, "[%lg %lg]", &b, &e) != 2) | |
8 | { | |
9 | - v.u.d = strtod ((char *) string, &p); | |
10 | - if (p != NULL && p[0] != 0) | |
11 | + char *sc, *ec; | |
12 | + size_t len = strlen ((const char *) string); | |
13 | + int si, ei; | |
14 | + | |
15 | + sc = malloc (len); | |
16 | + ec = malloc (len); | |
17 | + if (sc && ec && sscanf ((char *) string, "[%s %[^]]]", sc, ec) == 2) | |
18 | { | |
19 | - v.type = FcTypeVoid; | |
20 | - break; | |
21 | + if (FcNameConstant ((const FcChar8 *) sc, &si) && FcNameConstant ((const FcChar8 *) ec, &ei)) | |
22 | + v.u.r = FcRangeCreateDouble (si, ei); | |
23 | + else | |
24 | + goto bail1; | |
25 | + } | |
26 | + else | |
27 | + { | |
28 | + bail1: | |
29 | + v.type = FcTypeDouble; | |
30 | + if (FcNameConstant (string, &si)) | |
31 | + { | |
32 | + v.u.d = (double) si; | |
33 | + } else { | |
34 | + v.u.d = strtod ((char *) string, &p); | |
35 | + if (p != NULL && p[0] != 0) | |
36 | + v.type = FcTypeVoid; | |
37 | + } | |
38 | } | |
39 | - v.type = FcTypeDouble; | |
40 | + if (sc) | |
41 | + free (sc); | |
42 | + if (ec) | |
43 | + free (ec); | |
44 | } | |
45 | else | |
46 | v.u.r = FcRangeCreateDouble (b, e); |