Browse Source

Fixed bug #26635 (fixed look up for fonts in the current directory w/ZTS)

PEAR_1_4DEV
Ilia Alshanetsky 23 years ago
parent
commit
e440d4fbea
  1. 42
      ext/gd/libgd/gdft.c

42
ext/gd/libgd/gdft.c

@ -357,7 +357,7 @@ static void *fontFetch (char **error, void *key)
int font_found = 0;
unsigned short platform, encoding;
char *fontsearchpath, *fontlist;
char *fullname = NULL;
char fullname[MAXPATHLEN], cur_dir[MAXPATHLEN];
char *name, *path=NULL, *dir;
char *strtok_ptr;
FT_Error err;
@ -383,38 +383,43 @@ static void *fontFetch (char **error, void *key)
for (name = gd_strtok_r (fontlist, LISTSEPARATOR, &strtok_ptr); name; name = gd_strtok_r (0, LISTSEPARATOR, &strtok_ptr)) {
/* make a fresh copy each time - strtok corrupts it. */
path = gdEstrdup (fontsearchpath);
/*
* Allocate an oversized buffer that is guaranteed to be
* big enough for all paths to be tested.
*/
fullname = gdRealloc (fullname, strlen (fontsearchpath) + strlen (name) + 6);
/* if name is an absolute filename then test directly */
if (*name == '/' || (name[0] != 0 && name[1] == ':' && (name[2] == '/' || name[2] == '\\'))) {
sprintf(fullname, "%s", name);
snprintf(fullname, sizeof(fullname) - 1, "%s", name);
if (access(fullname, R_OK) == 0) {
font_found++;
break;
}
}
for (dir = strtok (path, PATHSEPARATOR); dir; dir = strtok (0, PATHSEPARATOR)) {
sprintf(fullname, "%s/%s", dir, name);
if (access (fullname, R_OK) == 0) {
if (!strcmp(dir, ".")) {
#if HAVE_GETCWD
dir = VCWD_GETCWD(cur_dir, MAXPATHLEN);
#elif HAVE_GETWD
dir = VCWD_GETWD(cur_dir);
#endif
if (!dir) {
continue;
}
}
snprintf(fullname, sizeof(fullname) - 1, "%s/%s", dir, name);
if (access(fullname, R_OK) == 0) {
font_found++;
break;
}
sprintf(fullname, "%s/%s.ttf", dir, name);
if (access (fullname, R_OK) == 0) {
snprintf(fullname, sizeof(fullname) - 1, "%s/%s.ttf", dir, name);
if (access(fullname, R_OK) == 0) {
font_found++;
break;
}
sprintf(fullname, "%s/%s.pfa", dir, name);
snprintf(fullname, sizeof(fullname) - 1, "%s/%s.pfa", dir, name);
if (access(fullname, R_OK) == 0) {
font_found++;
break;
}
sprintf (fullname, "%s/%s.pfb", dir, name);
snprintf(fullname, sizeof(fullname) - 1, "%s/%s.pfb", dir, name);
if (access(fullname, R_OK) == 0) {
font_found++;
break;
@ -436,9 +441,6 @@ static void *fontFetch (char **error, void *key)
if (!font_found) {
gdPFree(a->fontlist);
gdPFree(a);
if (fullname) {
gdFree(fullname);
}
*error = "Could not find/open font";
return NULL;
}
@ -447,13 +449,9 @@ static void *fontFetch (char **error, void *key)
if (err) {
gdPFree(a->fontlist);
gdPFree(a);
if (fullname) {
gdFree(fullname);
}
*error = "Could not read font";
return NULL;
}
gdFree(fullname);
/* FIXME - This mapping stuff is imcomplete - where is the spec? */

Loading…
Cancel
Save