diff options
Diffstat (limited to 'src/fontfile/dirfile.c')
-rw-r--r-- | src/fontfile/dirfile.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/src/fontfile/dirfile.c b/src/fontfile/dirfile.c index 38ced75..661787a 100644 --- a/src/fontfile/dirfile.c +++ b/src/fontfile/dirfile.c @@ -41,6 +41,7 @@ in this Software without prior written authorization from The Open Group. #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> +#include <fcntl.h> #include <errno.h> #include <limits.h> @@ -60,8 +61,9 @@ FontFileReadDirectory (const char *directory, FontDirectoryPtr *pdir) char dir_file[MAXFONTFILENAMELEN]; char dir_path[MAXFONTFILENAMELEN]; char *ptr; - FILE *file; - int count, + FILE *file = 0; + int file_fd, + count, num_fonts, status; struct stat statb; @@ -91,7 +93,14 @@ FontFileReadDirectory (const char *directory, FontDirectoryPtr *pdir) if (dir_file[strlen(dir_file) - 1] != '/') strcat(dir_file, "/"); strcat(dir_file, FontDirFile); +#ifndef WIN32 + file_fd = open(dir_file, O_RDONLY | O_NOFOLLOW); + if (file_fd >= 0) { + file = fdopen(file_fd, "rt"); + } +#else file = fopen(dir_file, "rt"); +#endif if (file) { #ifndef WIN32 if (fstat (fileno(file), &statb) == -1) @@ -261,7 +270,8 @@ ReadFontAlias(char *directory, Bool isFile, FontDirectoryPtr *pdir) char alias[MAXFONTNAMELEN]; char font_name[MAXFONTNAMELEN]; char alias_file[MAXFONTFILENAMELEN]; - FILE *file; + int file_fd; + FILE *file = 0; FontDirectoryPtr dir; int token; char *lexToken; @@ -279,7 +289,16 @@ ReadFontAlias(char *directory, Bool isFile, FontDirectoryPtr *pdir) strcat(alias_file, "/"); strcat(alias_file, FontAliasFile); } + +#ifndef WIN32 + file_fd = open(alias_file, O_RDONLY | O_NOFOLLOW); + if (file_fd >= 0) { + file = fdopen(file_fd, "rt"); + } +#else file = fopen(alias_file, "rt"); +#endif + if (!file) return ((errno == ENOENT) ? Successful : BadFontPath); if (!dir) |