12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- From 198358dd8ff858c9e36531a7406ccb2246ae77b7 Mon Sep 17 00:00:00 2001
- From: Akira TAGOH <akira@tagoh.org>
- Date: Mon, 12 Mar 2018 11:49:58 +0900
- Subject: [PATCH] Allow the constant names in the range
- https://bugs.freedesktop.org/show_bug.cgi?id=105415
- ---
- src/fcname.c | 34 +++++++++++++++++++++++++++++-----
- 1 file changed, 29 insertions(+), 5 deletions(-)
- diff --git a/src/fcname.c b/src/fcname.c
- index 79e413e..15fb659 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);
- --
- 2.14.3
|