You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.5 KiB
61 lines
1.5 KiB
6 years ago
|
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
|
||
|
|