[PATCH] Improve the check for "built-ins" in fontpath
Jon TURNEY
jon.turney at dronecode.org.uk
Mon Sep 14 10:10:57 PDT 2009
Improve check for an existing "built-ins" in the fontpath so it
doesn't get misled if "built-ins" exists as a substring of a path
or hostname.
Also fix some signedness mismatch warnings in that code
Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
---
dix/dixfonts.c | 42 ++++++++++++++++++++++++++++--------------
1 files changed, 28 insertions(+), 14 deletions(-)
diff --git a/dix/dixfonts.c b/dix/dixfonts.c
index c8b7bdc..398782b 100644
--- a/dix/dixfonts.c
+++ b/dix/dixfonts.c
@@ -1813,27 +1813,41 @@ SetDefaultFontPath(char *path)
unsigned char *cp,
*pp,
*nump,
- *temp_path,
- *start,
- *end,
*newpath;
+ char *start,
+ *end,
+ *temp_path;
int num = 1,
len,
err,
size = 0,
bad;
- /* ensure temp_path contains "built-ins" */
- start = strstr(path, "built-ins");
- end = start + strlen("built-ins");
- if (start == NULL ||
- !((start == path || start[-1] == ',') && (!*end || *end == ','))) {
- temp_path = Xprintf("%s%sbuilt-ins", path, *path ? "," : "");
- } else {
- temp_path = Xstrdup(path);
- }
- if (!temp_path)
- return BadAlloc;
+ /* ensure temp_path contains "built-ins" */
+ start = path;
+ while (1) {
+ end = strstr(start, ",");
+ if (end == NULL)
+ end = start + strlen(start);
+
+ if ((end - start) == strlen("built-ins") && strncmp(start, "built-ins", strlen("built-ins")) == 0)
+ break;
+
+ if (*end == '\0')
+ {
+ start = NULL;
+ break;
+ }
+
+ start = end + 1;
+ }
+ if (!start) {
+ temp_path = Xprintf("%s%sbuilt-ins", path, *path ? "," : "");
+ } else {
+ temp_path = Xstrdup(path);
+ }
+ if (!temp_path)
+ return BadAlloc;
/* get enough for string, plus values -- use up commas */
len = strlen(temp_path) + 1;
--
1.6.4.2
More information about the xorg-devel
mailing list