From 244a24104ded3a4573aeffa32160af21f76cbce6 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 15 Dec 2020 00:51:46 +0100 Subject: Revise error codes to have a reduced set exposed in the public API. Fixes #2482 And also add proj_context_errno_string() Revise gie 'expect failure errno XXXX' strings --- src/projections/imw_p.cpp | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) (limited to 'src/projections/imw_p.cpp') diff --git a/src/projections/imw_p.cpp b/src/projections/imw_p.cpp index 6e82d287..6f0bfe5f 100644 --- a/src/projections/imw_p.cpp +++ b/src/projections/imw_p.cpp @@ -34,15 +34,27 @@ static int phi12(PJ *P, double *del, double *sig) { struct pj_opaque *Q = static_cast(P->opaque); int err = 0; - if (!pj_param(P->ctx, P->params, "tlat_1").i || - !pj_param(P->ctx, P->params, "tlat_2").i) { - err = PJD_ERR_LAT_1_2_UNSPECIFIED; - } else { + if (!pj_param(P->ctx, P->params, "tlat_1").i ) + { + proj_log_error(P, _("Missing parameter: lat_1 should be specified")); + err = PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE; + } + else if ( !pj_param(P->ctx, P->params, "tlat_2").i) + { + proj_log_error(P, _("Missing parameter: lat_2 should be specified")); + err = PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE; + } + else + { Q->phi_1 = pj_param(P->ctx, P->params, "rlat_1").f; Q->phi_2 = pj_param(P->ctx, P->params, "rlat_2").f; *del = 0.5 * (Q->phi_2 - Q->phi_1); *sig = 0.5 * (Q->phi_2 + Q->phi_1); - err = (fabs(*del) < EPS || fabs(*sig) < EPS) ? PJD_ERR_ABS_LAT1_EQ_ABS_LAT2 : 0; + err = (fabs(*del) < EPS || fabs(*sig) < EPS) ? PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE : 0; + if( err ) + { + proj_log_error(P, _("Illegal value for lat_1 and lat_2: |lat_1 - lat_2| and |lat_1 + lat_2| should be > 0")); + } } return err; } @@ -120,7 +132,7 @@ static PJ_LP imw_p_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, invers if( denom != 0 || fabs(t.y - xy.y) > TOL ) { if( denom == 0 ) { - proj_errno_set(P, PJD_ERR_NON_CONVERGENT); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lp; } lp.phi = ((lp.phi - Q->phi_1) * (xy.y - yc) / denom) + Q->phi_1; @@ -133,7 +145,7 @@ static PJ_LP imw_p_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, invers if( i == N_MAX_ITER ) { - proj_errno_set(P, PJD_ERR_NON_CONVERGENT); + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lp; } @@ -171,10 +183,10 @@ PJ *PROJECTION(imw_p) { int err; struct pj_opaque *Q = static_cast(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, ENOMEM); + return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); P->opaque = Q; - if (!(Q->en = pj_enfn(P->es))) return pj_default_destructor (P, ENOMEM); + if (!(Q->en = pj_enfn(P->es))) return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); if( (err = phi12(P, &del, &sig)) != 0) { return destructor(P, err); } -- cgit v1.2.3 From a27c0255e7b8e6aab1b91e49fd7870d1ee4e1a80 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 15 Dec 2020 17:53:29 +0100 Subject: Remap ENOMEM from PROJ_ERR_INVALID_OP to PROJ_ERR_OTHER --- src/projections/imw_p.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/projections/imw_p.cpp') diff --git a/src/projections/imw_p.cpp b/src/projections/imw_p.cpp index 6f0bfe5f..ed5cb897 100644 --- a/src/projections/imw_p.cpp +++ b/src/projections/imw_p.cpp @@ -183,10 +183,10 @@ PJ *PROJECTION(imw_p) { int err; struct pj_opaque *Q = static_cast(calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) - return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); + return pj_default_destructor (P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; - if (!(Q->en = pj_enfn(P->es))) return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/); + if (!(Q->en = pj_enfn(P->es))) return pj_default_destructor (P, PROJ_ERR_OTHER /*ENOMEM*/); if( (err = phi12(P, &del, &sig)) != 0) { return destructor(P, err); } -- cgit v1.2.3