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.
60 lines
1.5 KiB
60 lines
1.5 KiB
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 |
|
|
|
|