/* Load all preferences given by the user in PreferredDecoders. */ static void load_preferences () { int ix; const char *preference; lists_t_strs *list; list = options_get_list ("PreferredDecoders"); for (ix = 0; ix < lists_strs_size (list); ix += 1) { preference = lists_strs_at (list, ix); load_each_preference (preference); } #ifdef DEBUG { char *names; decoder_t_preference *pref; for (pref = preferences; pref; pref = pref->next) { names = list_decoder_names (pref->decoder_list, pref->decoders); debug ("%s:%s", pref->source, names); free (names); } } #endif }
static void process_deferred_overrides (lists_t_strs *deferred) { int ix; bool cleared; const char marker[] = "*Marker*"; char **config_decoders; lists_t_strs *decoders_option; /* We need to shuffle the PreferredDecoders list into the * right order as we load any deferred overriding options. */ decoders_option = options_get_list ("PreferredDecoders"); lists_strs_reverse (decoders_option); config_decoders = lists_strs_save (decoders_option); lists_strs_clear (decoders_option); lists_strs_append (decoders_option, marker); for (ix = 0; ix < lists_strs_size (deferred); ix += 1) override_config_option (lists_strs_at (deferred, ix), NULL); cleared = lists_strs_empty (decoders_option) || strcmp (lists_strs_at (decoders_option, 0), marker) != 0; lists_strs_reverse (decoders_option); if (!cleared) { char **override_decoders; free (lists_strs_pop (decoders_option)); override_decoders = lists_strs_save (decoders_option); lists_strs_clear (decoders_option); lists_strs_load (decoders_option, config_decoders); lists_strs_load (decoders_option, override_decoders); free (override_decoders); } free (config_decoders); }