mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-03 01:53:35 +00:00
libobs: Add obs_add_safe_module()
This commit is contained in:
parent
64be5a7f9a
commit
d90bfc5e0b
|
@ -271,6 +271,15 @@ plugin modules.
|
|||
|
||||
---------------------
|
||||
|
||||
.. function:: void *obs_add_safe_module(const char *name)
|
||||
|
||||
Adds a *name* to the list of modules allowed to load in Safe Mode.
|
||||
If the list is empty, all modules are allowed.
|
||||
|
||||
:param name: The name of the module (filename sans extension).
|
||||
|
||||
---------------------
|
||||
|
||||
.. function:: void obs_module_failure_info_free(struct obs_module_failure_info *mfi)
|
||||
|
||||
Frees data allocated data used in the *mfi* parameter (calls
|
||||
|
|
|
@ -466,6 +466,7 @@ typedef DARRAY(struct obs_source_info) obs_source_info_array_t;
|
|||
struct obs_core {
|
||||
struct obs_module *first_module;
|
||||
DARRAY(struct obs_module_path) module_paths;
|
||||
DARRAY(char *) safe_modules;
|
||||
|
||||
obs_source_info_array_t source_types;
|
||||
obs_source_info_array_t input_types;
|
||||
|
|
|
@ -274,6 +274,15 @@ void obs_add_module_path(const char *bin, const char *data)
|
|||
da_push_back(obs->module_paths, &omp);
|
||||
}
|
||||
|
||||
void obs_add_safe_module(const char *name)
|
||||
{
|
||||
if (!obs || !name)
|
||||
return;
|
||||
|
||||
char *item = bstrdup(name);
|
||||
da_push_back(obs->safe_modules, &item);
|
||||
}
|
||||
|
||||
extern void get_plugin_info(const char *path, bool *is_obs_plugin,
|
||||
bool *can_load);
|
||||
|
||||
|
@ -282,6 +291,19 @@ struct fail_info {
|
|||
size_t fail_count;
|
||||
};
|
||||
|
||||
static bool is_safe_module(const char *name)
|
||||
{
|
||||
if (!obs->safe_modules.num)
|
||||
return true;
|
||||
|
||||
for (size_t i = 0; i < obs->safe_modules.num; i++) {
|
||||
if (strcmp(name, obs->safe_modules.array[i]) == 0)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void load_all_callback(void *param, const struct obs_module_info2 *info)
|
||||
{
|
||||
struct fail_info *fail_info = param;
|
||||
|
@ -298,6 +320,12 @@ static void load_all_callback(void *param, const struct obs_module_info2 *info)
|
|||
return;
|
||||
}
|
||||
|
||||
if (!is_safe_module(info->name)) {
|
||||
blog(LOG_WARNING, "Skipping module '%s', not on safe list",
|
||||
info->name);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!can_load_obs_plugin) {
|
||||
blog(LOG_WARNING,
|
||||
"Skipping module '%s' due to possible "
|
||||
|
|
|
@ -1441,6 +1441,10 @@ void obs_shutdown(void)
|
|||
free_module_path(obs->module_paths.array + i);
|
||||
da_free(obs->module_paths);
|
||||
|
||||
for (size_t i = 0; i < obs->safe_modules.num; i++)
|
||||
bfree(obs->safe_modules.array[i]);
|
||||
da_free(obs->safe_modules);
|
||||
|
||||
if (obs->name_store_owned)
|
||||
profiler_name_store_free(obs->name_store);
|
||||
|
||||
|
|
|
@ -517,6 +517,14 @@ EXPORT const char *obs_get_module_data_path(obs_module_t *module);
|
|||
*/
|
||||
EXPORT void obs_add_module_path(const char *bin, const char *data);
|
||||
|
||||
/**
|
||||
* Adds a module to the list of modules allowed to load in Safe Mode.
|
||||
* If the list is empty, all modules are allowed.
|
||||
*
|
||||
* @param name Specifies the module's name (filename sans extension).
|
||||
*/
|
||||
EXPORT void obs_add_safe_module(const char *name);
|
||||
|
||||
/** Automatically loads all modules from module paths (convenience function) */
|
||||
EXPORT void obs_load_all_modules(void);
|
||||
|
||||
|
|
Loading…
Reference in a new issue