diff options
| author | Kristian Evers <kristianevers@gmail.com> | 2018-03-12 11:04:35 +0100 |
|---|---|---|
| committer | Kristian Evers <kristianevers@gmail.com> | 2018-03-12 12:17:13 +0100 |
| commit | 22203cc0677f7f60fd81f719125c3c1768e498ac (patch) | |
| tree | fe5f8b4c526ed181fa0838e39a0f88e10c84b534 /src/pj_inv.c | |
| parent | 81efb33bcfc542f558aa95201c046b21a4c9fd12 (diff) | |
| download | PROJ-22203cc0677f7f60fd81f719125c3c1768e498ac.tar.gz PROJ-22203cc0677f7f60fd81f719125c3c1768e498ac.zip | |
Make sure to pass any existing errno's on after the coordinate operation is done
Diffstat (limited to 'src/pj_inv.c')
| -rw-r--r-- | src/pj_inv.c | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/src/pj_inv.c b/src/pj_inv.c index f9f11f56..4c2266fb 100644 --- a/src/pj_inv.c +++ b/src/pj_inv.c @@ -172,11 +172,22 @@ static PJ_COORD inv_finalize (PJ *P, PJ_COORD coo) { } +static PJ_COORD error_or_coord(PJ *P, PJ_COORD coord, int last_errno) { + if (proj_errno(P)) + return proj_coord_error(); + + proj_errno_restore(P, last_errno); + return coord; +} + LP pj_inv(XY xy, PJ *P) { + int last_errno; PJ_COORD coo = {{0,0,0,0}}; coo.xy = xy; + last_errno = proj_errno_reset(P); + if (!P->skip_inv_prepare) coo = inv_prepare (P, coo); if (HUGE_VAL==coo.v[0]) @@ -199,20 +210,18 @@ LP pj_inv(XY xy, PJ *P) { if (!P->skip_inv_finalize) coo = inv_finalize (P, coo); - if (proj_errno(P)) { - proj_errno_reset(P); - return proj_coord_error().lp; - } - - return coo.lp; + return error_or_coord(P, coo, last_errno).lp; } LPZ pj_inv3d (XYZ xyz, PJ *P) { + int last_errno; PJ_COORD coo = {{0,0,0,0}}; coo.xyz = xyz; + last_errno = proj_errno_reset(P); + if (!P->skip_inv_prepare) coo = inv_prepare (P, coo); if (HUGE_VAL==coo.v[0]) @@ -235,17 +244,14 @@ LPZ pj_inv3d (XYZ xyz, PJ *P) { if (!P->skip_inv_finalize) coo = inv_finalize (P, coo); - if (proj_errno(P)) { - proj_errno_reset(P); - return proj_coord_error().lpz; - } - - return coo.lpz; + return error_or_coord(P, coo, last_errno).lpz; } PJ_COORD pj_inv4d (PJ_COORD coo, PJ *P) { + int last_errno = proj_errno_reset(P); + if (!P->skip_inv_prepare) coo = inv_prepare (P, coo); if (HUGE_VAL==coo.v[0]) @@ -268,10 +274,5 @@ PJ_COORD pj_inv4d (PJ_COORD coo, PJ *P) { if (!P->skip_inv_finalize) coo = inv_finalize (P, coo); - if (proj_errno(P)) { - proj_errno_reset(P); - return proj_coord_error(); - } - - return coo; + return error_or_coord(P, coo, last_errno); } |
