aboutsummaryrefslogtreecommitdiff
path: root/src/open_lib.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/open_lib.cpp')
-rw-r--r--src/open_lib.cpp57
1 files changed, 24 insertions, 33 deletions
diff --git a/src/open_lib.cpp b/src/open_lib.cpp
index 510704e9..01f626e8 100644
--- a/src/open_lib.cpp
+++ b/src/open_lib.cpp
@@ -34,6 +34,7 @@
#define FROM_PROJ_CPP
#endif
+#include <assert.h>
#include <errno.h>
#include <stddef.h>
#include <stdio.h>
@@ -194,15 +195,30 @@ pj_open_lib_ex(projCtx ctx, const char *name, const char *mode,
sysname = name;
/* or try to use application provided file finder */
- else if( ctx && ctx->file_finder != nullptr && (sysname = ctx->file_finder( ctx, name, ctx->file_finder_user_data )) != nullptr )
+ else if( ctx->file_finder != nullptr && (sysname = ctx->file_finder( ctx, name, ctx->file_finder_user_data )) != nullptr )
;
- else if( ctx && ctx->file_finder_legacy != nullptr && (sysname = ctx->file_finder_legacy( name )) != nullptr )
+ 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,16 +229,18 @@ 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;
+ }
+ assert(sysname); // to make Coverity Scan happy
if ( fid != nullptr || (fid = pj_ctx_fopen(ctx, sysname, mode)) != nullptr)
{
if( out_full_filename != nullptr && out_full_filename_size > 0 )
@@ -233,33 +251,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 && !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 );