From e31cd44d2b53a6dae71fd767f41ea5823f0612a9 Mon Sep 17 00:00:00 2001 From: snowman2 Date: Sun, 31 Mar 2019 23:11:28 -0500 Subject: paths set by user take priority over PROJ_LIB for search paths --- src/open_lib.cpp | 51 ++++++++++++++++++++------------------------------- 1 file changed, 20 insertions(+), 31 deletions(-) (limited to 'src/open_lib.cpp') diff --git a/src/open_lib.cpp b/src/open_lib.cpp index a00d3d0e..68477996 100644 --- a/src/open_lib.cpp +++ b/src/open_lib.cpp @@ -200,9 +200,24 @@ pj_open_lib_ex(projCtx ctx, const char *name, const char *mode, else if( ctx->file_finder_legacy != nullptr && (sysname = ctx->file_finder_legacy( name )) != nullptr ) ; - /* or is environment PROJ_LIB defined */ + /* The user has search paths set */ + else if( !ctx->search_paths.empty() ) { + for( const auto& path: ctx->search_paths ) { + try { + fname = path; + fname += DIR_CHAR; + fname += name; + sysname = fname.c_str(); + fid = pj_ctx_fopen(ctx, sysname, mode); + } catch( const std::exception& ) + { + } + if( fid ) + break; + } + } + /* if is environment PROJ_LIB defined */ else if ((sysname = getenv("PROJ_LIB")) != nullptr) { - auto paths = NS_PROJ::internal::split(std::string(sysname), dirSeparator); for( const auto& path: paths ) { fname = path; @@ -213,15 +228,16 @@ pj_open_lib_ex(projCtx ctx, const char *name, const char *mode, if( fid ) break; } - /* or hardcoded path */ } else if ((sysname = proj_lib_name) != nullptr) { fname = sysname; fname += DIR_CHAR; fname += name; sysname = fname.c_str(); - } else /* just try it bare bones */ + /* just try it bare bones */ + } else { sysname = name; + } if ( fid != nullptr || (fid = pj_ctx_fopen(ctx, sysname, mode)) != nullptr) { @@ -233,33 +249,6 @@ pj_open_lib_ex(projCtx ctx, const char *name, const char *mode, errno = 0; } - /* If none of those work and we have a search path, try it */ - if( !fid && !ctx->search_paths.empty() ) - { - for( const auto& path: ctx->search_paths ) { - try { - fname = path; - fname += DIR_CHAR; - fname += name; - sysname = fname.c_str(); - fid = pj_ctx_fopen(ctx, sysname, mode); - } catch( const std::exception& ) - { - } - if( fid ) - break; - } - if (fid) - { - if( out_full_filename != nullptr && out_full_filename_size > 0 ) - { - strncpy(out_full_filename, sysname, out_full_filename_size); - out_full_filename[out_full_filename_size-1] = '\0'; - } - errno = 0; - } - } - if( ctx->last_errno == 0 && errno != 0 ) pj_ctx_set_errno( ctx, errno ); -- cgit v1.2.3