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@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 );