Commit 241fbde1 authored by Behdad Esfahbod's avatar Behdad Esfahbod

Add FcConfigReference() (#17124)

parent 03dcaaa0
......@@ -29,14 +29,28 @@
Creates an empty configuration.
@@
@RET@ FcConfig *
@FUNC@ FcConfigReference
@TYPE1@ FcConfig * @ARG1@ config
@PURPOSE@ Increment config reference count
@DESC@
Add another reference to <parameter>config</parameter>. Configs are freed only
when the reference count reaches zero.
If <parameter>config</parameter> is NULL, the current configuration is used.
In that case this function will be similar to FcConfigGetCurrent() except that
it increments the reference count before returning and the user is responsible
for destroying the configuration when not needed anymore.
@@
@RET@ void
@FUNC@ FcConfigDestroy
@TYPE1@ FcConfig * @ARG1@ config
@PURPOSE@ Destroy a configuration
@DESC@
Destroys a configuration and any data associated with it. Note that calling
this function with the return from FcConfigGetCurrent will place the library
in an indeterminate state.
Decrements the config reference count. If all references are gone, destroys
the configuration and any data associated with it.
Note that calling this function with the return from FcConfigGetCurrent will
cause a new configuration to be created for use as current configuration.
@@
@RET@ FcBool
......
......@@ -342,6 +342,9 @@ FcConfigFilename (const FcChar8 *url);
FcPublic FcConfig *
FcConfigCreate (void);
FcPublic FcConfig *
FcConfigReference (FcConfig *config);
FcPublic void
FcConfigDestroy (FcConfig *config);
......
......@@ -92,6 +92,8 @@ FcConfigCreate (void)
config->rescanTime = time(0);
config->rescanInterval = 30;
config->ref = 1;
return config;
......@@ -191,11 +193,29 @@ FcSubstDestroy (FcSubst *s)
}
}
FcConfig *
FcConfigReference (FcConfig *config)
{
if (!config)
{
config = FcConfigGetCurrent ();
if (!config)
return 0;
}
config->ref++;
return config;
}
void
FcConfigDestroy (FcConfig *config)
{
FcSetName set;
if (--config->ref > 0)
return;
if (config == _fcConfig)
_fcConfig = 0;
......
......@@ -483,6 +483,8 @@ struct _FcConfig {
*/
time_t rescanTime; /* last time information was scanned */
int rescanInterval; /* interval between scans */
int ref; /* reference count */
};
extern FcPrivate FcConfig *_fcConfig;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment