aboutsummaryrefslogtreecommitdiff
path: root/src/pj_open_lib.c
diff options
context:
space:
mode:
authorFrank Warmerdam <warmerdam@pobox.com>2001-08-23 20:25:55 +0000
committerFrank Warmerdam <warmerdam@pobox.com>2001-08-23 20:25:55 +0000
commita6f947f42cd69fc12f2d42ca0b6150d99fe9bb7c (patch)
tree0be958869876ecd1e721da444705af98bfb08990 /src/pj_open_lib.c
parent77d8ea927c742b22488ebcb876416e51dead7f75 (diff)
downloadPROJ-a6f947f42cd69fc12f2d42ca0b6150d99fe9bb7c.tar.gz
PROJ-a6f947f42cd69fc12f2d42ca0b6150d99fe9bb7c.zip
added pj_set_finder function
git-svn-id: http://svn.osgeo.org/metacrs/proj/trunk@976 4e78687f-474d-0410-85f9-8d5e500ac6b2
Diffstat (limited to 'src/pj_open_lib.c')
-rw-r--r--src/pj_open_lib.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/src/pj_open_lib.c b/src/pj_open_lib.c
index 3de0ad3e..488d7234 100644
--- a/src/pj_open_lib.c
+++ b/src/pj_open_lib.c
@@ -7,14 +7,30 @@ static const char SCCSID[]="@(#)pj_open_lib.c 4.5 94/10/30 GIE REL";
#include <stdio.h>
#include <string.h>
#include <errno.h>
- static char *
-proj_lib_name =
+
+static const char *(*pj_finder)(const char *) = NULL;
+static char * proj_lib_name =
#ifdef PROJ_LIB
PROJ_LIB;
#else
0;
#endif
- FILE *
+
+/************************************************************************/
+/* pj_set_finder() */
+/************************************************************************/
+
+void pj_set_finder( const char *(*new_finder)(const char *) )
+
+{
+ pj_finder = new_finder;
+}
+
+/************************************************************************/
+/* pj_open_lib() */
+/************************************************************************/
+
+FILE *
pj_open_lib(char *name, char *mode) {
char fname[MAX_PATH_FILENAME+1], *sysname;
FILE *fid;
@@ -30,10 +46,16 @@ pj_open_lib(char *name, char *mode) {
sysname = fname;
} else
return NULL;
+
/* or fixed path: /name, ./name or ../name */
else if (*name == DIR_CHAR || (*name == '.' && name[1] == DIR_CHAR) ||
(!strncmp(name, "..", 2) && name[2] == DIR_CHAR) )
sysname = name;
+
+ /* or try to use application provided file finder */
+ else if( pj_finder != NULL && pj_finder( name ) != NULL )
+ sysname = pj_finder( name );
+
/* or is environment PROJ_LIB defined */
else if ((sysname = getenv("PROJ_LIB")) || (sysname = proj_lib_name)) {
(void)strcpy(fname, sysname);
@@ -43,6 +65,11 @@ pj_open_lib(char *name, char *mode) {
sysname = fname;
} else /* just try it bare bones */
sysname = name;
+
+ if( getenv( "PROJ_DEBUG" ) != NULL )
+ fprintf( stderr, "pj_open_lib(%s): call fopen(%s).\n",
+ name, sysname);
+
if (fid = fopen(sysname, mode))
errno = 0;
return(fid);