diff options
| author | Frank Warmerdam <warmerdam@pobox.com> | 2006-09-22 23:06:24 +0000 |
|---|---|---|
| committer | Frank Warmerdam <warmerdam@pobox.com> | 2006-09-22 23:06:24 +0000 |
| commit | 3276f0dd7c97fac53cb4399aff3feca69237fc66 (patch) | |
| tree | cd3655ac183c6e12472272ea105201cb12abba4a | |
| parent | c785d7c2bb6fc2104881cdc42727986be9184361 (diff) | |
| download | PROJ-3276f0dd7c97fac53cb4399aff3feca69237fc66.tar.gz PROJ-3276f0dd7c97fac53cb4399aff3feca69237fc66.zip | |
remote static start variable in pj_init (bug 1283)
git-svn-id: http://svn.osgeo.org/metacrs/proj/trunk@1346 4e78687f-474d-0410-85f9-8d5e500ac6b2
| -rw-r--r-- | ChangeLog | 5 | ||||
| -rw-r--r-- | src/pj_init.c | 35 |
2 files changed, 24 insertions, 16 deletions
@@ -1,3 +1,8 @@ +2006-09-22 Frank Warmerdam <warmerdam@pobox.com> + + * src/pj_init.c: removed static "start" variable to resolve + thread-safety problems (bug 1283). + 2006-09-14 Frank Warmerdam <warmerdam@pobox.com> * Produce 4.5.0beta2 release. diff --git a/src/pj_init.c b/src/pj_init.c index 489a6b82..94383e85 100644 --- a/src/pj_init.c +++ b/src/pj_init.c @@ -30,6 +30,9 @@ ****************************************************************************** * * $Log$ + * Revision 1.17 2006/09/22 23:06:24 fwarmerdam + * remote static start variable in pj_init (bug 1283) + * * Revision 1.16 2004/09/08 15:23:37 warmerda * added new error for unknown prime meridians * @@ -68,14 +71,13 @@ PJ_CVSID("$Id$"); -static paralist *start; extern FILE *pj_open_lib(char *, char *); /************************************************************************/ /* get_opt() */ /************************************************************************/ static paralist * -get_opt(FILE *fid, char *name, paralist *next) { +get_opt(paralist **start, FILE *fid, char *name, paralist *next) { char sword[302], *word = sword+1; int first = 1, len, c; @@ -92,16 +94,16 @@ get_opt(FILE *fid, char *name, paralist *next) { while((c = fgetc(fid)) != EOF && c != '\n') ; break; } - } else if (!first && !pj_param(start, sword).i) { + } else if (!first && !pj_param(*start, sword).i) { /* don't default ellipse if datum, ellps or any earth model information is set. */ if( strncmp(word,"ellps=",6) != 0 - || (!pj_param(start, "tdatum").i - && !pj_param(start, "tellps").i - && !pj_param(start, "ta").i - && !pj_param(start, "tb").i - && !pj_param(start, "trf").i - && !pj_param(start, "tf").i) ) + || (!pj_param(*start, "tdatum").i + && !pj_param(*start, "tellps").i + && !pj_param(*start, "ta").i + && !pj_param(*start, "tb").i + && !pj_param(*start, "trf").i + && !pj_param(*start, "tf").i) ) { next = next->next = pj_mkparam(word); } @@ -117,13 +119,13 @@ get_opt(FILE *fid, char *name, paralist *next) { /* get_defaults() */ /************************************************************************/ static paralist * -get_defaults(paralist *next, char *name) { +get_defaults(paralist **start, paralist *next, char *name) { FILE *fid; if (fid = pj_open_lib("proj_def.dat", "rt")) { - next = get_opt(fid, "general", next); + next = get_opt(start, fid, "general", next); rewind(fid); - next = get_opt(fid, name, next); + next = get_opt(start, fid, name, next); (void)fclose(fid); } if (errno) @@ -135,7 +137,7 @@ get_defaults(paralist *next, char *name) { /* get_init() */ /************************************************************************/ static paralist * -get_init(paralist *next, char *name) { +get_init(paralist **start, paralist *next, char *name) { char fname[MAX_PATH_FILENAME+ID_TAG_MAX+3], *opt; FILE *fid; @@ -144,7 +146,7 @@ get_init(paralist *next, char *name) { *opt++ = '\0'; else { pj_errno = -3; return(0); } if (fid = pj_open_lib(fname, "rt")) - next = get_opt(fid, opt, next); + next = get_opt(start, fid, opt, next); else return(0); (void)fclose(fid); @@ -225,6 +227,7 @@ pj_init_plus( const char *definition ) PJ * pj_init(int argc, char **argv) { char *s, *name; + paralist *start = NULL; PJ *(*proj)(PJ *); paralist *curr; int i; @@ -246,7 +249,7 @@ pj_init(int argc, char **argv) { if (pj_param(start, "tinit").i) { paralist *last = curr; - if (!(curr = get_init(curr, pj_param(start, "sinit").s))) + if (!(curr = get_init(&start, curr, pj_param(start, "sinit").s))) goto bum_call; if (curr == last) { pj_errno = -2; goto bum_call; } } @@ -259,7 +262,7 @@ pj_init(int argc, char **argv) { /* set defaults, unless inhibited */ if (!pj_param(start, "bno_defs").i) - curr = get_defaults(curr, name); + curr = get_defaults(&start, curr, name); proj = (PJ *(*)(PJ *)) pj_list[i].proj; /* allocate projection structure */ |
