void LoadCoreWindow::onLoadCustomCoreClicked() { QString path; QByteArray pathArray; settings_t *settings = config_get_ptr(); char core_ext[255] = {0}; char filters[PATH_MAX_LENGTH] = {0}; const char *pathData = NULL; frontend_driver_get_core_extension(core_ext, sizeof(core_ext)); strlcpy(filters, "Cores (*.", sizeof(filters)); strlcat(filters, core_ext, sizeof(filters)); strlcat(filters, ");;All Files (*.*)", sizeof(filters)); path = QFileDialog::getOpenFileName(this, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_LOAD_CORE), settings->paths.directory_libretro, filters, NULL); if (path.isEmpty()) return; pathArray.append(path); pathData = pathArray.constData(); loadCore(pathData); }
static void salamander_init(char *s, size_t len) { /* normal executable loading path */ bool config_file_exists = false; if (path_file_exists(g_defaults.path.config)) config_file_exists = true; if (config_file_exists) { char tmp_str[PATH_MAX_LENGTH]; config_file_t * conf = (config_file_t*)config_file_new(g_defaults.path.config); if (conf) { config_get_array(conf, "libretro_path", tmp_str, sizeof(tmp_str)); config_file_free(conf); if (strcmp(tmp_str, "builtin") != 0) strlcpy(s, tmp_str, len); } #ifdef GEKKO /* stupid libfat bug or something; sometimes it says * the file is there when it doesn't. */ else { config_file_exists = false; } #endif } if (!config_file_exists || !strcmp(s, "")) { char executable_name[PATH_MAX_LENGTH]; frontend_driver_get_core_extension( executable_name, sizeof(executable_name)); find_and_set_first_file(s, len, executable_name); } else RARCH_LOG("Start [%s] found in retroarch.cfg.\n", s); if (!config_file_exists) { config_file_t *conf = (config_file_t*)config_file_new(NULL); if (conf) { config_set_string(conf, "libretro_path", s); config_file_write(conf, g_defaults.path.config); config_file_free(conf); } } }
rarch_softfilter_t *rarch_softfilter_new(const char *filter_config, unsigned threads, enum retro_pixel_format in_pixel_format, unsigned max_width, unsigned max_height) { softfilter_simd_mask_t cpu_features = retro_get_cpu_features(); char basedir[PATH_MAX_LENGTH]; #ifdef HAVE_DYLIB char ext_name[PATH_MAX_LENGTH]; #endif struct string_list *plugs = NULL; rarch_softfilter_t *filt = NULL; (void)basedir; filt = (rarch_softfilter_t*)calloc(1, sizeof(*filt)); if (!filt) return NULL; filt->conf = config_file_new(filter_config); if (!filt->conf) { RARCH_ERR("[SoftFilter]: Did not find config: %s\n", filter_config); goto error; } #if defined(HAVE_DYLIB) fill_pathname_basedir(basedir, filter_config, sizeof(basedir)); if (!frontend_driver_get_core_extension(ext_name, sizeof(ext_name))) goto error; plugs = dir_list_new(basedir, ext_name, false, false); if (!plugs) { RARCH_ERR("[SoftFilter]: Could not build up string list...\n"); goto error; } #endif if (!append_softfilter_plugs(filt, plugs)) { RARCH_ERR("[SoftFitler]: Failed to append softfilter plugins...\n"); goto error; } if (plugs) string_list_free(plugs); plugs = NULL; if (!create_softfilter_graph(filt, in_pixel_format, max_width, max_height, cpu_features, threads)) { RARCH_ERR("[SoftFitler]: Failed to create softfilter graph...\n"); goto error; } return filt; error: if (plugs) string_list_free(plugs); plugs = NULL; rarch_softfilter_free(filt); return NULL; }
struct string_list *dir_list_new_special(const char *input_dir, enum dir_list_type type, const char *filter) { char ext_shaders[PATH_MAX_LENGTH]; char ext_name[PATH_MAX_LENGTH]; const char *dir = NULL; const char *exts = NULL; bool include_dirs = false; settings_t *settings = config_get_ptr(); (void)input_dir; (void)settings; ext_shaders[0] = '\0'; switch (type) { case DIR_LIST_AUTOCONFIG: dir = input_dir; exts = filter; break; case DIR_LIST_CORES: dir = settings->directory.libretro; if (!frontend_driver_get_core_extension(ext_name, sizeof(ext_name))) return NULL; exts = ext_name; break; case DIR_LIST_CORE_INFO: { core_info_list_t *list = NULL; core_info_get_list(&list); dir = input_dir; exts = list->all_ext; } break; case DIR_LIST_SHADERS: dir = settings->directory.video_shader; #ifdef HAVE_CG strlcat(ext_shaders, "cg|cgp", sizeof(ext_shaders)); #endif #ifdef HAVE_GLSL strlcat(ext_shaders, "glsl|glslp", sizeof(ext_shaders)); #endif #ifdef HAVE_VULKAN strlcat(ext_shaders, "slang|slangp", sizeof(ext_shaders)); #endif exts = ext_shaders; break; case DIR_LIST_COLLECTIONS: dir = settings->directory.playlist; exts = "lpl"; break; case DIR_LIST_DATABASES: dir = settings->path.content_database; exts = "rdb"; break; case DIR_LIST_PLAIN: dir = input_dir; exts = filter; break; case DIR_LIST_NONE: default: return NULL; } return dir_list_new(dir, exts, include_dirs, type == DIR_LIST_CORE_INFO); }
struct string_list *dir_list_new_special(const char *input_dir, enum dir_list_type type, const char *filter) { char ext_shaders[PATH_MAX_LENGTH] = {0}; char ext_name[PATH_MAX_LENGTH] = {0}; const char *dir = NULL; const char *exts = NULL; bool include_dirs = false; (void)input_dir; switch (type) { case DIR_LIST_AUTOCONFIG: dir = input_dir; exts = filter; break; case DIR_LIST_CORES: dir = input_dir; if (!frontend_driver_get_core_extension(ext_name, sizeof(ext_name))) return NULL; exts = ext_name; break; case DIR_LIST_CORE_INFO: { core_info_list_t *list = NULL; core_info_get_list(&list); dir = input_dir; exts = list->all_ext; } break; case DIR_LIST_SHADERS: { union string_list_elem_attr attr = {0}; struct string_list *str_list = string_list_new(); if (!str_list) return NULL; dir = input_dir; #ifdef HAVE_CG string_list_append(str_list, "cg", attr); string_list_append(str_list, "cgp", attr); #endif #ifdef HAVE_GLSL string_list_append(str_list, "glsl", attr); string_list_append(str_list, "glslp", attr); #endif #ifdef HAVE_VULKAN string_list_append(str_list, "slang", attr); string_list_append(str_list, "slangp", attr); #endif string_list_join_concat(ext_shaders, sizeof(ext_shaders), str_list, "|"); string_list_free(str_list); exts = ext_shaders; } break; case DIR_LIST_COLLECTIONS: dir = input_dir; exts = "lpl"; break; case DIR_LIST_DATABASES: dir = input_dir; exts = "rdb"; break; case DIR_LIST_PLAIN: dir = input_dir; exts = filter; break; case DIR_LIST_NONE: default: return NULL; } return dir_list_new(dir, exts, include_dirs, type == DIR_LIST_CORE_INFO); }