bool assureDirectoryExists(const Common::String &dir, const char *prefix) { // Check whether the prefix exists if one is supplied. if (prefix) { if (!path_is_valid(prefix)) return false; else if (!path_is_directory(prefix)) return false; } // Obtain absolute path. Common::String path; if (prefix) { path = prefix; path += '/'; path += dir; } else { path = dir; } path = Common::normalizePath(path, '/'); const Common::String::iterator end = path.end(); Common::String::iterator cur = path.begin(); if (*cur == '/') ++cur; do { if (cur + 1 != end) { if (*cur != '/') continue; // It is kind of ugly and against the purpose of Common::String to // insert 0s inside, but this is just for a local string and // simplifies the code a lot. *cur = '\0'; } if (!mkdir_norecurse(path.c_str())) { if (errno == EEXIST) { if (!path_is_valid(path.c_str())) return false; else if (!path_is_directory(path.c_str())) return false; } else return false; } *cur = '/'; } while (cur++ != end); return true; }
void POSIXFilesystemNode::setFlags() { const char *fspath = _path.c_str(); _isValid = path_is_valid(fspath); _isDirectory = path_is_directory(fspath); }
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; }
static gboolean g_keyfile_settings_backend_get_writable (GSettingsBackend *backend, const gchar *name) { GKeyfileSettingsBackend *kfsb = G_KEYFILE_SETTINGS_BACKEND (backend); return kfsb->writable && !g_hash_table_contains (kfsb->system_locks, name) && path_is_valid (kfsb, name); }
static gboolean g_keyfile_settings_backend_check_one (gpointer key, gpointer value, gpointer user_data) { WriteManyData *data = user_data; return data->failed = g_hash_table_contains (data->kfsb->system_locks, key) || !path_is_valid (data->kfsb, key); }
/** * menu_content_load_from_playlist: * @playlist : Playlist handle. * @idx : Index in playlist. * * Initializes core and loads content based on playlist entry. **/ bool menu_content_playlist_load(menu_content_ctx_playlist_info_t *info) { playlist_t *playlist = NULL; const char *path = NULL; if (!info) return false; playlist = (playlist_t*)info->data; if (!playlist) return false; playlist_get_index(playlist, info->idx, &path, NULL, NULL, NULL, NULL, NULL); if (!string_is_empty(path)) { unsigned i; bool valid_path = false; char *path_check = NULL; char *path_tolower = strdup(path); for (i = 0; i < strlen(path_tolower); ++i) path_tolower[i] = tolower(path_tolower[i]); if (strstr(path_tolower, file_path_str(FILE_PATH_ZIP_EXTENSION))) strstr(path_tolower, file_path_str(FILE_PATH_ZIP_EXTENSION))[4] = '\0'; else if (strstr(path_tolower, file_path_str(FILE_PATH_7Z_EXTENSION))) strstr(path_tolower, file_path_str(FILE_PATH_7Z_EXTENSION))[3] = '\0'; path_check = (char *) calloc(strlen(path_tolower) + 1, sizeof(char)); strncpy(path_check, path, strlen(path_tolower)); valid_path = path_is_valid(path_check); free(path_tolower); free(path_check); if (!valid_path) goto error; } return true; error: runloop_msg_queue_push("File could not be loaded from playlist.\n", 1, 100, true); return false; }
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; }
int file_detection_context_t::perform_file_detection(bool test_all) { ASSERT_IS_BACKGROUND_THREAD(); valid_paths.clear(); int result = 1; for (path_list_t::const_iterator iter = potential_paths.begin(); iter != potential_paths.end(); ++iter) { if (path_is_valid(*iter, working_directory)) { /* Push the original (possibly relative) path */ valid_paths.push_front(*iter); } else { /* Not a valid path */ result = 0; if (! test_all) break; } } valid_paths.reverse(); return result; }
void core_info_get_name(const char *path, char *s, size_t len, const char *path_info, const char *dir_cores, const char *exts, bool dir_show_hidden_files, bool get_display_name) { size_t i; const char *path_basedir = !string_is_empty(path_info) ? path_info : dir_cores; struct string_list *contents = dir_list_new( dir_cores, exts, false, dir_show_hidden_files, false, false); const char *core_path_basename = path_basename(path); 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(path_basename(current_path), core_path_basename)) 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, get_display_name ? "display_name" : "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; }
static core_info_list_t *core_info_list_new(const char *path, const char *libretro_info_dir, const char *exts, bool dir_show_hidden_files) { size_t i; core_info_t *core_info = NULL; core_info_list_t *core_info_list = NULL; const char *path_basedir = libretro_info_dir; struct string_list *contents = string_list_new(); bool ok = dir_list_append(contents, path, exts, false, dir_show_hidden_files, false, false); #if defined(__WINRT__) || defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP /* UWP: browse the optional packages for additional cores */ struct string_list *core_packages = string_list_new(); uwp_fill_installed_core_packages(core_packages); for (i = 0; i < core_packages->size; i++) { dir_list_append(contents, core_packages->elems[i].data, exts, false, dir_show_hidden_files, false, false); } string_list_free(core_packages); #else /* Keep the old 'directory not found' behavior */ if (!ok) { string_list_free(contents); contents = NULL; } #endif if (!contents) return NULL; 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++) { size_t info_path_size = PATH_MAX_LENGTH * sizeof(char); char *info_path = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); info_path[0] = '\0'; if ( core_info_list_iterate(info_path, info_path_size, path_basedir, contents, i) && path_is_valid(info_path)) { char *tmp = NULL; bool tmp_bool = false; unsigned count = 0; config_file_t *conf = config_file_new(info_path); free(info_path); if (!conf) continue; if (config_get_string(conf, "display_name", &tmp) && !string_is_empty(tmp)) { core_info[i].display_name = strdup(tmp); free(tmp); tmp = NULL; } if (config_get_string(conf, "display_version", &tmp) && !string_is_empty(tmp)) { core_info[i].display_version = strdup(tmp); free(tmp); tmp = NULL; } if (config_get_string(conf, "corename", &tmp) && !string_is_empty(tmp)) { core_info[i].core_name = strdup(tmp); free(tmp); tmp = NULL; } if (config_get_string(conf, "systemname", &tmp) && !string_is_empty(tmp)) { core_info[i].systemname = strdup(tmp); free(tmp); tmp = NULL; } if (config_get_string(conf, "systemid", &tmp) && !string_is_empty(tmp)) { core_info[i].system_id = strdup(tmp); free(tmp); tmp = NULL; } if (config_get_string(conf, "manufacturer", &tmp) && !string_is_empty(tmp)) { core_info[i].system_manufacturer = strdup(tmp); free(tmp); tmp = NULL; } config_get_uint(conf, "firmware_count", &count); core_info[i].firmware_count = count; if (config_get_string(conf, "supported_extensions", &tmp) && !string_is_empty(tmp)) { core_info[i].supported_extensions = strdup(tmp); core_info[i].supported_extensions_list = string_split(core_info[i].supported_extensions, "|"); free(tmp); tmp = NULL; } if (config_get_string(conf, "authors", &tmp) && !string_is_empty(tmp)) { core_info[i].authors = strdup(tmp); core_info[i].authors_list = string_split(core_info[i].authors, "|"); free(tmp); tmp = NULL; } if (config_get_string(conf, "permissions", &tmp) && !string_is_empty(tmp)) { core_info[i].permissions = strdup(tmp); core_info[i].permissions_list = string_split(core_info[i].permissions, "|"); free(tmp); tmp = NULL; } if (config_get_string(conf, "license", &tmp) && !string_is_empty(tmp)) { core_info[i].licenses = strdup(tmp); core_info[i].licenses_list = string_split(core_info[i].licenses, "|"); free(tmp); tmp = NULL; } if (config_get_string(conf, "categories", &tmp) && !string_is_empty(tmp)) { core_info[i].categories = strdup(tmp); core_info[i].categories_list = string_split(core_info[i].categories, "|"); free(tmp); tmp = NULL; } if (config_get_string(conf, "database", &tmp) && !string_is_empty(tmp)) { core_info[i].databases = strdup(tmp); core_info[i].databases_list = string_split(core_info[i].databases, "|"); free(tmp); tmp = NULL; } if (config_get_string(conf, "notes", &tmp) && !string_is_empty(tmp)) { core_info[i].notes = strdup(tmp); core_info[i].note_list = string_split(core_info[i].notes, "|"); free(tmp); tmp = NULL; } if (tmp) free(tmp); tmp = NULL; if (config_get_bool(conf, "supports_no_game", &tmp_bool)) core_info[i].supports_no_game = tmp_bool; if (config_get_bool(conf, "database_match_archive_member", &tmp_bool)) core_info[i].database_match_archive_member = tmp_bool; core_info[i].config_data = conf; } else free(info_path); if (!string_is_empty(contents->elems[i].data)) core_info[i].path = strdup(contents->elems[i].data); if (!core_info[i].display_name) core_info[i].display_name = strdup(path_basename(core_info[i].path)); } if (core_info_list) { core_info_list_resolve_all_extensions(core_info_list); core_info_list_resolve_all_firmware(core_info_list); } string_list_free(contents); return core_info_list; error: if (contents) string_list_free(contents); core_info_list_free(core_info_list); return NULL; }
static core_info_list_t *core_info_list_new(const char *path) { size_t i; core_info_t *core_info = NULL; core_info_list_t *core_info_list = NULL; struct string_list *contents = dir_list_new_special( path, DIR_LIST_CORES, NULL); settings_t *settings = config_get_ptr(); const char *path_basedir = !string_is_empty(settings->paths.path_libretro_info) ? settings->paths.path_libretro_info : settings->paths.directory_libretro; if (!contents) return NULL; 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++) { size_t info_path_size = PATH_MAX_LENGTH * sizeof(char); char *info_path = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); info_path[0] = '\0'; if ( core_info_list_iterate(info_path, info_path_size, path_basedir, contents, i) && path_is_valid(info_path)) { char *tmp = NULL; bool tmp_bool = false; unsigned count = 0; config_file_t *conf = config_file_new(info_path); free(info_path); if (!conf) continue; if (config_get_string(conf, "display_name", &tmp) && !string_is_empty(tmp)) { core_info[i].display_name = strdup(tmp); free(tmp); tmp = NULL; } if (config_get_string(conf, "corename", &tmp) && !string_is_empty(tmp)) { core_info[i].core_name = strdup(tmp); free(tmp); tmp = NULL; } if (config_get_string(conf, "systemname", &tmp) && !string_is_empty(tmp)) { core_info[i].systemname = strdup(tmp); free(tmp); tmp = NULL; } if (config_get_string(conf, "manufacturer", &tmp) && !string_is_empty(tmp)) { core_info[i].system_manufacturer = strdup(tmp); free(tmp); tmp = NULL; } config_get_uint(conf, "firmware_count", &count); core_info[i].firmware_count = count; if (config_get_string(conf, "supported_extensions", &tmp) && !string_is_empty(tmp)) { core_info[i].supported_extensions = strdup(tmp); core_info[i].supported_extensions_list = string_split(core_info[i].supported_extensions, "|"); free(tmp); tmp = NULL; } if (config_get_string(conf, "authors", &tmp) && !string_is_empty(tmp)) { core_info[i].authors = strdup(tmp); core_info[i].authors_list = string_split(core_info[i].authors, "|"); free(tmp); tmp = NULL; } if (config_get_string(conf, "permissions", &tmp) && !string_is_empty(tmp)) { core_info[i].permissions = strdup(tmp); core_info[i].permissions_list = string_split(core_info[i].permissions, "|"); free(tmp); tmp = NULL; } if (config_get_string(conf, "license", &tmp) && !string_is_empty(tmp)) { core_info[i].licenses = strdup(tmp); core_info[i].licenses_list = string_split(core_info[i].licenses, "|"); free(tmp); tmp = NULL; } if (config_get_string(conf, "categories", &tmp) && !string_is_empty(tmp)) { core_info[i].categories = strdup(tmp); core_info[i].categories_list = string_split(core_info[i].categories, "|"); free(tmp); tmp = NULL; } if (config_get_string(conf, "database", &tmp) && !string_is_empty(tmp)) { core_info[i].databases = strdup(tmp); core_info[i].databases_list = string_split(core_info[i].databases, "|"); free(tmp); tmp = NULL; } if (config_get_string(conf, "notes", &tmp) && !string_is_empty(tmp)) { core_info[i].notes = strdup(tmp); core_info[i].note_list = string_split(core_info[i].notes, "|"); free(tmp); tmp = NULL; } if (tmp) free(tmp); tmp = NULL; if (config_get_bool(conf, "supports_no_game", &tmp_bool)) core_info[i].supports_no_game = tmp_bool; if (config_get_bool(conf, "database_match_archive_member", &tmp_bool)) core_info[i].database_match_archive_member = tmp_bool; core_info[i].config_data = conf; } else free(info_path); if (!string_is_empty(contents->elems[i].data)) core_info[i].path = strdup(contents->elems[i].data); if (!core_info[i].display_name) core_info[i].display_name = strdup(path_basename(core_info[i].path)); } if (core_info_list) { core_info_list_resolve_all_extensions(core_info_list); core_info_list_resolve_all_firmware(core_info_list); } dir_list_free(contents); return core_info_list; error: if (contents) dir_list_free(contents); core_info_list_free(core_info_list); return NULL; }