本文整理汇总了C++中dir_list_free函数的典型用法代码示例。如果您正苦于以下问题:C++ dir_list_free函数的具体用法?C++ dir_list_free怎么用?C++ dir_list_free使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了dir_list_free函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: deinit_shader_dir
static void deinit_shader_dir(void)
{
// It handles NULL, no worries :D
dir_list_free(g_extern.shader_dir.list);
g_extern.shader_dir.list = NULL;
g_extern.shader_dir.ptr = 0;
}
示例2: find_first_libretro
static bool find_first_libretro(char *path, size_t size,
const char *dir, const char *rom_path)
{
bool ret = false;
const char *ext = path_get_extension(rom_path);
if (!ext || !*ext)
{
RARCH_ERR("Path has no extension. Cannot infer libretro implementation.\n");
return false;
}
RARCH_LOG("Searching for valid libretro implementation in: \"%s\".\n", dir);
struct string_list *list = dir_list_new(dir, DYNAMIC_EXT, false);
if (!list)
{
RARCH_ERR("Couldn't open directory: \"%s\".\n", dir);
return false;
}
for (size_t i = 0; i < list->size && !ret; i++)
{
RARCH_LOG("Checking library: \"%s\".\n", list->elems[i].data);
dylib_t lib = dylib_load(list->elems[i].data);
if (!lib)
continue;
void (*proc)(struct retro_system_info*) =
(void (*)(struct retro_system_info*))dylib_proc(lib, "retro_get_system_info");
if (!proc)
{
dylib_close(lib);
continue;
}
struct retro_system_info info = {0};
proc(&info);
if (!info.valid_extensions)
{
dylib_close(lib);
continue;
}
struct string_list *supported_ext = string_split(info.valid_extensions, "|");
if (string_list_find_elem(supported_ext, ext))
{
strlcpy(path, list->elems[i].data, size);
ret = true;
}
string_list_free(supported_ext);
dylib_close(lib);
}
dir_list_free(list);
return ret;
}
示例3: __free
/*!
*****************************************************************************
*
****************************************************************************/
static void __free(void *data)
{
struct dircache_entry *e = data;
if (e)
dir_list_free(&e->dir_entry_list);
free(e);
}
示例4: core_info_get_name
void core_info_get_name(const char *path, char *s, size_t len)
{
size_t i;
settings_t *settings = config_get_ptr();
struct string_list *contents = dir_list_new_special(
settings->paths.directory_libretro,
DIR_LIST_CORES, NULL);
const char *path_basedir = !string_is_empty(settings->paths.path_libretro_info) ?
settings->paths.path_libretro_info : settings->paths.directory_libretro;
if (!contents)
return;
for (i = 0; i < contents->size; i++)
{
size_t path_size = PATH_MAX_LENGTH * sizeof(char);
char *info_path = NULL;
config_file_t *conf = NULL;
char *new_core_name = NULL;
const char *current_path = contents->elems[i].data;
if (!string_is_equal(current_path, path))
continue;
info_path = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
info_path[0] = '\0';
if (!core_info_list_iterate(info_path,
path_size, path_basedir, contents, i)
&& path_is_valid(info_path))
{
free(info_path);
continue;
}
conf = config_file_new(info_path);
if (!conf)
{
free(info_path);
continue;
}
if (config_get_string(conf, "corename",
&new_core_name))
{
strlcpy(s, new_core_name, len);
free(new_core_name);
}
config_file_free(conf);
free(info_path);
break;
}
if (contents)
dir_list_free(contents);
contents = NULL;
}
示例5: shader_dir_free
static void shader_dir_free(rarch_dir_list_t *dir_list)
{
if (!dir_list)
return;
dir_list_free(dir_list->list);
dir_list->list = NULL;
dir_list->ptr = 0;
}
示例6: filebrowser_free
static void filebrowser_free(void *data)
{
filebrowser_t *filebrowser = (filebrowser_t*)data;
dir_list_free(filebrowser->list);
filebrowser->list = NULL;
filebrowser->current_dir.ptr = 0;
free(filebrowser);
}
示例7: core_info_get_name
void core_info_get_name(const char *path, char *s, size_t len)
{
size_t i;
core_info_t *core_info = NULL;
core_info_list_t *core_info_list = NULL;
struct string_list *contents = NULL;
settings_t *settings = config_get_ptr();
if (!settings)
return;
contents = dir_list_new_special(
settings->directory.libretro,
DIR_LIST_CORES, NULL);
if (!contents)
return;
core_info_list = (core_info_list_t*)calloc(1, sizeof(*core_info_list));
if (!core_info_list)
goto error;
core_info = (core_info_t*)calloc(contents->size, sizeof(*core_info));
if (!core_info)
goto error;
core_info_list->list = core_info;
core_info_list->count = contents->size;
for (i = 0; i < contents->size; i++)
{
config_file_t *conf = NULL;
if (!string_is_equal(contents->elems[i].data, path))
continue;
conf = core_info_list_iterate(contents, i);
if (conf)
{
config_get_string(conf, "corename",
&core_info[i].core_name);
core_info[i].config_data = (void*)conf;
}
core_info[i].path = strdup(contents->elems[i].data);
strlcpy(s, core_info[i].core_name, len);
}
error:
if (contents)
dir_list_free(contents);
contents = NULL;
core_info_list_free(core_info_list);
}
示例8: zarch_zui_render_lay_root_load_set_new_path
static void zarch_zui_render_lay_root_load_set_new_path(zui_t *zui, const char *newpath)
{
if (!zui)
return;
free(zui->load_cwd);
zui->load_cwd = strdup(newpath);
dir_list_free(zui->load_dlist);
zui->load_dlist = NULL;
}
示例9: find_and_set_first_file
static void find_and_set_first_file(void)
{
//Last fallback - we'll need to start the first executable file
// we can find in the RetroArch cores directory
#if defined(_XBOX)
char ** dir_list = dir_list_new("game:\\", ".xex");
#elif defined(__CELLOS_LV2__)
char ** dir_list = dir_list_new(LIBRETRO_DIR_PATH, ".SELF");
#endif
if (!dir_list)
{
RARCH_ERR("Failed last fallback - RetroArch Salamander will exit.\n");
return;
}
char * first_executable = dir_list[0];
if(first_executable)
{
#ifdef _XBOX
//Check if it's RetroArch Salamander itself - if so, first_executable needs to
//be overridden
char fname_tmp[MAX_PATH_LENGTH];
fill_pathname_base(fname_tmp, first_executable, sizeof(fname_tmp));
if(strcmp(fname_tmp, "RetroArch-Salamander.xex") == 0)
{
RARCH_WARN("First entry is RetroArch Salamander itself, increment entry by one and check if it exists.\n");
first_executable = dir_list[1];
fill_pathname_base(fname_tmp, first_executable, sizeof(fname_tmp));
if(!first_executable)
{
RARCH_WARN("There is no second entry - no choice but to boot RetroArch Salamander\n");
first_executable = dir_list[0];
fill_pathname_base(fname_tmp, first_executable, sizeof(fname_tmp));
}
}
snprintf(first_executable, sizeof(first_executable), "game:\\%s", fname_tmp);
#endif
RARCH_LOG("Start first entry in libretro cores dir: [%s].\n", first_executable);
strlcpy(libretro_path, first_executable, sizeof(libretro_path));
}
else
{
RARCH_ERR("Failed last fallback - RetroArch Salamander will exit.\n");
}
dir_list_free(dir_list);
}
示例10: find_first_libretro_core
/*We need to set libretro to the first entry in the cores
* directory so that it will be saved to the config file
*/
static void find_first_libretro_core(char *first_file,
size_t size_of_first_file, const char *dir,
const char * ext)
{
size_t i;
bool ret = false;
struct string_list *list = dir_list_new(dir, ext, false, true, false, false);
if (!list)
{
RARCH_ERR("Couldn't read directory."
" Cannot infer default libretro core.\n");
return;
}
RARCH_LOG("Searching for valid libretro implementation in: \"%s\".\n",
dir);
for (i = 0; i < list->size && !ret; i++)
{
char fname[PATH_MAX_LENGTH];
char salamander_name[PATH_MAX_LENGTH];
const char *libretro_elem = (const char*)list->elems[i].data;
RARCH_LOG("Checking library: \"%s\".\n", libretro_elem);
if (!libretro_elem)
continue;
fill_pathname_base(fname, libretro_elem, sizeof(fname));
if (!frontend_driver_get_salamander_basename(
salamander_name, sizeof(salamander_name)))
break;
if (!strncmp(fname, salamander_name, sizeof(fname)))
{
if (list->size == (i + 1))
{
RARCH_WARN("Entry is RetroArch Salamander itself, "
"but is last entry. No choice but to set it.\n");
strlcpy(first_file, fname, size_of_first_file);
}
continue;
}
strlcpy(first_file, fname, size_of_first_file);
RARCH_LOG("First found libretro core is: \"%s\".\n", first_file);
ret = true;
}
dir_list_free(list);
}
示例11: event_set_savestate_auto_index
static void event_set_savestate_auto_index(void)
{
size_t i;
char state_dir[PATH_MAX_LENGTH] = {0};
char state_base[PATH_MAX_LENGTH] = {0};
struct string_list *dir_list = NULL;
unsigned max_idx = 0;
settings_t *settings = config_get_ptr();
global_t *global = global_get_ptr();
if (!settings->savestate_auto_index)
return;
/* Find the file in the same directory as global->savestate_name
* with the largest numeral suffix.
*
* E.g. /foo/path/content.state, will try to find
* /foo/path/content.state%d, where %d is the largest number available.
*/
fill_pathname_basedir(state_dir, global->savestate_name,
sizeof(state_dir));
fill_pathname_base(state_base, global->savestate_name,
sizeof(state_base));
if (!(dir_list = dir_list_new_special(state_dir, DIR_LIST_PLAIN)))
return;
for (i = 0; i < dir_list->size; i++)
{
unsigned idx;
char elem_base[PATH_MAX_LENGTH] = {0};
const char *end = NULL;
const char *dir_elem = dir_list->elems[i].data;
fill_pathname_base(elem_base, dir_elem, sizeof(elem_base));
if (strstr(elem_base, state_base) != elem_base)
continue;
end = dir_elem + strlen(dir_elem);
while ((end > dir_elem) && isdigit(end[-1]))
end--;
idx = strtoul(end, NULL, 0);
if (idx > max_idx)
max_idx = idx;
}
dir_list_free(dir_list);
settings->state_slot = max_idx;
RARCH_LOG("Found last state slot: #%d\n", settings->state_slot);
}
示例12: dir_free_shader
bool dir_free_shader(void)
{
struct rarch_dir_list *dir_list =
(struct rarch_dir_list*)&dir_shader_list;
dir_list_free(dir_list->list);
dir_list->list = NULL;
dir_list->ptr = 0;
return true;
}
示例13: rarch_manage_libretro_set_first_file
void rarch_manage_libretro_set_first_file(char *first_file, size_t size_of_first_file, const char *libretro_path, const char * exe_ext)
{
//We need to set libretro to the first entry in the cores
//directory so that it will be saved to the config file
struct string_list *dir_list = dir_list_new(libretro_path, exe_ext, false);
const char * first_exe;
if (!dir_list)
{
RARCH_ERR("Couldn't read directory.\n");
RARCH_ERR("Failed to set first entry to libretro path.\n");
goto end;
}
first_exe = dir_list->elems[0].data;
if(first_exe)
{
#ifdef _XBOX
char fname_tmp[PATH_MAX];
fill_pathname_base(fname_tmp, first_exe, sizeof(fname_tmp));
if(strcmp(fname_tmp, "RetroArch-Salamander.xex") == 0)
{
RARCH_WARN("First entry is RetroArch Salamander itself, increment entry by one and check if it exists.\n");
first_exe = dir_list->elems[1].data;
fill_pathname_base(fname_tmp, first_exe, sizeof(fname_tmp));
if(!first_exe)
{
RARCH_ERR("Unlikely error happened - no second entry - no choice but to set it to RetroArch Salamander\n");
first_exe = dir_list->elems[0].data;
fill_pathname_base(fname_tmp, first_exe, sizeof(fname_tmp));
}
}
strlcpy(first_file, fname_tmp, size_of_first_file);
#else
strlcpy(first_file, first_exe, size_of_first_file);
#endif
RARCH_LOG("Set first entry in libretro core dir to libretro path: [%s].\n", first_file);
}
end:
dir_list_free(dir_list);
}
示例14: find_first_libretro_core
//We need to set libretro to the first entry in the cores
//directory so that it will be saved to the config file
static void find_first_libretro_core(char *first_file,
size_t size_of_first_file, const char *dir,
const char * ext)
{
struct string_list *list;
size_t i;
bool ret = false;
RARCH_LOG("Searching for valid libretro implementation in: \"%s\".\n", dir);
list = (struct string_list*)dir_list_new(dir, ext, false);
if (!list)
{
RARCH_ERR("Couldn't read directory. Cannot infer default libretro core.\n");
return;
}
for (i = 0; i < list->size && !ret; i++)
{
char fname[PATH_MAX];
const char *libretro_elem = (const char*)list->elems[i].data;
RARCH_LOG("Checking library: \"%s\".\n", libretro_elem);
if (!libretro_elem)
continue;
fill_pathname_base(fname, libretro_elem, sizeof(fname));
if (strncmp(fname, SALAMANDER_FILE, sizeof(fname)) == 0)
{
if ((i + 1) == list->size)
{
RARCH_WARN("Entry is RetroArch Salamander itself, but is last entry. No choice but to set it.\n");
strlcpy(first_file, fname, size_of_first_file);
}
continue;
}
strlcpy(first_file, fname, size_of_first_file);
RARCH_LOG("First found libretro core is: \"%s\".\n", first_file);
ret = true;
}
dir_list_free(list);
}
示例15: core_info_get_name
void core_info_get_name(const char *path, char *s, size_t len)
{
size_t i;
settings_t *settings = config_get_ptr();
struct string_list *contents = dir_list_new_special(
settings->paths.directory_libretro,
DIR_LIST_CORES, NULL);
if (!contents)
return;
for (i = 0; i < contents->size; i++)
{
char info_path[PATH_MAX_LENGTH];
config_file_t *conf = NULL;
char *new_core_name = NULL;
info_path[0] = '\0';
if (!string_is_equal(contents->elems[i].data, path))
continue;
if (!core_info_list_iterate(info_path,
sizeof(info_path), contents, i)
&& path_is_valid(info_path))
continue;
conf = config_file_new(info_path);
if (!conf)
continue;
if (config_get_string(conf, "corename",
&new_core_name))
{
strlcpy(s, new_core_name, len);
free(new_core_name);
}
config_file_free(conf);
break;
}
if (contents)
dir_list_free(contents);
contents = NULL;
}