61 lines
1.5 KiB
Diff
61 lines
1.5 KiB
Diff
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
|
|
|