fontconfig-const-name-in-range.patch 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. From 198358dd8ff858c9e36531a7406ccb2246ae77b7 Mon Sep 17 00:00:00 2001
  2. From: Akira TAGOH <akira@tagoh.org>
  3. Date: Mon, 12 Mar 2018 11:49:58 +0900
  4. Subject: [PATCH] Allow the constant names in the range
  5. https://bugs.freedesktop.org/show_bug.cgi?id=105415
  6. ---
  7. src/fcname.c | 34 +++++++++++++++++++++++++++++-----
  8. 1 file changed, 29 insertions(+), 5 deletions(-)
  9. diff --git a/src/fcname.c b/src/fcname.c
  10. index 79e413e..15fb659 100644
  11. --- a/src/fcname.c
  12. +++ b/src/fcname.c
  13. @@ -330,13 +330,37 @@ FcNameConvert (FcType type, FcChar8 *string)
  14. case FcTypeRange:
  15. if (sscanf ((char *) string, "[%lg %lg]", &b, &e) != 2)
  16. {
  17. - v.u.d = strtod ((char *) string, &p);
  18. - if (p != NULL && p[0] != 0)
  19. + char *sc, *ec;
  20. + size_t len = strlen ((const char *) string);
  21. + int si, ei;
  22. +
  23. + sc = malloc (len);
  24. + ec = malloc (len);
  25. + if (sc && ec && sscanf ((char *) string, "[%s %[^]]]", sc, ec) == 2)
  26. {
  27. - v.type = FcTypeVoid;
  28. - break;
  29. + if (FcNameConstant ((const FcChar8 *) sc, &si) &&
  30. + FcNameConstant ((const FcChar8 *) ec, &ei))
  31. + v.u.r = FcRangeCreateDouble (si, ei);
  32. + else
  33. + goto bail1;
  34. + }
  35. + else
  36. + {
  37. + bail1:
  38. + v.type = FcTypeDouble;
  39. + if (FcNameConstant (string, &si))
  40. + {
  41. + v.u.d = (double) si;
  42. + } else {
  43. + v.u.d = strtod ((char *) string, &p);
  44. + if (p != NULL && p[0] != 0)
  45. + v.type = FcTypeVoid;
  46. + }
  47. }
  48. - v.type = FcTypeDouble;
  49. + if (sc)
  50. + free (sc);
  51. + if (ec)
  52. + free (ec);
  53. }
  54. else
  55. v.u.r = FcRangeCreateDouble (b, e);
  56. --
  57. 2.14.3