diff options
| author | Frank Warmerdam <warmerdam@pobox.com> | 2001-08-23 20:25:55 +0000 |
|---|---|---|
| committer | Frank Warmerdam <warmerdam@pobox.com> | 2001-08-23 20:25:55 +0000 |
| commit | a6f947f42cd69fc12f2d42ca0b6150d99fe9bb7c (patch) | |
| tree | 0be958869876ecd1e721da444705af98bfb08990 /src/pj_open_lib.c | |
| parent | 77d8ea927c742b22488ebcb876416e51dead7f75 (diff) | |
| download | PROJ-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.c | 33 |
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); |
