@@ -57,23 +57,31 @@ typedef enum FFInitState
5757
5858typedef struct GVariantGetters
5959{
60- FF_LIBRARY_SYMBOL (g_variant_get_string )
60+ FF_LIBRARY_SYMBOL (g_variant_dup_string )
6161 FF_LIBRARY_SYMBOL (g_variant_get_boolean )
6262 FF_LIBRARY_SYMBOL (g_variant_get_int32 )
63+ FF_LIBRARY_SYMBOL (g_variant_unref )
6364} GVariantGetters ;
6465
6566static FFvariant getGVariantValue (GVariant * variant , FFvarianttype type , const GVariantGetters * variantGetters )
6667{
68+ FFvariant result ;
69+
6770 if (variant == NULL )
68- return FF_VARIANT_NULL ;
71+ result = FF_VARIANT_NULL ;
6972 else if (type == FF_VARIANT_TYPE_STRING )
70- return (FFvariant ) {.strValue = variantGetters -> ffg_variant_get_string (variant , NULL )};
73+ result = (FFvariant ) {.strValue = variantGetters -> ffg_variant_dup_string (variant , NULL )}; // Dup string, so that variant itself can be freed
7174 else if (type == FF_VARIANT_TYPE_BOOL )
72- return (FFvariant ) {.boolValue = (bool ) variantGetters -> ffg_variant_get_boolean (variant ), .boolValueSet = true};
75+ result = (FFvariant ) {.boolValue = (bool ) variantGetters -> ffg_variant_get_boolean (variant ), .boolValueSet = true};
7376 else if (type == FF_VARIANT_TYPE_INT )
74- return (FFvariant ) {.intValue = variantGetters -> ffg_variant_get_int32 (variant )};
77+ result = (FFvariant ) {.intValue = variantGetters -> ffg_variant_get_int32 (variant )};
7578 else
76- return FF_VARIANT_NULL ;
79+ result = FF_VARIANT_NULL ;
80+
81+ if (variant )
82+ variantGetters -> ffg_variant_unref (variant );
83+
84+ return result ;
7785}
7886
7987typedef struct GSettingsData
@@ -102,9 +110,10 @@ static const GSettingsData* getGSettingsData(const FFinstance* instance)
102110 FF_LIBRARY_DATA_LOAD_SYMBOL (g_settings_schema_source_get_default )
103111
104112 #define data data .variantGetters
105- FF_LIBRARY_DATA_LOAD_SYMBOL (g_variant_get_string )
113+ FF_LIBRARY_DATA_LOAD_SYMBOL (g_variant_dup_string )
106114 FF_LIBRARY_DATA_LOAD_SYMBOL (g_variant_get_boolean )
107115 FF_LIBRARY_DATA_LOAD_SYMBOL (g_variant_get_int32 )
116+ FF_LIBRARY_DATA_LOAD_SYMBOL (g_variant_unref );
108117 #undef data
109118
110119 data .schemaSource = data .ffg_settings_schema_source_get_default ();
@@ -169,7 +178,7 @@ static const DConfData* getDConfData(const FFinstance* instance)
169178 FF_LIBRARY_DATA_LOAD_SYMBOL (dconf_client_new )
170179
171180 #define data data.variantGetters
172- FF_LIBRARY_DATA_LOAD_SYMBOL (g_variant_get_string )
181+ FF_LIBRARY_DATA_LOAD_SYMBOL (g_variant_dup_string )
173182 FF_LIBRARY_DATA_LOAD_SYMBOL (g_variant_get_boolean )
174183 FF_LIBRARY_DATA_LOAD_SYMBOL (g_variant_get_int32 )
175184 #undef data
0 commit comments