aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Warmerdam <warmerdam@pobox.com>2009-09-24 01:50:23 +0000
committerFrank Warmerdam <warmerdam@pobox.com>2009-09-24 01:50:23 +0000
commit84d22b2a85c5f0b4aab0fcd8be9202e603ad0f73 (patch)
tree9f8c1f62a093b6d23feddcd75e2d434bc464130c
parentad030cb26d6af270616b6c57755448242a7e792a (diff)
downloadPROJ-84d22b2a85c5f0b4aab0fcd8be9202e603ad0f73.tar.gz
PROJ-84d22b2a85c5f0b4aab0fcd8be9202e603ad0f73.zip
remove rho from structure to establish threadsafety (#41)
git-svn-id: http://svn.osgeo.org/metacrs/proj/trunk@1629 4e78687f-474d-0410-85f9-8d5e500ac6b2
-rw-r--r--ChangeLog2
-rw-r--r--src/PJ_lcc.c26
2 files changed, 16 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index e8cf3001..240bbc41 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
2009-09-23 Frank Warmerdam <warmerdam@pobox.com>
+ * src/pj_rho.c: move rho out of structure, threadsafety issue (#41).
+
* nmake.opt: improve comments (#50).
* nad/epsg: regenerated - use more symbolic ellipsoid/datum names, and
diff --git a/src/PJ_lcc.c b/src/PJ_lcc.c
index 90107839..80a85d0b 100644
--- a/src/PJ_lcc.c
+++ b/src/PJ_lcc.c
@@ -2,7 +2,6 @@
double phi1; \
double phi2; \
double n; \
- double rho; \
double rho0; \
double c; \
int ellips;
@@ -12,32 +11,34 @@ PROJ_HEAD(lcc, "Lambert Conformal Conic")
"\n\tConic, Sph&Ell\n\tlat_1= and lat_2= or lat_0";
# define EPS10 1.e-10
FORWARD(e_forward); /* ellipsoid & spheroid */
+ double rho;
if (fabs(fabs(lp.phi) - HALFPI) < EPS10) {
if ((lp.phi * P->n) <= 0.) F_ERROR;
- P->rho = 0.;
+ rho = 0.;
}
else
- P->rho = P->c * (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi),
+ rho = P->c * (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi),
P->e), P->n) : pow(tan(FORTPI + .5 * lp.phi), -P->n));
- xy.x = P->k0 * (P->rho * sin( lp.lam *= P->n ) );
- xy.y = P->k0 * (P->rho0 - P->rho * cos(lp.lam) );
+ xy.x = P->k0 * (rho * sin( lp.lam *= P->n ) );
+ xy.y = P->k0 * (P->rho0 - rho * cos(lp.lam) );
return (xy);
}
INVERSE(e_inverse); /* ellipsoid & spheroid */
+ double rho;
xy.x /= P->k0;
xy.y /= P->k0;
- if( (P->rho = hypot(xy.x, xy.y = P->rho0 - xy.y)) != 0.0) {
+ if( (rho = hypot(xy.x, xy.y = P->rho0 - xy.y)) != 0.0) {
if (P->n < 0.) {
- P->rho = -P->rho;
+ rho = -rho;
xy.x = -xy.x;
xy.y = -xy.y;
}
if (P->ellips) {
- if ((lp.phi = pj_phi2(pow(P->rho / P->c, 1./P->n), P->e))
+ if ((lp.phi = pj_phi2(pow(rho / P->c, 1./P->n), P->e))
== HUGE_VAL)
I_ERROR;
} else
- lp.phi = 2. * atan(pow(P->c / P->rho, 1./P->n)) - HALFPI;
+ lp.phi = 2. * atan(pow(P->c / rho, 1./P->n)) - HALFPI;
lp.lam = atan2(xy.x, xy.y) / P->n;
} else {
lp.lam = 0.;
@@ -46,14 +47,15 @@ INVERSE(e_inverse); /* ellipsoid & spheroid */
return (lp);
}
SPECIAL(fac) {
+ double rho;
if (fabs(fabs(lp.phi) - HALFPI) < EPS10) {
if ((lp.phi * P->n) <= 0.) return;
- P->rho = 0.;
+ rho = 0.;
} else
- P->rho = P->c * (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi),
+ rho = P->c * (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi),
P->e), P->n) : pow(tan(FORTPI + .5 * lp.phi), -P->n));
fac->code |= IS_ANAL_HK + IS_ANAL_CONV;
- fac->k = fac->h = P->k0 * P->n * P->rho /
+ fac->k = fac->h = P->k0 * P->n * rho /
pj_msfn(sin(lp.phi), cos(lp.phi), P->es);
fac->conv = - P->n * lp.lam;
}