From a6f947f42cd69fc12f2d42ca0b6150d99fe9bb7c Mon Sep 17 00:00:00 2001 From: Frank Warmerdam Date: Thu, 23 Aug 2001 20:25:55 +0000 Subject: added pj_set_finder function git-svn-id: http://svn.osgeo.org/metacrs/proj/trunk@976 4e78687f-474d-0410-85f9-8d5e500ac6b2 --- src/pj_open_lib.c | 33 ++++++++++++++++++++++++++++++--- src/proj.def | 2 ++ src/proj_api.h | 4 ++++ 3 files changed, 36 insertions(+), 3 deletions(-) (limited to 'src') 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 #include #include - 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); diff --git a/src/proj.def b/src/proj.def index 2bc83e88..aceffaf0 100644 --- a/src/proj.def +++ b/src/proj.def @@ -13,3 +13,5 @@ EXPORTS pj_latlong_from_proj @10 pj_is_latlong @11 pj_get_errno_ref @12 + pj_set_finder @13 + diff --git a/src/proj_api.h b/src/proj_api.h index ce33c622..c3f57a51 100644 --- a/src/proj_api.h +++ b/src/proj_api.h @@ -28,6 +28,9 @@ ****************************************************************************** * * $Log$ + * Revision 1.3 2001/08/23 20:25:55 warmerda + * added pj_set_finder function + * * Revision 1.2 2001/06/02 03:35:36 warmerda * added pj_get_errno_ref() * @@ -93,6 +96,7 @@ void pj_deallocate_grids(); int pj_is_latlong(projPJ); void pj_pr_list(projPJ); void pj_free(projPJ); +void pj_set_finder( const char *(*)(const char *) ); projPJ pj_init(int, char **); projPJ pj_init_plus(const char *); projPJ pj_latlong_from_proj( projPJ ); -- cgit v1.2.3