[PATCH 6/8] gdi32: Cleanup ReadFontDir and return the number of faces added.
Rémi Bernon
rbernon at codeweavers.com
Wed Sep 9 05:22:02 CDT 2020
Rename it to add_faces_from_dir / add_faces_from_unix_dir, as we will
later add fontconfig dir support.
Move add_faces_from_dir below fontconfig functions, so we can use them
later.
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/gdi32/freetype.c | 81 +++++++++++++++++++++----------------------
1 file changed, 39 insertions(+), 42 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index c613171e237..e26526462ba 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -2757,55 +2757,41 @@ skip_internal:
list_add_tail(&system_links, &system_font_link->entry);
}
-static BOOL ReadFontDir(const char *dirname, BOOL external_fonts)
+static int add_faces_from_unix_dir( const char *unix_name, DWORD flags )
{
- DIR *dir;
struct dirent *dent;
char path[MAX_PATH];
+ DIR *dir;
+ int ret = 0;
- TRACE("Loading fonts from %s\n", debugstr_a(dirname));
+ TRACE( "Loading fonts from %s\n", debugstr_a(unix_name) );
- dir = opendir(dirname);
- if(!dir) {
- WARN("Can't open directory %s\n", debugstr_a(dirname));
- return FALSE;
+ if (!(dir = opendir( unix_name )))
+ {
+ WARN( "Can't open directory %s\n", debugstr_a(unix_name) );
+ return 0;
}
- while((dent = readdir(dir)) != NULL) {
- struct stat statbuf;
-
- if(!strcmp(dent->d_name, ".") || !strcmp(dent->d_name, ".."))
- continue;
- TRACE("Found %s in %s\n", debugstr_a(dent->d_name), debugstr_a(dirname));
+ while ((dent = readdir( dir )) != NULL)
+ {
+ struct stat statbuf;
+ if (!strcmp( dent->d_name, "." ) || !strcmp( dent->d_name, ".." )) continue;
- sprintf(path, "%s/%s", dirname, dent->d_name);
+ TRACE( "Found %s in %s\n", debugstr_a(dent->d_name), debugstr_a(unix_name) );
- if(stat(path, &statbuf) == -1)
- {
- WARN("Can't stat %s\n", debugstr_a(path));
- continue;
- }
- if(S_ISDIR(statbuf.st_mode))
- ReadFontDir(path, external_fonts);
- else
+ sprintf( path, "%s/%s", unix_name, dent->d_name );
+ if (stat( path, &statbuf ) == -1)
{
- DWORD addfont_flags = ADDFONT_ADD_TO_CACHE;
- if(external_fonts) addfont_flags |= ADDFONT_EXTERNAL_FONT;
- AddFontToList( path, addfont_flags );
+ WARN( "Can't stat %s\n", debugstr_a(path) );
+ continue;
}
- }
- closedir(dir);
- return TRUE;
-}
-static void read_font_dir( const WCHAR *dirname, BOOL external_fonts )
-{
- char *unixname = wine_get_unix_file_name( dirname );
- if (unixname)
- {
- ReadFontDir( unixname, external_fonts );
- HeapFree( GetProcessHeap(), 0, unixname );
+ if (S_ISDIR( statbuf.st_mode )) ret += add_faces_from_unix_dir( path, flags );
+ else ret += AddFontToList( path, flags );
}
+
+ closedir( dir );
+ return ret;
}
#ifdef SONAME_LIBFONTCONFIG
@@ -3056,6 +3042,17 @@ static void load_mac_fonts(void)
#endif
+static int add_faces_from_dir( const WCHAR *dirname, DWORD flags )
+{
+ int ret;
+ char *unix_name = wine_get_unix_file_name( dirname );
+ if (!unix_name) return 0;
+
+ ret = add_faces_from_unix_dir( unix_name, flags );
+ HeapFree( GetProcessHeap(), 0, unix_name );
+ return ret;
+}
+
static void get_font_dir( WCHAR *path )
{
static const WCHAR slashW[] = {'\\',0};
@@ -4197,15 +4194,15 @@ static void init_font_list(void)
/* load in the fonts from %WINDOWSDIR%\\Fonts first of all */
GetWindowsDirectoryW(path, ARRAY_SIZE(path));
strcatW(path, fontsW);
- read_font_dir( path, FALSE );
+ add_faces_from_dir( path, ADDFONT_ADD_TO_CACHE );
/* load the wine fonts */
get_font_dir( path );
- read_font_dir( path, TRUE );
+ add_faces_from_dir( path, ADDFONT_ADD_TO_CACHE | ADDFONT_EXTERNAL_FONT );
/* now look under HKLM\Software\Microsoft\Windows[ NT]\CurrentVersion\Fonts
for any fonts not installed in %WINDOWSDIR%\Fonts. They will have their
- full path as the entry. Also look for any .fon fonts, since ReadFontDir
+ full path as the entry. Also look for any .fon fonts, since add_faces_from_unix_dir
will skip these. */
if(RegOpenKeyW(HKEY_LOCAL_MACHINE,
is_win9x() ? win9x_font_reg_key : winnt_font_reg_key,
@@ -4255,7 +4252,7 @@ static void init_font_list(void)
#elif defined(HAVE_CARBON_CARBON_H)
load_mac_fonts();
#elif defined(__ANDROID__)
- ReadFontDir("/system/fonts", TRUE);
+ add_faces_from_unix_dir( "/system/fonts", ADDFONT_ADD_TO_CACHE | ADDFONT_EXTERNAL_FONT );
#endif
/* then look in any directories that we've specified in the config file */
@@ -4287,11 +4284,11 @@ static void init_font_list(void)
{
strcpy( unixname, home );
strcat( unixname, ptr + 1 );
- ReadFontDir( unixname, TRUE );
+ add_faces_from_unix_dir( unixname, ADDFONT_ADD_TO_CACHE | ADDFONT_EXTERNAL_FONT );
HeapFree( GetProcessHeap(), 0, unixname );
}
else
- ReadFontDir( ptr, TRUE );
+ add_faces_from_unix_dir( ptr, ADDFONT_ADD_TO_CACHE | ADDFONT_EXTERNAL_FONT );
ptr = next;
}
HeapFree( GetProcessHeap(), 0, valueA );
--
2.28.0
More information about the wine-devel
mailing list