[font/face] Refactor some code

This commit is contained in:
Behdad Esfahbod 2025-03-10 21:41:54 -06:00
parent b1c50eb938
commit cbc205c2f0
2 changed files with 32 additions and 21 deletions

View file

@ -342,6 +342,21 @@ static struct supported_face_loaders_t {
#endif
};
static const char *get_default_loader_name ()
{
static hb_atomic_ptr_t<const char> static_loader_name;
const char *loader_name = static_loader_name.get_acquire ();
if (!loader_name)
{
loader_name = getenv ("HB_FACE_LOADER");
if (!loader_name)
loader_name = "";
if (!static_loader_name.cmpexch (nullptr, loader_name))
loader_name = static_loader_name.get_acquire ();
}
return loader_name;
}
/**
* hb_face_create_from_file_or_fail_using:
* @file_name: A font filename
@ -367,19 +382,9 @@ hb_face_create_from_file_or_fail_using (const char *file_name,
const char *loader_name)
{
bool retry = false;
if (!loader_name || !*loader_name)
{
static hb_atomic_ptr_t<const char> static_loader_name;
loader_name = static_loader_name.get_acquire ();
if (!loader_name)
{
loader_name = getenv ("HB_FACE_LOADER");
if (!loader_name)
loader_name = "";
if (!static_loader_name.cmpexch (nullptr, loader_name))
loader_name = static_loader_name.get_acquire ();
}
loader_name = get_default_loader_name ();
retry = true;
}
if (loader_name && !*loader_name) loader_name = nullptr;

View file

@ -2321,6 +2321,21 @@ static struct supported_font_funcs_t {
#endif
};
static const char *get_default_funcs_name ()
{
static hb_atomic_ptr_t<const char> static_funcs_name;
const char *name = static_funcs_name.get_acquire ();
if (!name)
{
name = getenv ("HB_FONT_FUNCS");
if (!name)
name = "";
if (!static_funcs_name.cmpexch (nullptr, name))
name = static_funcs_name.get_acquire ();
}
return name;
}
/**
* hb_font_set_funcs_using:
* @font: #hb_font_t to work upon
@ -2345,16 +2360,7 @@ hb_font_set_funcs_using (hb_font_t *font,
if (!name || !*name)
{
static hb_atomic_ptr_t<const char> static_funcs_name;
name = static_funcs_name.get_acquire ();
if (!name)
{
name = getenv ("HB_FONT_FUNCS");
if (!name)
name = "";
if (!static_funcs_name.cmpexch (nullptr, name))
name = static_funcs_name.get_acquire ();
}
name = get_default_funcs_name ();
retry = true;
}
if (name && !*name) name = nullptr;