summaryrefslogtreecommitdiffstats
path: root/libass/ass_fontselect.c
diff options
context:
space:
mode:
authorDr.Smile <vabnick@gmail.com>2021-11-11 05:42:40 +0300
committerDr.Smile <vabnick@gmail.com>2022-03-31 17:00:21 +0300
commitf664ced049394e2a5d4300ba526e206df73ec729 (patch)
tree7c527c1e81c570289819f913c85b03e6fc32734f /libass/ass_fontselect.c
parent42f1fa1b2e5128f8dbb99b7da5f2665b78de0046 (diff)
downloadlibass-f664ced049394e2a5d4300ba526e206df73ec729.tar.bz2
libass-f664ced049394e2a5d4300ba526e206df73ec729.tar.xz
Add partial unicode support for Windows
Diffstat (limited to 'libass/ass_fontselect.c')
-rw-r--r--libass/ass_fontselect.c40
1 files changed, 14 insertions, 26 deletions
diff --git a/libass/ass_fontselect.c b/libass/ass_fontselect.c
index 02b8d9c..c229189 100644
--- a/libass/ass_fontselect.c
+++ b/libass/ass_fontselect.c
@@ -31,7 +31,6 @@
#include <limits.h>
#include <ft2build.h>
#include <sys/types.h>
-#include <dirent.h>
#include FT_FREETYPE_H
#include FT_SFNT_NAMES_H
#include FT_TRUETYPE_IDS_H
@@ -40,6 +39,7 @@
#include "ass_utils.h"
#include "ass.h"
#include "ass_library.h"
+#include "ass_filesystem.h"
#include "ass_fontselect.h"
#include "ass_fontconfig.h"
#include "ass_coretext.h"
@@ -168,39 +168,27 @@ static ASS_FontProviderFuncs ft_funcs = {
static void load_fonts_from_dir(ASS_Library *library, const char *dir)
{
- DIR *d = opendir(dir);
- if (!d)
+ ASS_Dir d;
+ if (!ass_open_dir(&d, dir))
return;
- size_t dirlen = strlen(dir);
- size_t namemax = 0;
- char *namebuf = NULL;
- while (1) {
- struct dirent *entry = readdir(d);
- if (!entry)
+ while (true) {
+ const char *name = ass_read_dir(&d);
+ if (!name)
break;
- if (entry->d_name[0] == '.')
+ if (name[0] == '.')
continue;
- size_t namelen = dirlen + strlen(entry->d_name) + 2u;
- if (namelen < 2 || namelen - 2 < dirlen)
+ const char *path = ass_current_file_path(&d);
+ if (!path)
continue;
- if (namelen > namemax) {
- size_t newlen = FFMAX(2048, namelen + FFMIN(256, SIZE_MAX - namelen));
- if (ASS_REALLOC_ARRAY(namebuf, newlen))
- namemax = newlen;
- else
- continue;
- }
- snprintf(namebuf, namemax, "%s/%s", dir, entry->d_name);
- size_t bufsize = 0;
- ass_msg(library, MSGL_INFO, "Loading font file '%s'", namebuf);
- void *data = read_file(library, namebuf, &bufsize);
+ ass_msg(library, MSGL_INFO, "Loading font file '%s'", path);
+ size_t size = 0;
+ void *data = read_file(library, path, FN_DIR_LIST, &size);
if (data) {
- ass_add_font(library, entry->d_name, data, bufsize);
+ ass_add_font(library, name, data, size);
free(data);
}
}
- free(namebuf);
- closedir(d);
+ ass_close_dir(&d);
}
/**