summaryrefslogtreecommitdiffstats
path: root/libass/ass_fontconfig.c
diff options
context:
space:
mode:
Diffstat (limited to 'libass/ass_fontconfig.c')
-rw-r--r--libass/ass_fontconfig.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/libass/ass_fontconfig.c b/libass/ass_fontconfig.c
index 4fbf824..6080359 100644
--- a/libass/ass_fontconfig.c
+++ b/libass/ass_fontconfig.c
@@ -31,7 +31,7 @@
#include "ass_fontselect.h"
#include "ass_utils.h"
-#define MAX_FULLNAME 100
+#define MAX_NAME 100
static int check_glyph(void *priv, uint32_t code)
{
@@ -73,7 +73,8 @@ static void scan_fonts(FcConfig *config, ASS_FontProvider *provider)
FcBool outline;
int index, weight;
char *path;
- char *fullnames[MAX_FULLNAME];
+ char *fullnames[MAX_NAME];
+ char *families[MAX_NAME];
// skip non-outline fonts
FcResult result = FcPatternGetBool(pat, FC_OUTLINE, 0, &outline);
@@ -98,22 +99,24 @@ static void scan_fonts(FcConfig *config, ASS_FontProvider *provider)
else
meta.weight = FONT_WEIGHT_BOLD;
- // family name
- result = FcPatternGetString(pat, FC_FAMILY, 0,
- (FcChar8 **)&meta.family);
- if (result != FcResultMatch)
- continue;
-
// path
result = FcPatternGetString(pat, FC_FILE, 0, (FcChar8 **)&path);
if (result != FcResultMatch)
continue;
// read and strdup fullnames
+ meta.n_family = 0;
+ while (FcPatternGetString(pat, FC_FAMILY, meta.n_family,
+ (FcChar8 **)&families[meta.n_family]) == FcResultMatch
+ && meta.n_family < MAX_NAME)
+ meta.n_family++;
+ meta.families = families;
+
+ // read and strdup fullnames
meta.n_fullname = 0;
while (FcPatternGetString(pat, FC_FULLNAME, meta.n_fullname,
(FcChar8 **)&fullnames[meta.n_fullname]) == FcResultMatch
- && meta.n_fullname < MAX_FULLNAME)
+ && meta.n_fullname < MAX_NAME)
meta.n_fullname++;
meta.fullnames = fullnames;