diff options
Diffstat (limited to 'src/filemanager.cpp')
| -rw-r--r-- | src/filemanager.cpp | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/src/filemanager.cpp b/src/filemanager.cpp index 8ab8e6c4..02845a8f 100644 --- a/src/filemanager.cpp +++ b/src/filemanager.cpp @@ -1420,6 +1420,21 @@ static void *pj_open_lib_internal( if (out_full_filename != nullptr && out_full_filename_size > 0) out_full_filename[0] = '\0'; + auto open_lib_from_paths = [&ctx, open_file, &name, &fname, &sysname, &mode](const std::string & projLibPaths) { + void *lib_fid = nullptr; + auto paths = NS_PROJ::internal::split(projLibPaths, dirSeparator); + for (const auto& path : paths) { + fname = NS_PROJ::internal::stripQuotes(path); + fname += DIR_CHAR; + fname += name; + sysname = fname.c_str(); + lib_fid = open_file(ctx, sysname, mode); + if (lib_fid) + break; + } + return lib_fid; + }; + /* check if ~/name */ if (is_tilde_slash(name)) if ((sysname = getenv("HOME")) != nullptr) { @@ -1487,16 +1502,7 @@ static void *pj_open_lib_internal( else if (!gbPROJ_LIB_ENV_VAR_TRIED_LAST && !(projLib = NS_PROJ::FileManager::getProjLibEnvVar(ctx)) .empty()) { - auto paths = NS_PROJ::internal::split(projLib, dirSeparator); - for (const auto &path : paths) { - fname = path; - fname += DIR_CHAR; - fname += name; - sysname = fname.c_str(); - fid = open_file(ctx, sysname, mode); - if (fid) - break; - } + fid = open_lib_from_paths(projLib); } else if ((sysname = get_path_from_relative_share_proj( @@ -1519,16 +1525,7 @@ static void *pj_open_lib_internal( else if (gbPROJ_LIB_ENV_VAR_TRIED_LAST && !(projLib = NS_PROJ::FileManager::getProjLibEnvVar(ctx)) .empty()) { - auto paths = NS_PROJ::internal::split(projLib, dirSeparator); - for (const auto &path : paths) { - fname = path; - fname += DIR_CHAR; - fname += name; - sysname = fname.c_str(); - fid = open_file(ctx, sysname, mode); - if (fid) - break; - } + fid = open_lib_from_paths(projLib); } else { |
