Avoid duplicated LV2_State_{Map,Free}_Path features to

eg. lilv_state_new_from_instance(), when and if already
provided by the caller/host (eg. qtractor).

Resolves promised qtractor method to bundle all SFZ <region>
files to an archive/zip (*.qtz) session file, an old feature
applicable to LV2 plugins.

See also: https://github.com/rncbc/qtractor/issues/427
This commit is contained in:
rncbc 2024-01-16 19:45:01 +00:00 committed by Paul Ferrand
parent 2a45d4b9ec
commit 35bc2ab618

View file

@ -1482,15 +1482,18 @@ restore(LV2_Handle instance,
sfizz_plugin_t *self = (sfizz_plugin_t *)instance;
LV2_State_Map_Path *map_path = NULL;
LV2_State_Free_Path *free_path = &sfizz_State_Free_Path;
LV2_State_Free_Path *free_path = NULL;
for (const LV2_Feature *const *f = features; *f; ++f)
{
if (!strcmp((*f)->URI, LV2_STATE__mapPath))
if (!map_path && !strcmp((*f)->URI, LV2_STATE__mapPath))
map_path = (LV2_State_Map_Path *)(**f).data;
else if (!strcmp((*f)->URI, LV2_STATE__freePath))
else if (!free_path && !strcmp((*f)->URI, LV2_STATE__freePath))
free_path = (LV2_State_Free_Path *)(**f).data;
}
if (!free_path)
free_path = &sfizz_State_Free_Path;
// Set default values
self->last_keyswitch = -1;
sfizz_lv2_get_default_sfz_path(self, self->sfz_file_path, MAX_PATH_SIZE);
@ -1622,15 +1625,18 @@ save(LV2_Handle instance,
sfizz_plugin_t *self = (sfizz_plugin_t *)instance;
LV2_State_Map_Path *map_path = NULL;
LV2_State_Free_Path *free_path = &sfizz_State_Free_Path;
LV2_State_Free_Path *free_path = NULL;
for (const LV2_Feature *const *f = features; *f; ++f)
{
if (!strcmp((*f)->URI, LV2_STATE__mapPath))
if (!map_path && !strcmp((*f)->URI, LV2_STATE__mapPath))
map_path = (LV2_State_Map_Path *)(**f).data;
else if (!strcmp((*f)->URI, LV2_STATE__freePath))
else if (!free_path && !strcmp((*f)->URI, LV2_STATE__freePath))
free_path = (LV2_State_Free_Path *)(**f).data;
}
if (!free_path)
free_path = &sfizz_State_Free_Path;
const char *path;
// Save the file path