diff options
author | Akira TAGOH <akira@tagoh.org> | 2018-03-12 11:49:58 +0900 |
---|---|---|
committer | Akira TAGOH <akira@tagoh.org> | 2018-03-12 11:49:58 +0900 |
commit | 198358dd8ff858c9e36531a7406ccb2246ae77b7 (patch) | |
tree | ead79f66b801ec0edd1f42e68e39ec41669161d1 /src | |
parent | af687139f2866a736f294c7c54f9ea57219a079b (diff) |
Allow the constant names in the range
https://bugs.freedesktop.org/show_bug.cgi?id=105415
Diffstat (limited to 'src')
-rw-r--r-- | src/fcname.c | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/src/fcname.c b/src/fcname.c index 79e413e1..15fb659b 100644 --- a/src/fcname.c +++ b/src/fcname.c @@ -330,13 +330,37 @@ FcNameConvert (FcType type, FcChar8 *string) case FcTypeRange: if (sscanf ((char *) string, "[%lg %lg]", &b, &e) != 2) { - v.u.d = strtod ((char *) string, &p); - if (p != NULL && p[0] != 0) + char *sc, *ec; + size_t len = strlen ((const char *) string); + int si, ei; + + sc = malloc (len); + ec = malloc (len); + if (sc && ec && sscanf ((char *) string, "[%s %[^]]]", sc, ec) == 2) { - v.type = FcTypeVoid; - break; + if (FcNameConstant ((const FcChar8 *) sc, &si) && + FcNameConstant ((const FcChar8 *) ec, &ei)) + v.u.r = FcRangeCreateDouble (si, ei); + else + goto bail1; + } + else + { + bail1: + v.type = FcTypeDouble; + if (FcNameConstant (string, &si)) + { + v.u.d = (double) si; + } else { + v.u.d = strtod ((char *) string, &p); + if (p != NULL && p[0] != 0) + v.type = FcTypeVoid; + } } - v.type = FcTypeDouble; + if (sc) + free (sc); + if (ec) + free (ec); } else v.u.r = FcRangeCreateDouble (b, e); |