aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2020-12-15 00:51:46 +0100
committerEven Rouault <even.rouault@spatialys.com>2020-12-15 01:13:43 +0100
commit244a24104ded3a4573aeffa32160af21f76cbce6 (patch)
treef3a11529172719657cf7576e062e45e0f9452db5
parent1e9894b0e2b161e61546672bccb85a9ef21df541 (diff)
downloadPROJ-244a24104ded3a4573aeffa32160af21f76cbce6.tar.gz
PROJ-244a24104ded3a4573aeffa32160af21f76cbce6.zip
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
-rw-r--r--scripts/reference_exported_symbols.txt3
-rw-r--r--src/4D_api.cpp41
-rw-r--r--src/aasincos.cpp4
-rw-r--r--src/apps/gie.cpp111
-rw-r--r--src/conversions/axisswap.cpp27
-rw-r--r--src/conversions/set.cpp2
-rw-r--r--src/conversions/topocentric.cpp16
-rw-r--r--src/conversions/unitconvert.cpp42
-rw-r--r--src/datum_set.cpp8
-rw-r--r--src/dmstor.cpp4
-rw-r--r--src/ell_set.cpp106
-rw-r--r--src/factors.cpp14
-rw-r--r--src/fwd.cpp19
-rw-r--r--src/gauss.cpp2
-rw-r--r--src/generic_inverse.cpp3
-rw-r--r--src/grids.cpp225
-rw-r--r--src/init.cpp106
-rw-r--r--src/internal.cpp10
-rw-r--r--src/inv.cpp10
-rw-r--r--src/iso19111/c_api.cpp74
-rw-r--r--src/log.cpp4
-rw-r--r--src/mlfn.hpp2
-rw-r--r--src/networkfilemanager.cpp6
-rw-r--r--src/param.cpp2
-rw-r--r--src/phi2.cpp2
-rw-r--r--src/pipeline.cpp37
-rw-r--r--src/proj.h30
-rw-r--r--src/proj_internal.h72
-rw-r--r--src/proj_mdist.cpp2
-rw-r--r--src/projections/adams.cpp8
-rw-r--r--src/projections/aea.cpp30
-rw-r--r--src/projections/aeqd.cpp8
-rw-r--r--src/projections/airy.cpp8
-rw-r--r--src/projections/aitoff.cpp13
-rw-r--r--src/projections/bacon.cpp6
-rw-r--r--src/projections/bertin1953.cpp2
-rw-r--r--src/projections/bipc.cpp14
-rw-r--r--src/projections/bonne.cpp13
-rw-r--r--src/projections/calcofi.cpp4
-rw-r--r--src/projections/cass.cpp4
-rw-r--r--src/projections/cc.cpp2
-rw-r--r--src/projections/ccon.cpp10
-rw-r--r--src/projections/cea.cpp14
-rw-r--r--src/projections/chamb.cpp7
-rw-r--r--src/projections/col_urban.cpp2
-rw-r--r--src/projections/collg.cpp2
-rw-r--r--src/projections/comill.cpp2
-rw-r--r--src/projections/eck2.cpp2
-rw-r--r--src/projections/eck3.cpp8
-rw-r--r--src/projections/eqc.cpp7
-rw-r--r--src/projections/eqdc.cpp30
-rw-r--r--src/projections/eqearth.cpp6
-rw-r--r--src/projections/fouc_s.cpp7
-rw-r--r--src/projections/geos.cpp18
-rw-r--r--src/projections/gn_sinu.cpp44
-rw-r--r--src/projections/gnom.cpp4
-rw-r--r--src/projections/goode.cpp6
-rw-r--r--src/projections/gstmerc.cpp2
-rw-r--r--src/projections/hammer.cpp16
-rw-r--r--src/projections/hatano.cpp4
-rw-r--r--src/projections/healpix.cpp26
-rw-r--r--src/projections/igh.cpp6
-rw-r--r--src/projections/igh_o.cpp8
-rw-r--r--src/projections/imw_p.cpp30
-rw-r--r--src/projections/isea.cpp11
-rw-r--r--src/projections/krovak.cpp7
-rw-r--r--src/projections/labrd.cpp5
-rw-r--r--src/projections/laea.cpp15
-rw-r--r--src/projections/lagrng.cpp16
-rw-r--r--src/projections/lcc.cpp42
-rw-r--r--src/projections/lcca.cpp9
-rw-r--r--src/projections/loxim.cpp8
-rw-r--r--src/projections/lsat.cpp17
-rw-r--r--src/projections/mbtfpp.cpp4
-rw-r--r--src/projections/mbtfpq.cpp4
-rw-r--r--src/projections/merc.cpp5
-rw-r--r--src/projections/misrsom.cpp9
-rw-r--r--src/projections/mod_ster.cpp12
-rw-r--r--src/projections/moll.cpp6
-rw-r--r--src/projections/natearth.cpp2
-rw-r--r--src/projections/natearth2.cpp2
-rw-r--r--src/projections/nsper.cpp13
-rw-r--r--src/projections/ob_tran.cpp44
-rw-r--r--src/projections/ocea.cpp2
-rw-r--r--src/projections/oea.cpp41
-rw-r--r--src/projections/omerc.cpp60
-rw-r--r--src/projections/ortho.cpp14
-rw-r--r--src/projections/patterson.cpp2
-rw-r--r--src/projections/poly.cpp10
-rw-r--r--src/projections/putp3.cpp4
-rw-r--r--src/projections/putp4p.cpp4
-rw-r--r--src/projections/putp5.cpp4
-rw-r--r--src/projections/putp6.cpp4
-rw-r--r--src/projections/qsc.cpp2
-rw-r--r--src/projections/robin.cpp10
-rw-r--r--src/projections/rouss.cpp6
-rw-r--r--src/projections/rpoly.cpp2
-rw-r--r--src/projections/sch.cpp15
-rw-r--r--src/projections/sconics.cpp33
-rw-r--r--src/projections/somerc.cpp4
-rw-r--r--src/projections/stere.cpp15
-rw-r--r--src/projections/sterea.cpp6
-rw-r--r--src/projections/sts.cpp8
-rw-r--r--src/projections/tcc.cpp2
-rw-r--r--src/projections/tmerc.cpp34
-rw-r--r--src/projections/tobmerc.cpp2
-rw-r--r--src/projections/tpeqd.cpp10
-rw-r--r--src/projections/urm5.cpp23
-rw-r--r--src/projections/urmfps.cpp21
-rw-r--r--src/projections/vandg.cpp8
-rw-r--r--src/projections/vandg2.cpp4
-rw-r--r--src/projections/wag3.cpp2
-rw-r--r--src/projections/wink1.cpp2
-rw-r--r--src/projections/wink2.cpp2
-rw-r--r--src/strerrno.cpp143
-rw-r--r--src/transformations/affine.cpp4
-rw-r--r--src/transformations/defmodel.cpp22
-rw-r--r--src/transformations/deformation.cpp32
-rw-r--r--src/transformations/helmert.cpp32
-rw-r--r--src/transformations/hgridshift.cpp8
-rw-r--r--src/transformations/horner.cpp50
-rw-r--r--src/transformations/molodensky.cpp54
-rw-r--r--src/transformations/tinshift.cpp20
-rw-r--r--src/transformations/vgridshift.cpp8
-rw-r--r--src/transformations/xyzgridshift.cpp14
-rw-r--r--test/gie/4D-API_cs2cs-style.gie4
-rw-r--r--test/gie/adams_hemi.gie776
-rw-r--r--test/gie/adams_ws1.gie114
-rw-r--r--test/gie/adams_ws2.gie114
-rw-r--r--test/gie/builtins.gie194
-rw-r--r--test/gie/defmodel.gie6
-rw-r--r--test/gie/deformation.gie20
-rw-r--r--test/gie/ellipsoid.gie28
-rw-r--r--test/gie/geotiff_grids.gie12
-rw-r--r--test/gie/guyou.gie772
-rw-r--r--test/gie/more_builtins.gie32
-rw-r--r--test/gie/peirce_q.gie106
-rw-r--r--test/gie/tinshift.gie6
-rw-r--r--test/unit/gie_self_tests.cpp11
-rw-r--r--test/unit/proj_errno_string_test.cpp43
140 files changed, 2450 insertions, 2119 deletions
diff --git a/scripts/reference_exported_symbols.txt b/scripts/reference_exported_symbols.txt
index 167b8a27..a5fd41ca 100644
--- a/scripts/reference_exported_symbols.txt
+++ b/scripts/reference_exported_symbols.txt
@@ -784,6 +784,7 @@ proj_context_create
proj_context_delete_cpp_context(projCppContext*)
proj_context_destroy
proj_context_errno
+proj_context_errno_string
proj_context_get_database_metadata
proj_context_get_database_path
proj_context_get_url_endpoint
@@ -992,7 +993,7 @@ proj_list_get_count
proj_list_operations
proj_list_prime_meridians
proj_list_units
-proj_log_error(PJconsts*, char const*, ...)
+proj_log_error(PJconsts const*, char const*, ...)
proj_log_func
proj_log_level
proj_lp_dist
diff --git a/src/4D_api.cpp b/src/4D_api.cpp
index d6eb901d..612be716 100644
--- a/src/4D_api.cpp
+++ b/src/4D_api.cpp
@@ -176,7 +176,8 @@ double proj_roundtrip (PJ *P, PJ_DIRECTION direction, int n, PJ_COORD *coord) {
return HUGE_VAL;
if (n < 1) {
- proj_errno_set (P, EINVAL);
+ proj_log_error(P, _("n should be >= 1"));
+ proj_errno_set (P, PROJ_ERR_OTHER_API_MISUSE);
return HUGE_VAL;
}
@@ -294,7 +295,7 @@ similarly, but prefers the 2D resp. 3D interfaces if available.
if( iRetry > 0 ) {
const int oldErrno = proj_errno_reset(P);
if (proj_log_level(P->ctx, PJ_LOG_TELL) >= PJ_LOG_DEBUG) {
- pj_log(P->ctx, PJ_LOG_DEBUG, proj_errno_string(oldErrno));
+ pj_log(P->ctx, PJ_LOG_DEBUG, proj_context_errno_string(P->ctx, oldErrno));
}
pj_log(P->ctx, PJ_LOG_DEBUG,
"Did not result in valid result. "
@@ -312,7 +313,7 @@ similarly, but prefers the 2D resp. 3D interfaces if available.
}
PJ_COORD res = direction == PJ_FWD ?
pj_fwd4d( coord, alt.pj ) : pj_inv4d( coord, alt.pj );
- if( proj_errno(alt.pj) == PJD_ERR_NETWORK_ERROR ) {
+ if( proj_errno(alt.pj) == PROJ_ERR_OTHER_NETWORK_ERROR ) {
return proj_coord_error ();
}
if( res.xyzt.x != HUGE_VAL ) {
@@ -359,21 +360,14 @@ similarly, but prefers the 2D resp. 3D interfaces if available.
}
}
- proj_errno_set (P, EINVAL);
+ proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_NO_OPERATION);
return proj_coord_error ();
}
- switch (direction) {
- case PJ_FWD:
- return pj_fwd4d (coord, P);
- case PJ_INV:
- return pj_inv4d (coord, P);
- default:
- break;
- }
-
- proj_errno_set (P, EINVAL);
- return proj_coord_error ();
+ if (direction == PJ_FWD)
+ return pj_fwd4d (coord, P);
+ else
+ return pj_inv4d (coord, P);
}
@@ -500,9 +494,6 @@ size_t proj_trans_generic (
break;
case PJ_IDENT:
return nmin;
- default:
- proj_errno_set (P, EINVAL);
- return 0;
}
/* Arrays of length==0 are broadcast as the constant 0 */
@@ -771,7 +762,7 @@ PJ *pj_create_internal (PJ_CONTEXT *ctx, const char *definition) {
n = strlen (definition);
args = (char *) malloc (n + 1);
if (nullptr==args) {
- proj_context_errno_set(ctx, ENOMEM);
+ proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP /*ENOMEM*/);
return nullptr;
}
strcpy (args, definition);
@@ -779,14 +770,14 @@ PJ *pj_create_internal (PJ_CONTEXT *ctx, const char *definition) {
argc = pj_trim_argc (args);
if (argc==0) {
free (args);
- proj_context_errno_set(ctx, PJD_ERR_NO_ARGS);
+ proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_MISSING_ARG);
return nullptr;
}
argv = pj_trim_argv (argc, args);
if (!argv) {
free(args);
- proj_context_errno_set(ctx, ENOMEM);
+ proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP /*ENOMEM*/);
return nullptr;
}
@@ -821,14 +812,14 @@ indicator, as in {"+proj=utm", "+zone=32"}, or leave it out, as in {"proj=utm",
if (nullptr==ctx)
ctx = pj_get_default_ctx ();
if (nullptr==argv) {
- proj_context_errno_set(ctx, PJD_ERR_NO_ARGS);
+ proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_MISSING_ARG);
return nullptr;
}
/* We assume that free format is used, and build a full proj_create compatible string */
c = pj_make_args (argc, argv);
if (nullptr==c) {
- proj_context_errno_set(ctx, ENOMEM);
+ proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP /* ENOMEM */);
return nullptr;
}
@@ -849,14 +840,14 @@ Same as proj_create_argv() but calls pj_create_internal() instead of proj_create
if (nullptr==ctx)
ctx = pj_get_default_ctx ();
if (nullptr==argv) {
- proj_context_errno_set(ctx, PJD_ERR_NO_ARGS);
+ proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_MISSING_ARG);
return nullptr;
}
/* We assume that free format is used, and build a full proj_create compatible string */
c = pj_make_args (argc, argv);
if (nullptr==c) {
- proj_context_errno_set(ctx, ENOMEM);
+ proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP /*ENOMEM*/);
return nullptr;
}
diff --git a/src/aasincos.cpp b/src/aasincos.cpp
index c4314c67..ca33663b 100644
--- a/src/aasincos.cpp
+++ b/src/aasincos.cpp
@@ -14,7 +14,7 @@ aasin(PJ_CONTEXT *ctx,double v) {
if ((av = fabs(v)) >= 1.) {
if (av > ONE_TOL)
- proj_context_errno_set( ctx, PJD_ERR_ACOS_ASIN_ARG_TOO_LARGE );
+ proj_context_errno_set( ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN );
return (v < 0. ? -M_HALFPI : M_HALFPI);
}
return asin(v);
@@ -26,7 +26,7 @@ aacos(PJ_CONTEXT *ctx, double v) {
if ((av = fabs(v)) >= 1.) {
if (av > ONE_TOL)
- proj_context_errno_set( ctx, PJD_ERR_ACOS_ASIN_ARG_TOO_LARGE );
+ proj_context_errno_set( ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN );
return (v < 0. ? M_PI : 0.);
}
return acos(v);
diff --git a/src/apps/gie.cpp b/src/apps/gie.cpp
index b504b922..95c7da34 100644
--- a/src/apps/gie.cpp
+++ b/src/apps/gie.cpp
@@ -951,7 +951,15 @@ Tell GIE what to expect, when transforming the ACCEPTed input
if (expect_failure_with_errno) {
if (proj_errno (T.P)==expect_failure_with_errno)
return another_succeeding_failure ();
- fprintf (T.fout, "errno=%d, expected=%d\n", proj_errno (T.P), expect_failure_with_errno);
+ //fprintf (T.fout, "errno=%d, expected=%d\n", proj_errno (T.P), expect_failure_with_errno);
+ banner (T.operation);
+ errmsg (3, "%serrno=%s (%d), expected=%d at line %d\n",
+ delim,
+ err_const_from_errno(proj_errno(T.P)),
+ proj_errno (T.P),
+ expect_failure_with_errno,
+ F->lineno
+ );
return another_failing_failure ();
}
@@ -1107,85 +1115,32 @@ static int dispatch (const char *cmnd, const char *args) {
namespace { // anonymous namespace
struct errno_vs_err_const {const char *the_err_const; int the_errno;};
static const struct errno_vs_err_const lookup[] = {
- {"pjd_err_no_args" , -1},
- {"pjd_err_no_option_in_init_file" , -2},
- {"pjd_err_no_colon_in_init_string" , -3},
- {"pjd_err_proj_not_named" , -4},
- {"pjd_err_unknown_projection_id" , -5},
- {"pjd_err_invalid_eccentricity" , -6},
- {"pjd_err_unknown_unit_id" , -7},
- {"pjd_err_invalid_boolean_param" , -8},
- {"pjd_err_unknown_ellp_param" , -9},
- {"pjd_err_rev_flattening_is_zero" , -10},
- {"pjd_err_ref_rad_larger_than_90" , -11},
- {"pjd_err_es_less_than_zero" , -12},
- {"pjd_err_major_axis_not_given" , -13},
- {"pjd_err_lat_or_lon_exceed_limit" , -14},
- {"pjd_err_invalid_x_or_y" , -15},
- {"pjd_err_wrong_format_dms_value" , -16},
- {"pjd_err_non_conv_inv_meri_dist" , -17},
- {"pjd_err_non_conv_sinhpsi2tanphi" , -18},
- {"pjd_err_acos_asin_arg_too_large" , -19},
- {"pjd_err_tolerance_condition" , -20},
- {"pjd_err_conic_lat_equal" , -21},
- {"pjd_err_lat_larger_than_90" , -22},
- {"pjd_err_lat1_is_zero" , -23},
- {"pjd_err_lat_ts_larger_than_90" , -24},
- {"pjd_err_control_point_no_dist" , -25},
- {"pjd_err_no_rotation_proj" , -26},
- {"pjd_err_w_or_m_zero_or_less" , -27},
- {"pjd_err_lsat_not_in_range" , -28},
- {"pjd_err_path_not_in_range" , -29},
- {"pjd_err_invalid_h" , -30},
- {"pjd_err_k_less_than_zero" , -31},
- {"pjd_err_lat_1_or_2_zero_or_90" , -32},
- {"pjd_err_lat_0_or_alpha_eq_90" , -33},
- {"pjd_err_ellipsoid_use_required" , -34},
- {"pjd_err_invalid_utm_zone" , -35},
- {"" , -36}, /* no longer used */
- {"pjd_err_failed_to_find_proj" , -37},
- {"pjd_err_failed_to_load_grid" , -38},
- {"pjd_err_invalid_m_or_n" , -39},
- {"pjd_err_n_out_of_range" , -40},
- {"pjd_err_lat_1_2_unspecified" , -41},
- {"pjd_err_abs_lat1_eq_abs_lat2" , -42},
- {"pjd_err_lat_0_half_pi_from_mean" , -43},
- {"pjd_err_unparseable_cs_def" , -44},
- {"pjd_err_geocentric" , -45},
- {"pjd_err_unknown_prime_meridian" , -46},
- {"pjd_err_axis" , -47},
- {"pjd_err_grid_area" , -48},
- {"pjd_err_invalid_sweep_axis" , -49},
- {"pjd_err_malformed_pipeline" , -50},
- {"pjd_err_unit_factor_less_than_0" , -51},
- {"pjd_err_invalid_scale" , -52},
- {"pjd_err_non_convergent" , -53},
- {"pjd_err_missing_args" , -54},
- {"pjd_err_lat_0_is_zero" , -55},
- {"pjd_err_ellipsoidal_unsupported" , -56},
- {"pjd_err_too_many_inits" , -57},
- {"pjd_err_invalid_arg" , -58},
- {"pjd_err_inconsistent_unit" , -59},
- {"pjd_err_mutually_exclusive_args" , -60},
- {"pjd_err_generic_error" , -61},
- {"pjd_err_network_error" , -62},
- {"pjd_err_dont_skip" , 5555},
- {"pjd_err_unknown" , 9999},
- {"pjd_err_enomem" , ENOMEM},
+
+ { "invalid_op", PROJ_ERR_INVALID_OP },
+ { "invalid_op_wrong_syntax", PROJ_ERR_INVALID_OP_WRONG_SYNTAX },
+ { "invalid_op_missing_arg", PROJ_ERR_INVALID_OP_MISSING_ARG },
+ { "invalid_op_illegal_arg_value", PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE },
+ { "invalid_op_mutually_exclusive_args", PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS },
+ { "invalid_op_file_not_found_or_invalid", PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID },
+ { "coord_transfm", PROJ_ERR_COORD_TRANSFM },
+ { "coord_transfm_invalid_coord", PROJ_ERR_COORD_TRANSFM_INVALID_COORD },
+ { "coord_transfm_outside_projection_domain", PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN },
+ { "coord_transfm_no_operation", PROJ_ERR_COORD_TRANSFM_NO_OPERATION },
+ { "coord_transfm_outside_grid", PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID },
+ { "coord_transfm_grid_at_nodata", PROJ_ERR_COORD_TRANSFM_GRID_AT_NODATA },
+ { "other", PROJ_ERR_OTHER },
+ { "api_misuse", PROJ_ERR_OTHER_API_MISUSE },
+ { "no_inverse_op", PROJ_ERR_OTHER_NO_INVERSE_OP },
+ { "network_error", PROJ_ERR_OTHER_NETWORK_ERROR },
};
} // anonymous namespace
-static const struct errno_vs_err_const unknown = {"PJD_ERR_UNKNOWN", 9999};
-
-
static int list_err_codes (void) {
int i;
const int n = sizeof lookup / sizeof lookup[0];
for (i = 0; i < n; i++) {
- if (9999==lookup[i].the_errno)
- break;
- fprintf (T.fout, "%25s (%2.2d): %s\n", lookup[i].the_err_const + 8,
+ fprintf (T.fout, "%25s (%2.2d): %s\n", lookup[i].the_err_const,
lookup[i].the_errno, proj_errno_string (lookup[i].the_errno));
}
return 0;
@@ -1198,9 +1153,9 @@ static const char *err_const_from_errno (int err) {
for (i = 0; i < n; i++) {
if (err==lookup[i].the_errno)
- return lookup[i].the_err_const + 8;
+ return lookup[i].the_err_const;
}
- return unknown.the_err_const;
+ return "unknown";
}
@@ -1226,14 +1181,6 @@ static int errno_from_err_const (const char *err_const) {
/* Else try to find a matching identifier */
len = strlen (tolower_err_const);
- /* First try to find a match excluding the PJD_ERR_ prefix */
- for (i = 0; i < n; i++) {
- if (strlen(lookup[i].the_err_const) > 8 &&
- 0==strncmp (lookup[i].the_err_const + 8, err_const, len))
- return lookup[i].the_errno;
- }
-
- /* If that did not work, try with the full name */
for (i = 0; i < n; i++) {
if (0==strncmp (lookup[i].the_err_const, err_const, len))
return lookup[i].the_errno;
diff --git a/src/conversions/axisswap.cpp b/src/conversions/axisswap.cpp
index 1aa339c3..c02bd4e5 100644
--- a/src/conversions/axisswap.cpp
+++ b/src/conversions/axisswap.cpp
@@ -174,13 +174,16 @@ PJ *CONVERSION(axisswap,0) {
unsigned int i, j, n = 0;
if (nullptr==Q)
- return pj_default_destructor (P, ENOMEM);
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
P->opaque = (void *) Q;
/* +order and +axis are mutually exclusive */
if ( !pj_param_exists(P->params, "order") == !pj_param_exists(P->params, "axis") )
- return pj_default_destructor(P, PJD_ERR_AXIS);
+ {
+ proj_log_error(P, _("order and axis parameters are mutually exclusive."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS);
+ }
/* fill axis list with indices from 4-7 to simplify duplicate search further down */
for (i=0; i<4; i++) {
@@ -196,8 +199,8 @@ PJ *CONVERSION(axisswap,0) {
/* check that all characters are valid */
for (i=0; i<strlen(order); i++)
if (strchr("1234-,", order[i]) == nullptr) {
- proj_log_error(P, "axisswap: unknown axis '%c'", order[i]);
- return pj_default_destructor(P, PJD_ERR_AXIS);
+ proj_log_error(P, _("axisswap: unknown axis '%c'"), order[i]);
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
/* read axes numbers and signs */
@@ -206,8 +209,8 @@ PJ *CONVERSION(axisswap,0) {
while ( *s != '\0' && n < 4 ) {
Q->axis[n] = abs(atoi(s))-1;
if (Q->axis[n] > 3) {
- proj_log_error(P, "axisswap: invalid axis '%d'", Q->axis[n]);
- return pj_default_destructor(P, PJD_ERR_AXIS);
+ proj_log_error(P, _("axisswap: invalid axis '%d'"), Q->axis[n]);
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
Q->sign[n++] = sign(atoi(s));
while ( *s != '\0' && *s != ',' )
@@ -247,8 +250,8 @@ PJ *CONVERSION(axisswap,0) {
Q->axis[i] = 2;
break;
default:
- proj_log_error(P, "axisswap: unknown axis '%c'", P->axis[i]);
- return pj_default_destructor(P, PJD_ERR_AXIS);
+ proj_log_error(P, _("axisswap: unknown axis '%c'"), P->axis[i]);
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
}
n = 3;
@@ -260,8 +263,8 @@ PJ *CONVERSION(axisswap,0) {
if (i==j)
continue;
if (Q->axis[i] == Q->axis[j]) {
- proj_log_error(P, "swapaxis: duplicate axes specified");
- return pj_default_destructor(P, PJD_ERR_AXIS);
+ proj_log_error(P, _("swapaxis: duplicate axes specified"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
}
@@ -282,8 +285,8 @@ PJ *CONVERSION(axisswap,0) {
if (P->fwd4d == nullptr && P->fwd3d == nullptr && P->fwd == nullptr) {
- proj_log_error(P, "swapaxis: bad axis order");
- return pj_default_destructor(P, PJD_ERR_AXIS);
+ proj_log_error(P, _("swapaxis: bad axis order"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
if (pj_param(P->ctx, P->params, "tangularunits").i) {
diff --git a/src/conversions/set.cpp b/src/conversions/set.cpp
index 2f30bda8..3db6db10 100644
--- a/src/conversions/set.cpp
+++ b/src/conversions/set.cpp
@@ -42,7 +42,7 @@ PJ *OPERATION(set, 0) {
auto set = static_cast<struct Set*>(calloc (1, sizeof(struct Set)));
P->opaque = set;
if (nullptr==P->opaque)
- return pj_default_destructor(P, ENOMEM);
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
if (pj_param_exists(P->params, "v_1"))
{
diff --git a/src/conversions/topocentric.cpp b/src/conversions/topocentric.cpp
index f6f328ad..4f563d9f 100644
--- a/src/conversions/topocentric.cpp
+++ b/src/conversions/topocentric.cpp
@@ -78,7 +78,7 @@ PJ *CONVERSION(topocentric,1) {
/*********************************************************************/
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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 = static_cast<void *>(Q);
// The topocentric origin can be specified either in geocentric coordinates
@@ -97,26 +97,30 @@ PJ *CONVERSION(topocentric,1) {
const auto hash0 = pj_param_exists(P->params, "h_0");
if( !hasX0 && !hasLon0 )
{
- return pj_default_destructor(P, PJD_ERR_MISSING_ARGS);
+ proj_log_error(P, _("topocentric: missing X_0 or lon_0"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
if ( (hasX0 || hasY0 || hasZ0) &&
(hasLon0 || hasLat0 || hash0) )
{
- return pj_default_destructor(P, PJD_ERR_MUTUALLY_EXCLUSIVE_ARGS);
+ proj_log_error(P, _("topocentric: (X_0,Y_0,Z_0) and (lon_0,lat_0,h_0) are mutually exclusive"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS);
}
if( hasX0 && (!hasY0 || !hasZ0) )
{
- return pj_default_destructor(P, PJD_ERR_MISSING_ARGS);
+ proj_log_error(P, _("topocentric: missing Y_0 and/or Z_0"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
if( hasLon0 && !hasLat0 ) // allow missing h_0
{
- return pj_default_destructor(P, PJD_ERR_MISSING_ARGS);
+ proj_log_error(P, _("topocentric: missing lat_0"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
// Pass a dummy ellipsoid definition that will be overridden just afterwards
PJ* cart = proj_create(P->ctx, "+proj=cart +a=1");
if (cart == nullptr)
- return pj_default_destructor(P, ENOMEM);
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
/* inherit ellipsoid definition from P to cart */
pj_inherit_ellipsoid_def (P, cart);
diff --git a/src/conversions/unitconvert.cpp b/src/conversions/unitconvert.cpp
index 61bccbf1..fec8caac 100644
--- a/src/conversions/unitconvert.cpp
+++ b/src/conversions/unitconvert.cpp
@@ -443,7 +443,7 @@ PJ *CONVERSION(unitconvert,0) {
int z_out_is_linear = -1; /* unknown */
if (nullptr==Q)
- return pj_default_destructor (P, ENOMEM);
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
P->opaque = (void *) Q;
P->fwd4d = forward_4d;
@@ -473,7 +473,10 @@ PJ *CONVERSION(unitconvert,0) {
} else {
f = pj_param (P->ctx, P->params, "dxy_in").f;
if (f == 0.0 || 1.0 / f == 0.0)
- return pj_default_destructor(P, PJD_ERR_UNKNOWN_UNIT_ID);
+ {
+ proj_log_error(P, _("unitconvert: unknown xy_in unit"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
}
Q->xy_factor = f;
if (normalized_name != nullptr) {
@@ -492,7 +495,10 @@ PJ *CONVERSION(unitconvert,0) {
} else {
f = pj_param (P->ctx, P->params, "dxy_out").f;
if (f == 0.0 || 1.0 / f == 0.0)
- return pj_default_destructor(P, PJD_ERR_UNKNOWN_UNIT_ID);
+ {
+ proj_log_error(P, _("unitconvert: unknown xy_out unit"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
}
Q->xy_factor /= f;
if (normalized_name != nullptr) {
@@ -505,8 +511,8 @@ PJ *CONVERSION(unitconvert,0) {
if( xy_in_is_linear >= 0 && xy_out_is_linear >= 0 &&
xy_in_is_linear != xy_out_is_linear ) {
- proj_log_debug(P, "inconsistent unit type between xy_in and xy_out");
- return pj_default_destructor(P, PJD_ERR_INCONSISTENT_UNIT);
+ proj_log_error(P, _("unitconvert: inconsistent unit type between xy_in and xy_out"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
if ((name = pj_param (P->ctx, P->params, "sz_in").s) != nullptr) {
@@ -517,7 +523,10 @@ PJ *CONVERSION(unitconvert,0) {
} else {
f = pj_param (P->ctx, P->params, "dz_in").f;
if (f == 0.0 || 1.0 / f == 0.0)
- return pj_default_destructor(P, PJD_ERR_UNKNOWN_UNIT_ID);
+ {
+ proj_log_error(P, _("unitconvert: unknown z_in unit"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
}
Q->z_factor = f;
}
@@ -530,21 +539,28 @@ PJ *CONVERSION(unitconvert,0) {
} else {
f = pj_param (P->ctx, P->params, "dz_out").f;
if (f == 0.0 || 1.0 / f == 0.0)
- return pj_default_destructor(P, PJD_ERR_UNKNOWN_UNIT_ID);
+ {
+ proj_log_error(P, _("unitconvert: unknown z_out unit"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
}
Q->z_factor /= f;
}
if( z_in_is_linear >= 0 && z_out_is_linear >= 0 &&
z_in_is_linear != z_out_is_linear ) {
- proj_log_debug(P, "inconsistent unit type between z_in and z_out");
- return pj_default_destructor(P, PJD_ERR_INCONSISTENT_UNIT);
+ proj_log_error(P, _("unitconvert: inconsistent unit type between z_in and z_out"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
if ((name = pj_param (P->ctx, P->params, "st_in").s) != nullptr) {
for (i = 0; (s = time_units[i].id) && strcmp(name, s) ; ++i);
- if (!s) return pj_default_destructor(P, PJD_ERR_UNKNOWN_UNIT_ID); /* unknown unit conversion id */
+ if (!s)
+ {
+ proj_log_error(P, _("unitconvert: unknown t_in unit"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
Q->t_in_id = i;
proj_log_trace(P, "t_in unit: %s", time_units[i].name);
@@ -554,7 +570,11 @@ PJ *CONVERSION(unitconvert,0) {
if ((name = pj_param (P->ctx, P->params, "st_out").s) != nullptr) {
for (i = 0; (s = time_units[i].id) && strcmp(name, s) ; ++i);
- if (!s) return pj_default_destructor(P, PJD_ERR_UNKNOWN_UNIT_ID); /* unknown unit conversion id */
+ if (!s)
+ {
+ proj_log_error(P, _("unitconvert: unknown t_out unit"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
Q->t_out_id = i;
proj_log_trace(P, "t_out unit: %s", time_units[i].name);
diff --git a/src/datum_set.cpp b/src/datum_set.cpp
index 3f612633..e7853a53 100644
--- a/src/datum_set.cpp
+++ b/src/datum_set.cpp
@@ -25,7 +25,6 @@
* DEALINGS IN THE SOFTWARE.
*****************************************************************************/
-#include <errno.h>
#include <string.h>
#include "proj.h"
@@ -71,7 +70,8 @@ int pj_datum_set(PJ_CONTEXT *ctx, paralist *pl, PJ *projdef)
for (i = 0; (s = pj_datums[i].id) && strcmp(name, s) ; ++i) {}
if (!s) {
- proj_context_errno_set(ctx, PJD_ERR_UNKNOWN_ELLP_PARAM);
+ pj_log (ctx, PJ_LOG_ERROR, _("Unknown value for datum"));
+ proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
return 1;
}
@@ -87,7 +87,7 @@ int pj_datum_set(PJ_CONTEXT *ctx, paralist *pl, PJ *projdef)
auto param = pj_mkparam(entry);
if (nullptr == param)
{
- proj_context_errno_set(ctx, ENOMEM);
+ proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP /*ENOMEM*/);
return 1;
}
curr->next = param;
@@ -99,7 +99,7 @@ int pj_datum_set(PJ_CONTEXT *ctx, paralist *pl, PJ *projdef)
auto param = pj_mkparam(pj_datums[i].defn);
if (nullptr == param)
{
- proj_context_errno_set(ctx, ENOMEM);
+ proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP /*ENOMEM*/);
return 1;
}
curr->next = param;
diff --git a/src/dmstor.cpp b/src/dmstor.cpp
index 24887a11..4c7408cf 100644
--- a/src/dmstor.cpp
+++ b/src/dmstor.cpp
@@ -61,7 +61,7 @@ dmstor_ctx(PJ_CONTEXT *ctx, const char *is, char **rs) {
n = 2; break;
case 'r': case 'R':
if (nl) {
- proj_context_errno_set( ctx, PJD_ERR_WRONG_FORMAT_DMS_VALUE );
+ proj_context_errno_set( ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE );
return HUGE_VAL;
}
++s;
@@ -73,7 +73,7 @@ dmstor_ctx(PJ_CONTEXT *ctx, const char *is, char **rs) {
continue;
}
if (n < nl) {
- proj_context_errno_set( ctx, PJD_ERR_WRONG_FORMAT_DMS_VALUE );
+ proj_context_errno_set( ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE );
return HUGE_VAL;
}
v += tv * vm[n];
diff --git a/src/ell_set.cpp b/src/ell_set.cpp
index afa962c5..a3e7d650 100644
--- a/src/ell_set.cpp
+++ b/src/ell_set.cpp
@@ -1,6 +1,5 @@
/* set ellipsoid parameters a and es */
-#include <errno.h>
#include <math.h>
#include <stddef.h>
#include <string.h>
@@ -147,23 +146,29 @@ static int ellps_ellps (PJ *P) {
/* Then look up the right size and shape parameters from the builtin list */
if (strlen (par->param) < 7)
- return proj_errno_set (P, PJD_ERR_INVALID_ARG);
+ {
+ proj_log_error(P, _("Invalid value for +ellps"));
+ return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
name = par->param + 6;
ellps = pj_find_ellps (name);
if (nullptr==ellps)
- return proj_errno_set (P, PJD_ERR_UNKNOWN_ELLP_PARAM);
+ {
+ proj_log_error(P, _("Unrecognized value for +ellps"));
+ return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
/* Now, get things ready for ellps_size/ellps_shape, make them do their thing */
err = proj_errno_reset (P);
paralist* new_params = pj_mkparam (ellps->major);
if (nullptr == new_params)
- return proj_errno_set (P, ENOMEM);
+ return proj_errno_set (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
new_params->next = pj_mkparam (ellps->ell);
if (nullptr == new_params->next)
{
free(new_params);
- return proj_errno_set (P, ENOMEM);
+ return proj_errno_set (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
}
paralist* old_params = P->params;
P->params = new_params;
@@ -207,15 +212,26 @@ static int ellps_size (PJ *P) {
if (nullptr==par)
par = pj_get_param (P->params, "a");
if (nullptr==par)
- return a_was_set? 0: proj_errno_set (P, PJD_ERR_MAJOR_AXIS_NOT_GIVEN);
+ {
+ if( a_was_set )
+ return 0;
+ proj_log_error(P, _("Major axis not given"));
+ return proj_errno_set (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
+ }
P->def_size = pj_strdup(par->param);
par->used = 1;
P->a = pj_atof (pj_param_value (par));
if (P->a <= 0)
- return proj_errno_set (P, PJD_ERR_MAJOR_AXIS_NOT_GIVEN);
+ {
+ proj_log_error(P, _("Invalid value for major axis"));
+ return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
if (HUGE_VAL==P->a)
- return proj_errno_set (P, PJD_ERR_MAJOR_AXIS_NOT_GIVEN);
+ {
+ proj_log_error(P, _("Invalid value for major axis"));
+ return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
if ('R'==par->param[0]) {
P->es = P->f = P->e = P->rf = 0;
@@ -264,10 +280,11 @@ static int ellps_shape (PJ *P) {
/* reverse flattening, rf */
case 0:
P->rf = pj_atof (pj_param_value (par));
- if (HUGE_VAL==P->rf)
- return proj_errno_set (P, PJD_ERR_INVALID_ARG);
- if (0==P->rf)
- return proj_errno_set (P, PJD_ERR_REV_FLATTENING_IS_ZERO);
+ if (HUGE_VAL==P->rf || P->rf <= 0)
+ {
+ proj_log_error(P, _("Invalid value for rf. Should be > 0"));
+ return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
P->f = 1 / P->rf;
P->es = 2*P->f - P->f*P->f;
break;
@@ -275,8 +292,11 @@ static int ellps_shape (PJ *P) {
/* flattening, f */
case 1:
P->f = pj_atof (pj_param_value (par));
- if (HUGE_VAL==P->f)
- return proj_errno_set (P, PJD_ERR_INVALID_ARG);
+ if (HUGE_VAL==P->f || P->f < 0)
+ {
+ proj_log_error(P, _("Invalid value for f. Should be >= 0"));
+ return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
P->rf = P->f != 0.0 ? 1.0/P->f: HUGE_VAL;
P->es = 2*P->f - P->f*P->f;
@@ -285,42 +305,49 @@ static int ellps_shape (PJ *P) {
/* eccentricity squared, es */
case 2:
P->es = pj_atof (pj_param_value (par));
- if (HUGE_VAL==P->es)
- return proj_errno_set (P, PJD_ERR_INVALID_ARG);
- if (P->es >= 1)
- return proj_errno_set (P, PJD_ERR_INVALID_ECCENTRICITY);
+ if (HUGE_VAL==P->es || P->es < 0 || P->es >= 1)
+ {
+ proj_log_error(P, _("Invalid value for es. Should be in [0,1[ range"));
+ return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
break;
/* eccentricity, e */
case 3:
P->e = pj_atof (pj_param_value (par));
- if (HUGE_VAL==P->e)
- return proj_errno_set (P, PJD_ERR_INVALID_ARG);
- if (P->e < 0 || P->e >= 1)
- return proj_errno_set (P, PJD_ERR_INVALID_ECCENTRICITY);
+ if (HUGE_VAL==P->e || P->e < 0 || P->e >= 1)
+ {
+ proj_log_error(P, _("Invalid value for e. Should be in [0,1[ range"));
+ return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
P->es = P->e * P->e;
break;
/* semiminor axis, b */
case 4:
P->b = pj_atof (pj_param_value (par));
- if (HUGE_VAL==P->b)
- return proj_errno_set (P, PJD_ERR_INVALID_ARG);
- if (P->b <= 0)
- return proj_errno_set (P, PJD_ERR_INVALID_ECCENTRICITY);
+ if (HUGE_VAL==P->b || P->b <= 0)
+ {
+ proj_log_error(P, _("Invalid value for b. Should be > 0"));
+ return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
if (P->b==P->a)
break;
P->f = (P->a - P->b) / P->a;
P->es = 2*P->f - P->f*P->f;
break;
default:
- return PJD_ERR_INVALID_ARG;
+ // shouldn't happen
+ return PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE;
}
// Written that way to catch NaN
if (!(P->es >= 0))
- return proj_errno_set (P, PJD_ERR_ES_LESS_THAN_ZERO);
+ {
+ proj_log_error(P, _("Invalid eccentricity"));
+ return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
return 0;
}
@@ -384,7 +411,7 @@ static int ellps_spherification (PJ *P) {
/* R_h - a sphere with R = the harmonic mean of the ellipsoid */
case 4:
if (P->a + P->b == 0)
- return proj_errno_set (P, PJD_ERR_TOLERANCE_CONDITION);
+ return proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
P->a = (2*P->a * P->b) / (P->a + P->b);
break;
@@ -395,11 +422,15 @@ static int ellps_spherification (PJ *P) {
v = pj_param_value (par);
t = proj_dmstor (v, &endp);
if (fabs (t) > M_HALFPI)
- return proj_errno_set (P, PJD_ERR_REF_RAD_LARGER_THAN_90);
+ {
+ proj_log_error(P, _("Invalid value for lat_g. |lat_g| should be <= 90°"));
+ return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
t = sin (t);
t = 1 - P->es * t * t;
if (t == 0.) {
- return proj_errno_set(P, PJD_ERR_INVALID_ECCENTRICITY);
+ proj_log_error(P, _("Invalid eccentricity"));
+ return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
if (i==5) /* arithmetic */
P->a *= (1. - P->es + t) / (2 * t * sqrt(t));
@@ -409,7 +440,8 @@ static int ellps_spherification (PJ *P) {
}
if (P->a <= 0.) {
- return proj_errno_set(P, PJD_ERR_MAJOR_AXIS_NOT_GIVEN);
+ proj_log_error(P, _("Invalid or missing major axis"));
+ return proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
/* Clean up the ellipsoidal parameters to reflect the sphere */
@@ -552,8 +584,9 @@ int pj_calc_ellipsoid_params (PJ *P, double a, double es) {
if (0==P->f)
P->f = 1 - cos (P->alpha); /* = 1 - sqrt (1 - PIN->es); */
if (P->f == 1.0) {
- proj_context_errno_set( P->ctx, PJD_ERR_INVALID_ECCENTRICITY);
- return PJD_ERR_INVALID_ECCENTRICITY;
+ proj_log_error(P, _("Invalid eccentricity"));
+ proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ return PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE;
}
P->rf = P->f != 0.0 ? 1.0/P->f: HUGE_VAL;
@@ -573,8 +606,9 @@ int pj_calc_ellipsoid_params (PJ *P, double a, double es) {
P->one_es = 1. - P->es;
if (P->one_es == 0.) {
- proj_context_errno_set( P->ctx, PJD_ERR_INVALID_ECCENTRICITY);
- return PJD_ERR_INVALID_ECCENTRICITY;
+ proj_log_error(P, _("Invalid eccentricity"));
+ proj_errno_set (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ return PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE;
}
P->rone_es = 1./P->one_es;
diff --git a/src/factors.cpp b/src/factors.cpp
index ff733d07..d6c24f01 100644
--- a/src/factors.cpp
+++ b/src/factors.cpp
@@ -36,8 +36,15 @@ int pj_factors(PJ_LP lp, const PJ *P, double h, struct FACTORS *fac) {
fac->code = 0;
/* Check for latitude or longitude overange */
- if ((fabs (lp.phi)-M_HALFPI) > EPS || fabs (lp.lam) > 10.) {
- proj_errno_set (P, PJD_ERR_LAT_OR_LON_EXCEED_LIMIT);
+ if ((fabs (lp.phi)-M_HALFPI) > EPS )
+ {
+ proj_log_error(P, _("Invalid latitude"));
+ proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_INVALID_COORD);
+ return 1;
+ }
+ if( fabs (lp.lam) > 10.) {
+ proj_log_error(P, _("Invalid longitude"));
+ proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_INVALID_COORD);
return 1;
}
@@ -62,7 +69,8 @@ int pj_factors(PJ_LP lp, const PJ *P, double h, struct FACTORS *fac) {
/* Derivatives */
if (pj_deriv (lp, h, P, &(fac->der))) {
- proj_errno_set (P, PJD_ERR_LAT_OR_LON_EXCEED_LIMIT);
+ proj_log_error(P, _("Invalid latitude or longitude"));
+ proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_INVALID_COORD);
return 1;
}
diff --git a/src/fwd.cpp b/src/fwd.cpp
index 962a5051..97ba5999 100644
--- a/src/fwd.cpp
+++ b/src/fwd.cpp
@@ -52,10 +52,19 @@ static PJ_COORD fwd_prepare (PJ *P, PJ_COORD coo) {
/* check for latitude or longitude over-range */
t = (coo.lp.phi < 0 ? -coo.lp.phi : coo.lp.phi) - M_HALFPI;
- if (t > PJ_EPS_LAT || coo.lp.lam > 10 || coo.lp.lam < -10) {
- proj_errno_set (P, PJD_ERR_LAT_OR_LON_EXCEED_LIMIT);
+ if (t > PJ_EPS_LAT)
+ {
+ proj_log_error(P, _("Invalid latitude"));
+ proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_INVALID_COORD);
return proj_coord_error ();
}
+ if (coo.lp.lam > 10 || coo.lp.lam < -10)
+ {
+ proj_log_error(P, _("Invalid longitude"));
+ proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_INVALID_COORD);
+ return proj_coord_error ();
+ }
+
/* Clamp latitude to -90..90 degree range */
if (coo.lp.phi > M_HALFPI)
@@ -186,7 +195,7 @@ PJ_XY pj_fwd(PJ_LP lp, PJ *P) {
else if (P->fwd4d)
coo = P->fwd4d (coo, P);
else {
- proj_errno_set (P, EINVAL);
+ proj_errno_set (P, PROJ_ERR_OTHER_NO_INVERSE_OP);
return proj_coord_error ().xy;
}
if (HUGE_VAL==coo.v[0])
@@ -220,7 +229,7 @@ PJ_XYZ pj_fwd3d(PJ_LPZ lpz, PJ *P) {
else if (P->fwd)
coo.xy = P->fwd (coo.lp, P);
else {
- proj_errno_set (P, EINVAL);
+ proj_errno_set (P, PROJ_ERR_OTHER_NO_INVERSE_OP);
return proj_coord_error ().xyz;
}
if (HUGE_VAL==coo.v[0])
@@ -250,7 +259,7 @@ PJ_COORD pj_fwd4d (PJ_COORD coo, PJ *P) {
else if (P->fwd)
coo.xy = P->fwd (coo.lp, P);
else {
- proj_errno_set (P, EINVAL);
+ proj_errno_set (P, PROJ_ERR_OTHER_NO_INVERSE_OP);
return proj_coord_error ();
}
if (HUGE_VAL==coo.v[0])
diff --git a/src/gauss.cpp b/src/gauss.cpp
index 96bd5166..07d0433a 100644
--- a/src/gauss.cpp
+++ b/src/gauss.cpp
@@ -109,6 +109,6 @@ PJ_LP pj_inv_gauss(PJ_CONTEXT *ctx, PJ_LP slp, const void *data) {
}
/* convergence failed */
if (!i)
- proj_context_errno_set(ctx, PJD_ERR_NON_CONV_INV_MERI_DIST);
+ proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return (elp);
}
diff --git a/src/generic_inverse.cpp b/src/generic_inverse.cpp
index ddd5060b..41cf6c50 100644
--- a/src/generic_inverse.cpp
+++ b/src/generic_inverse.cpp
@@ -109,6 +109,7 @@ PJ_LP pj_generic_inverse_2d(PJ_XY xy, PJ *P, PJ_LP lpInitial) {
lp.phi = M_HALFPI;
}
}
- proj_context_errno_set(P->ctx, PJD_ERR_NON_CONVERGENT);
+ proj_context_errno_set(P->ctx,
+ PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
diff --git a/src/grids.cpp b/src/grids.cpp
index 871e21ed..fb5966eb 100644
--- a/src/grids.cpp
+++ b/src/grids.cpp
@@ -197,7 +197,9 @@ GTXVerticalShiftGrid *GTXVerticalShiftGrid::open(PJ_CONTEXT *ctx,
/* Read the header. */
/* -------------------------------------------------------------------- */
if (fp->read(header, sizeof(header)) != sizeof(header)) {
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ pj_log(ctx, PJ_LOG_ERROR, _("Cannot read grid header"));
+ proj_context_errno_set(ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return nullptr;
}
@@ -222,8 +224,9 @@ GTXVerticalShiftGrid *GTXVerticalShiftGrid::open(PJ_CONTEXT *ctx,
if (xorigin < -360 || xorigin > 360 || yorigin < -90 || yorigin > 90) {
pj_log(ctx, PJ_LOG_ERROR,
- "gtx file header has invalid extents, corrupt?");
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ _("gtx file header has invalid extents, corrupt?"));
+ proj_context_errno_set(ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return nullptr;
}
@@ -258,7 +261,8 @@ bool GTXVerticalShiftGrid::valueAt(int x, int y, float &out) const {
m_fp->seek(40 + sizeof(float) * (y * m_width + x));
if (m_fp->read(&out, sizeof(out)) != sizeof(out)) {
- proj_context_errno_set(m_ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(m_ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return false;
}
if (IS_LSB) {
@@ -621,7 +625,7 @@ bool GTiffGrid::valueAt(uint16 sample, int x, int yFromBottom,
try {
m_buffer.resize(blockSize);
} catch (const std::exception &e) {
- pj_log(m_ctx, PJ_LOG_ERROR, "Exception %s", e.what());
+ pj_log(m_ctx, PJ_LOG_ERROR, _("Exception %s"), e.what());
return false;
}
}
@@ -642,7 +646,7 @@ bool GTiffGrid::valueAt(uint16 sample, int x, int yFromBottom,
m_cache.insert(m_ifdIdx, blockId, m_buffer);
} catch (const std::exception &e) {
// Should normally not happen
- pj_log(m_ctx, PJ_LOG_ERROR, "Exception %s", e.what());
+ pj_log(m_ctx, PJ_LOG_ERROR, _("Exception %s"), e.what());
}
}
@@ -847,35 +851,35 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() {
TIFFGetField(m_hTIFF, TIFFTAG_IMAGEWIDTH, &width);
TIFFGetField(m_hTIFF, TIFFTAG_IMAGELENGTH, &height);
if (width == 0 || height == 0 || width > INT_MAX || height > INT_MAX) {
- pj_log(m_ctx, PJ_LOG_ERROR, "Invalid image size");
+ pj_log(m_ctx, PJ_LOG_ERROR, _("Invalid image size"));
return nullptr;
}
uint16 samplesPerPixel = 0;
if (!TIFFGetField(m_hTIFF, TIFFTAG_SAMPLESPERPIXEL, &samplesPerPixel)) {
- pj_log(m_ctx, PJ_LOG_ERROR, "Missing SamplesPerPixel tag");
+ pj_log(m_ctx, PJ_LOG_ERROR, _("Missing SamplesPerPixel tag"));
return nullptr;
}
if (samplesPerPixel == 0) {
- pj_log(m_ctx, PJ_LOG_ERROR, "Invalid SamplesPerPixel value");
+ pj_log(m_ctx, PJ_LOG_ERROR, _("Invalid SamplesPerPixel value"));
return nullptr;
}
uint16 bitsPerSample = 0;
if (!TIFFGetField(m_hTIFF, TIFFTAG_BITSPERSAMPLE, &bitsPerSample)) {
- pj_log(m_ctx, PJ_LOG_ERROR, "Missing BitsPerSample tag");
+ pj_log(m_ctx, PJ_LOG_ERROR, _("Missing BitsPerSample tag"));
return nullptr;
}
uint16 planarConfig = 0;
if (!TIFFGetField(m_hTIFF, TIFFTAG_PLANARCONFIG, &planarConfig)) {
- pj_log(m_ctx, PJ_LOG_ERROR, "Missing PlanarConfig tag");
+ pj_log(m_ctx, PJ_LOG_ERROR, _("Missing PlanarConfig tag"));
return nullptr;
}
uint16 sampleFormat = 0;
if (!TIFFGetField(m_hTIFF, TIFFTAG_SAMPLEFORMAT, &sampleFormat)) {
- pj_log(m_ctx, PJ_LOG_ERROR, "Missing SampleFormat tag");
+ pj_log(m_ctx, PJ_LOG_ERROR, _("Missing SampleFormat tag"));
return nullptr;
}
@@ -893,9 +897,8 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() {
else if (sampleFormat == SAMPLEFORMAT_IEEEFP && bitsPerSample == 64)
dt = TIFFDataType::Float64;
else {
- pj_log(
- m_ctx, PJ_LOG_ERROR,
- "Unsupported combination of SampleFormat and BitsPerSample values");
+ pj_log(m_ctx, PJ_LOG_ERROR, _("Unsupported combination of SampleFormat "
+ "and BitsPerSample values"));
return nullptr;
}
@@ -903,7 +906,7 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() {
if (!TIFFGetField(m_hTIFF, TIFFTAG_PHOTOMETRIC, &photometric))
photometric = PHOTOMETRIC_MINISBLACK;
if (photometric != PHOTOMETRIC_MINISBLACK) {
- pj_log(m_ctx, PJ_LOG_ERROR, "Unsupported Photometric value");
+ pj_log(m_ctx, PJ_LOG_ERROR, _("Unsupported Photometric value"));
return nullptr;
}
@@ -914,19 +917,19 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() {
if (compression != COMPRESSION_NONE &&
!TIFFIsCODECConfigured(compression)) {
pj_log(m_ctx, PJ_LOG_ERROR,
- "Cannot open TIFF file due to missing codec.");
+ _("Cannot open TIFF file due to missing codec."));
return nullptr;
}
// We really don't want to try dealing with old-JPEG images
if (compression == COMPRESSION_OJPEG) {
- pj_log(m_ctx, PJ_LOG_ERROR, "Unsupported compression method.");
+ pj_log(m_ctx, PJ_LOG_ERROR, _("Unsupported compression method."));
return nullptr;
}
const auto blockSize = TIFFIsTiled(m_hTIFF) ? TIFFTileSize64(m_hTIFF)
: TIFFStripSize64(m_hTIFF);
if (blockSize == 0 || blockSize > 64 * 1024 * 2014) {
- pj_log(m_ctx, PJ_LOG_ERROR, "Unsupported block size.");
+ pj_log(m_ctx, PJ_LOG_ERROR, _("Unsupported block size."));
return nullptr;
}
@@ -942,12 +945,12 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() {
} else {
if (count < 4 || (count % 4) != 0) {
pj_log(m_ctx, PJ_LOG_ERROR,
- "Wrong number of values in GeoKeys tag");
+ _("Wrong number of values in GeoKeys tag"));
return nullptr;
}
if (geokeys[0] != 1) {
- pj_log(m_ctx, PJ_LOG_ERROR, "Unsupported GeoTIFF major version");
+ pj_log(m_ctx, PJ_LOG_ERROR, _("Unsupported GeoTIFF major version"));
return nullptr;
}
// We only know that we support GeoTIFF 1.0 and 1.1 at that time
@@ -971,9 +974,9 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() {
extent.isGeographic = false;
} else if (geokeys[i + 3] != ModelTypeGeographic) {
pj_log(m_ctx, PJ_LOG_ERROR,
- "Only GTModelTypeGeoKey = "
- "ModelTypeGeographic or ModelTypeProjected are "
- "supported");
+ _("Only GTModelTypeGeoKey = "
+ "ModelTypeGeographic or ModelTypeProjected are "
+ "supported"));
return nullptr;
}
} else if (geokeys[i] == GTRasterTypeGeoKey) {
@@ -996,8 +999,8 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() {
// a GeoTransformationMatrix, since negative values in GeoPixelScale
// have historically been implementation bugs.
if (matrix[1] != 0 || matrix[4] != 0) {
- pj_log(m_ctx, PJ_LOG_ERROR, "Rotational terms not supported in "
- "GeoTransformationMatrix tag");
+ pj_log(m_ctx, PJ_LOG_ERROR, _("Rotational terms not supported in "
+ "GeoTransformationMatrix tag"));
return nullptr;
}
@@ -1009,12 +1012,12 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() {
double *geopixelscale = nullptr;
if (TIFFGetField(m_hTIFF, TIFFTAG_GEOPIXELSCALE, &count,
&geopixelscale) != 1) {
- pj_log(m_ctx, PJ_LOG_ERROR, "No GeoPixelScale tag");
+ pj_log(m_ctx, PJ_LOG_ERROR, _("No GeoPixelScale tag"));
return nullptr;
}
if (count != 3) {
pj_log(m_ctx, PJ_LOG_ERROR,
- "Wrong number of values in GeoPixelScale tag");
+ _("Wrong number of values in GeoPixelScale tag"));
return nullptr;
}
hRes = geopixelscale[0];
@@ -1023,12 +1026,12 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() {
double *geotiepoints = nullptr;
if (TIFFGetField(m_hTIFF, TIFFTAG_GEOTIEPOINTS, &count,
&geotiepoints) != 1) {
- pj_log(m_ctx, PJ_LOG_ERROR, "No GeoTiePoints tag");
+ pj_log(m_ctx, PJ_LOG_ERROR, _("No GeoTiePoints tag"));
return nullptr;
}
if (count != 6) {
pj_log(m_ctx, PJ_LOG_ERROR,
- "Wrong number of values in GeoTiePoints tag");
+ _("Wrong number of values in GeoTiePoints tag"));
return nullptr;
}
@@ -1059,7 +1062,7 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() {
fabs(extent.south) <= M_PI + 1e-5)) &&
extent.west < extent.east && extent.south < extent.north &&
extent.resX > 1e-10 && extent.resY > 1e-10)) {
- pj_log(m_ctx, PJ_LOG_ERROR, "Inconsistent georeferencing for %s",
+ pj_log(m_ctx, PJ_LOG_ERROR, _("Inconsistent georeferencing for %s"),
m_filename.c_str());
return nullptr;
}
@@ -1279,7 +1282,7 @@ GTiffVGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
const auto subfileType = grid->subfileType();
if (subfileType != 0 && subfileType != FILETYPE_PAGE) {
if (ifd == 0) {
- pj_log(ctx, PJ_LOG_ERROR, "Invalid subfileType");
+ pj_log(ctx, PJ_LOG_ERROR, _("Invalid subfileType"));
return nullptr;
} else {
pj_log(ctx, PJ_LOG_DEBUG_MAJOR,
@@ -1325,7 +1328,7 @@ GTiffVGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
}
if (idxSample >= grid->samplesPerPixel()) {
- pj_log(ctx, PJ_LOG_ERROR, "Invalid sample index");
+ pj_log(ctx, PJ_LOG_ERROR, _("Invalid sample index"));
return nullptr;
}
@@ -1389,16 +1392,17 @@ VerticalShiftGridSet::open(PJ_CONTEXT *ctx, const std::string &filename) {
auto set = std::unique_ptr<VerticalShiftGridSet>(
GTiffVGridShiftSet::open(ctx, std::move(fp), actualName));
if (!set)
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(
+ ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return set;
#else
pj_log(ctx, PJ_LOG_ERROR,
- "TIFF grid, but TIFF support disabled in this build");
+ _("TIFF grid, but TIFF support disabled in this build"));
return nullptr;
#endif
}
- pj_log(ctx, PJ_LOG_DEBUG_MAJOR, "Unrecognized vertical grid format");
+ pj_log(ctx, PJ_LOG_ERROR, _("Unrecognized vertical grid format"));
return nullptr;
}
@@ -1570,7 +1574,8 @@ NTv1Grid *NTv1Grid::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
/* Read the header. */
/* -------------------------------------------------------------------- */
if (fp->read(header, sizeof(header)) != sizeof(header)) {
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return nullptr;
}
@@ -1589,8 +1594,9 @@ NTv1Grid *NTv1Grid::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
if (*((int *)(header + 8)) != 12) {
pj_log(ctx, PJ_LOG_ERROR,
- "NTv1 grid shift file has wrong record count, corrupt?");
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ _("NTv1 grid shift file has wrong record count, corrupt?"));
+ proj_context_errno_set(ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return nullptr;
}
@@ -1607,9 +1613,10 @@ NTv1Grid *NTv1Grid::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
fabs(extent.south) <= M_PI + 1e-5 && extent.west < extent.east &&
extent.south < extent.north && extent.resX > 1e-10 &&
extent.resY > 1e-10)) {
- pj_log(ctx, PJ_LOG_ERROR, "Inconsistent georeferencing for %s",
+ pj_log(ctx, PJ_LOG_ERROR, _("Inconsistent georeferencing for %s"),
filename.c_str());
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return nullptr;
}
const int columns = static_cast<int>(
@@ -1631,7 +1638,8 @@ bool NTv1Grid::valueAt(int x, int y, bool compensateNTConvention,
m_fp->seek(192 + 2 * sizeof(double) * (y * m_width + m_width - 1 - x));
if (m_fp->read(&two_doubles[0], sizeof(two_doubles)) !=
sizeof(two_doubles)) {
- proj_context_errno_set(m_ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(m_ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return false;
}
if (IS_LSB) {
@@ -1692,7 +1700,8 @@ CTable2Grid *CTable2Grid::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
/* Read the header. */
/* -------------------------------------------------------------------- */
if (fp->read(header, sizeof(header)) != sizeof(header)) {
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return nullptr;
}
@@ -1716,9 +1725,10 @@ CTable2Grid *CTable2Grid::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
memcpy(&extent.resY, header + 120, 8);
if (!(fabs(extent.west) <= 4 * M_PI && fabs(extent.south) <= M_PI + 1e-5 &&
extent.resX > 1e-10 && extent.resY > 1e-10)) {
- pj_log(ctx, PJ_LOG_ERROR, "Inconsistent georeferencing for %s",
+ pj_log(ctx, PJ_LOG_ERROR, _("Inconsistent georeferencing for %s"),
filename.c_str());
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return nullptr;
}
int width;
@@ -1726,7 +1736,8 @@ CTable2Grid *CTable2Grid::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
memcpy(&width, header + 128, 4);
memcpy(&height, header + 132, 4);
if (width <= 0 || height <= 0) {
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return nullptr;
}
extent.east = extent.west + (width - 1) * extent.resX;
@@ -1744,7 +1755,8 @@ bool CTable2Grid::valueAt(int x, int y, bool compensateNTConvention,
float two_floats[2];
m_fp->seek(160 + 2 * sizeof(float) * (y * m_width + x));
if (m_fp->read(&two_floats[0], sizeof(two_floats)) != sizeof(two_floats)) {
- proj_context_errno_set(m_ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(m_ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return false;
}
if (!IS_LSB) {
@@ -1828,7 +1840,8 @@ bool NTv2Grid::valueAt(int x, int y, bool compensateNTConvention,
4 * sizeof(float) *
(static_cast<unsigned long long>(y) * m_width + m_width - 1 - x));
if (m_fp->read(&two_float[0], sizeof(two_float)) != sizeof(two_float)) {
- proj_context_errno_set(m_ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(m_ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return false;
}
if (m_mustSwap) {
@@ -1862,14 +1875,16 @@ std::unique_ptr<NTv2GridSet> NTv2GridSet::open(PJ_CONTEXT *ctx,
/* Read the header. */
/* -------------------------------------------------------------------- */
if (fpRaw->read(header, sizeof(header)) != sizeof(header)) {
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return nullptr;
}
constexpr int OFFSET_GS_TYPE = 56;
if (memcmp(header + OFFSET_GS_TYPE, "SECONDS", 7) != 0) {
- pj_log(ctx, PJ_LOG_ERROR, "Only GS_TYPE=SECONDS is supported");
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ pj_log(ctx, PJ_LOG_ERROR, _("Only GS_TYPE=SECONDS is supported"));
+ proj_context_errno_set(ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return nullptr;
}
@@ -1899,12 +1914,14 @@ std::unique_ptr<NTv2GridSet> NTv2GridSet::open(PJ_CONTEXT *ctx,
for (unsigned subfile = 0; subfile < num_subfiles; subfile++) {
// Read header
if (fpRaw->read(header, sizeof(header)) != sizeof(header)) {
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(
+ ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return nullptr;
}
if (strncmp(header, "SUB_NAME", 8) != 0) {
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(
+ ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return nullptr;
}
@@ -1944,9 +1961,10 @@ std::unique_ptr<NTv2GridSet> NTv2GridSet::open(PJ_CONTEXT *ctx,
fabs(extent.south) <= M_PI + 1e-5 && extent.west < extent.east &&
extent.south < extent.north && extent.resX > 1e-10 &&
extent.resY > 1e-10)) {
- pj_log(ctx, PJ_LOG_ERROR, "Inconsistent georeferencing for %s",
+ pj_log(ctx, PJ_LOG_ERROR, _("Inconsistent georeferencing for %s"),
filename.c_str());
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(
+ ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return nullptr;
}
const int columns = static_cast<int>(
@@ -1964,9 +1982,10 @@ std::unique_ptr<NTv2GridSet> NTv2GridSet::open(PJ_CONTEXT *ctx,
memcpy(&gs_count, header + OFFSET_GS_COUNT, 4);
if (gs_count / columns != static_cast<unsigned>(rows)) {
pj_log(ctx, PJ_LOG_ERROR,
- "GS_COUNT(%u) does not match expected cells (%dx%d)",
+ _("GS_COUNT(%u) does not match expected cells (%dx%d)"),
gs_count, columns, rows);
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(
+ ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return nullptr;
}
@@ -2161,11 +2180,11 @@ GTiffHGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
const auto subfileType = grid->subfileType();
if (subfileType != 0 && subfileType != FILETYPE_PAGE) {
if (ifd == 0) {
- pj_log(ctx, PJ_LOG_ERROR, "Invalid subfileType");
+ pj_log(ctx, PJ_LOG_ERROR, _("Invalid subfileType"));
return nullptr;
} else {
pj_log(ctx, PJ_LOG_DEBUG_MAJOR,
- "Ignoring IFD %d as it has a unsupported subfileType",
+ _("Ignoring IFD %d as it has a unsupported subfileType"),
ifd);
continue;
}
@@ -2174,11 +2193,12 @@ GTiffHGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
if (grid->samplesPerPixel() < 2) {
if (ifd == 0) {
pj_log(ctx, PJ_LOG_ERROR,
- "At least 2 samples per pixel needed");
+ _("At least 2 samples per pixel needed"));
return nullptr;
} else {
pj_log(ctx, PJ_LOG_DEBUG_MAJOR,
- "Ignoring IFD %d as it has not at least 2 samples", ifd);
+ _("Ignoring IFD %d as it has not at least 2 samples"),
+ ifd);
continue;
}
}
@@ -2223,19 +2243,21 @@ GTiffHGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
}
}
if (foundDescriptionForLatOffset && !foundDescriptionForLonOffset) {
- pj_log(ctx, PJ_LOG_ERROR,
- "Found latitude_offset channel, but not longitude_offset");
+ pj_log(
+ ctx, PJ_LOG_ERROR,
+ _("Found latitude_offset channel, but not longitude_offset"));
return nullptr;
} else if (foundDescriptionForLonOffset &&
!foundDescriptionForLatOffset) {
- pj_log(ctx, PJ_LOG_ERROR,
- "Found longitude_offset channel, but not latitude_offset");
+ pj_log(
+ ctx, PJ_LOG_ERROR,
+ _("Found longitude_offset channel, but not latitude_offset"));
return nullptr;
}
if (idxLatShift >= grid->samplesPerPixel() ||
idxLonShift >= grid->samplesPerPixel()) {
- pj_log(ctx, PJ_LOG_ERROR, "Invalid sample index");
+ pj_log(ctx, PJ_LOG_ERROR, _("Invalid sample index"));
return nullptr;
}
@@ -2249,7 +2271,7 @@ GTiffHGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
positiveEast = true;
} else {
pj_log(ctx, PJ_LOG_ERROR,
- "Unsupported value %s for 'positive_value'",
+ _("Unsupported value %s for 'positive_value'"),
positiveValue.c_str());
return nullptr;
}
@@ -2264,7 +2286,7 @@ GTiffHGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
grid->metadataItem("UNITTYPE", idxLonShift);
if (unitLatShift != unitLonShift) {
pj_log(ctx, PJ_LOG_ERROR,
- "Different unit for longitude and latitude offset");
+ _("Different unit for longitude and latitude offset"));
return nullptr;
}
if (!unitLatShift.empty()) {
@@ -2275,7 +2297,7 @@ GTiffHGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
} else if (unitLatShift == "degree") {
convFactorToRadian = M_PI / 180.0;
} else {
- pj_log(ctx, PJ_LOG_ERROR, "Unsupported unit %s",
+ pj_log(ctx, PJ_LOG_ERROR, _("Unsupported unit %s"),
unitLatShift.c_str());
return nullptr;
}
@@ -2367,16 +2389,17 @@ HorizontalShiftGridSet::open(PJ_CONTEXT *ctx, const std::string &filename) {
auto set = std::unique_ptr<HorizontalShiftGridSet>(
GTiffHGridShiftSet::open(ctx, std::move(fp), actualName));
if (!set)
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(
+ ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return set;
#else
pj_log(ctx, PJ_LOG_ERROR,
- "TIFF grid, but TIFF support disabled in this build");
+ _("TIFF grid, but TIFF support disabled in this build"));
return nullptr;
#endif
}
- pj_log(ctx, PJ_LOG_DEBUG_MAJOR, "Unrecognized horizontal grid format");
+ pj_log(ctx, PJ_LOG_ERROR, _("Unrecognized horizontal grid format"));
return nullptr;
}
@@ -2628,11 +2651,11 @@ GTiffGenericGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
const auto subfileType = grid->subfileType();
if (subfileType != 0 && subfileType != FILETYPE_PAGE) {
if (ifd == 0) {
- pj_log(ctx, PJ_LOG_ERROR, "Invalid subfileType");
+ pj_log(ctx, PJ_LOG_ERROR, _("Invalid subfileType"));
return nullptr;
} else {
pj_log(ctx, PJ_LOG_DEBUG_MAJOR,
- "Ignoring IFD %d as it has a unsupported subfileType",
+ _("Ignoring IFD %d as it has a unsupported subfileType"),
ifd);
continue;
}
@@ -2703,16 +2726,17 @@ GenericShiftGridSet::open(PJ_CONTEXT *ctx, const std::string &filename) {
auto set = std::unique_ptr<GenericShiftGridSet>(
GTiffGenericGridShiftSet::open(ctx, std::move(fp), actualName));
if (!set)
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(
+ ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return set;
#else
pj_log(ctx, PJ_LOG_ERROR,
- "TIFF grid, but TIFF support disabled in this build");
+ _("TIFF grid, but TIFF support disabled in this build"));
return nullptr;
#endif
}
- pj_log(ctx, PJ_LOG_DEBUG_MAJOR, "Unrecognized generic grid format");
+ pj_log(ctx, PJ_LOG_ERROR, _("Unrecognized generic grid format"));
return nullptr;
}
@@ -2785,8 +2809,9 @@ ListOfGenericGrids pj_generic_grid_init(PJ *P, const char *gridkey) {
auto gridSet = GenericShiftGridSet::open(P->ctx, gridname);
if (!gridSet) {
if (!canFail) {
- if (proj_context_errno(P->ctx) != PJD_ERR_NETWORK_ERROR) {
- proj_context_errno_set(P->ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ if (proj_context_errno(P->ctx) != PROJ_ERR_OTHER_NETWORK_ERROR) {
+ proj_context_errno_set(
+ P->ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
return {};
}
@@ -2830,8 +2855,9 @@ static ListOfHGrids getListOfGridSets(PJ_CONTEXT *ctx, const char *grids) {
auto gridSet = HorizontalShiftGridSet::open(ctx, gridname);
if (!gridSet) {
if (!canFail) {
- if (proj_context_errno(ctx) != PJD_ERR_NETWORK_ERROR) {
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ if (proj_context_errno(ctx) != PROJ_ERR_OTHER_NETWORK_ERROR) {
+ proj_context_errno_set(
+ ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
return {};
}
@@ -3067,7 +3093,7 @@ PJ_LP pj_hgrid_apply(PJ_CONTEXT *ctx, const ListOfHGrids &grids, PJ_LP lp,
HorizontalShiftGridSet *gridset = nullptr;
const auto grid = findGrid(grids, lp, gridset);
if (!grid) {
- proj_context_errno_set(ctx, PJD_ERR_GRID_AREA);
+ proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID);
return out;
}
if (grid->isNullGrid()) {
@@ -3083,7 +3109,7 @@ PJ_LP pj_hgrid_apply(PJ_CONTEXT *ctx, const ListOfHGrids &grids, PJ_LP lp,
}
if (out.lam == HUGE_VAL || out.phi == HUGE_VAL)
- proj_context_errno_set(ctx, PJD_ERR_GRID_AREA);
+ proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID);
return out;
}
@@ -3099,7 +3125,7 @@ PJ_LP pj_hgrid_value(PJ *P, const ListOfHGrids &grids, PJ_LP lp) {
HorizontalShiftGridSet *gridset = nullptr;
const auto grid = findGrid(grids, lp, gridset);
if (!grid) {
- proj_context_errno_set(P->ctx, PJD_ERR_GRID_AREA);
+ proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID);
return out;
}
@@ -3107,8 +3133,9 @@ PJ_LP pj_hgrid_value(PJ *P, const ListOfHGrids &grids, PJ_LP lp) {
const auto &extent = grid->extentAndRes();
if (!extent.isGeographic) {
pj_log(P->ctx, PJ_LOG_ERROR,
- "Can only handle grids referenced in a geographic CRS");
- proj_context_errno_set(P->ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ _("Can only handle grids referenced in a geographic CRS"));
+ proj_context_errno_set(P->ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return out;
}
@@ -3131,7 +3158,7 @@ PJ_LP pj_hgrid_value(PJ *P, const ListOfHGrids &grids, PJ_LP lp) {
}
if (out.lam == HUGE_VAL || out.phi == HUGE_VAL) {
- proj_context_errno_set(P->ctx, PJD_ERR_GRID_AREA);
+ proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID);
}
return out;
@@ -3158,7 +3185,7 @@ static double read_vgrid_value(PJ_CONTEXT *ctx, const ListOfVGrids &grids,
}
}
if (!grid) {
- proj_context_errno_set(ctx, PJD_ERR_GRID_AREA);
+ proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID);
return HUGE_VAL;
}
if (grid->isNullGrid()) {
@@ -3168,8 +3195,9 @@ static double read_vgrid_value(PJ_CONTEXT *ctx, const ListOfVGrids &grids,
const auto &extent = grid->extentAndRes();
if (!extent.isGeographic) {
pj_log(ctx, PJ_LOG_ERROR,
- "Can only handle grids referenced in a geographic CRS");
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ _("Can only handle grids referenced in a geographic CRS"));
+ proj_context_errno_set(ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return HUGE_VAL;
}
@@ -3200,8 +3228,8 @@ static double read_vgrid_value(PJ_CONTEXT *ctx, const ListOfVGrids &grids,
int grid_ix = static_cast<int>(lround(floor(grid_x)));
if (!(grid_ix >= 0 && grid_ix < grid->width())) {
// in the unlikely case we end up here...
- pj_log(ctx, PJ_LOG_ERROR, "grid_ix not in grid");
- proj_context_errno_set(ctx, PJD_ERR_GRID_AREA);
+ pj_log(ctx, PJ_LOG_ERROR, _("grid_ix not in grid"));
+ proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID);
return HUGE_VAL;
}
int grid_iy = static_cast<int>(lround(floor(grid_y)));
@@ -3268,9 +3296,10 @@ static double read_vgrid_value(PJ_CONTEXT *ctx, const ListOfVGrids &grids,
total_weight += weight;
n_weights++;
}
- if (n_weights == 0)
+ if (n_weights == 0) {
+ proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_GRID_AT_NODATA);
value = HUGE_VAL;
- else if (n_weights != 4)
+ } else if (n_weights != 4)
value /= total_weight;
return value * vmultiplier;
@@ -3309,8 +3338,9 @@ ListOfVGrids pj_vgrid_init(PJ *P, const char *gridkey) {
auto gridSet = VerticalShiftGridSet::open(P->ctx, gridname);
if (!gridSet) {
if (!canFail) {
- if (proj_context_errno(P->ctx) != PJD_ERR_NETWORK_ERROR) {
- proj_context_errno_set(P->ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ if (proj_context_errno(P->ctx) != PROJ_ERR_OTHER_NETWORK_ERROR) {
+ proj_context_errno_set(
+ P->ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
return {};
}
@@ -3379,7 +3409,8 @@ bool pj_bilinear_interpolation_three_samples(
if (!extent.isGeographic) {
pj_log(ctx, PJ_LOG_ERROR,
"Can only handle grids referenced in a geographic CRS");
- proj_context_errno_set(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_context_errno_set(ctx,
+ PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
return false;
}
diff --git a/src/init.cpp b/src/init.cpp
index 1e89402d..461b44ba 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -30,7 +30,6 @@
#define PJ_LIB__
#include <ctype.h>
-#include <errno.h>
#include <math.h>
#include <stddef.h>
#include <stdio.h>
@@ -55,7 +54,7 @@ static paralist *string_to_paralist (PJ_CONTEXT *ctx, char *definition) {
/* Keep a handle to the start of the list, so we have something to return */
auto param = pj_mkparam_ws (c, &c);
if (nullptr==param) {
- free_params (ctx, first, ENOMEM);
+ free_params (ctx, first, PROJ_ERR_INVALID_OP /*ENOMEM*/);
return nullptr;
}
if (nullptr==last) {
@@ -104,7 +103,8 @@ static char *get_init_string (PJ_CONTEXT *ctx, const char *name) {
/* Locate the name of the section we search for */
section = strrchr(fname, ':');
if (nullptr==section) {
- proj_context_errno_set (ctx, PJD_ERR_NO_COLON_IN_INIT_STRING);
+ pj_log(ctx, PJ_LOG_ERROR, _("Missing colon in +init"));
+ proj_context_errno_set (ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
free (fname);
return nullptr;
}
@@ -117,8 +117,9 @@ static char *get_init_string (PJ_CONTEXT *ctx, const char *name) {
auto file = NS_PROJ::FileManager::open_resource_file(ctx, fname);
if (nullptr==file) {
+ pj_log(ctx, PJ_LOG_ERROR, _("Cannot open %s"), fname);
+ proj_context_errno_set (ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
free (fname);
- proj_context_errno_set (ctx, PJD_ERR_NO_OPTION_IN_INIT_FILE);
return nullptr;
}
@@ -131,8 +132,9 @@ static char *get_init_string (PJ_CONTEXT *ctx, const char *name) {
line = file->read_line(MAX_LINE_LENGTH, maxLenReached, eofReached);
/* End of file? */
if (maxLenReached || eofReached) {
+ pj_log(ctx, PJ_LOG_ERROR, _("Invalid content for %s"), fname);
+ proj_context_errno_set (ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
free (fname);
- proj_context_errno_set (ctx, PJD_ERR_NO_OPTION_IN_INIT_FILE);
return nullptr;
}
@@ -441,7 +443,8 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
ctx->last_errno = 0;
if (argc <= 0) {
- proj_context_errno_set (ctx, PJD_ERR_NO_ARGS);
+ pj_log(ctx, PJ_LOG_ERROR, _("No arguments"));
+ proj_context_errno_set (ctx, PROJ_ERR_INVALID_OP_MISSING_ARG);
return nullptr;
}
@@ -455,13 +458,15 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
/* can't have nested pipelines directly */
if (n_pipelines > 1) {
- proj_context_errno_set (ctx, PJD_ERR_MALFORMED_PIPELINE);
+ pj_log(ctx, PJ_LOG_ERROR, _("Nested pipelines are not supported"));
+ proj_context_errno_set (ctx, PROJ_ERR_INVALID_OP_WRONG_SYNTAX);
return nullptr;
}
/* don't allow more than one +init in non-pipeline operations */
if (n_pipelines == 0 && n_inits > 1) {
- proj_context_errno_set (ctx, PJD_ERR_TOO_MANY_INITS);
+ pj_log(ctx, PJ_LOG_ERROR, _("Too many inits"));
+ proj_context_errno_set (ctx, PROJ_ERR_INVALID_OP_WRONG_SYNTAX);
return nullptr;
}
@@ -469,14 +474,14 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
/* put arguments into internal linked list */
start = curr = pj_mkparam(argv[0]);
if (!curr) {
- free_params (ctx, start, ENOMEM);
+ free_params (ctx, start, PROJ_ERR_INVALID_OP /*ENOMEM*/);
return nullptr;
}
for (i = 1; i < argc; ++i) {
curr->next = pj_mkparam(argv[i]);
if (!curr->next) {
- free_params (ctx, start, ENOMEM);
+ free_params (ctx, start, PROJ_ERR_INVALID_OP /*ENOMEM*/);
return nullptr;
}
curr = curr->next;
@@ -491,7 +496,7 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
if (init && n_pipelines == 0) {
init = pj_expand_init_internal (ctx, init, allow_init_epsg);
if (!init) {
- free_params (ctx, start, PJD_ERR_NO_ARGS);
+ free_params (ctx, start, PROJ_ERR_INVALID_OP_WRONG_SYNTAX);
return nullptr;
}
}
@@ -503,19 +508,22 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
/* Find projection selection */
curr = pj_param_exists (start, "proj");
if (nullptr==curr) {
- free_params (ctx, start, PJD_ERR_PROJ_NOT_NAMED);
+ pj_log(ctx, PJ_LOG_ERROR, _("Missing proj"));
+ free_params (ctx, start, PROJ_ERR_INVALID_OP_MISSING_ARG);
return nullptr;
}
name = curr->param;
if (strlen (name) < 6) {
- free_params (ctx, start, PJD_ERR_PROJ_NOT_NAMED);
+ pj_log(ctx, PJ_LOG_ERROR, _("Invalid value for proj"));
+ free_params (ctx, start, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
return nullptr;
}
name += 5;
proj = locate_constructor (name);
if (nullptr==proj) {
- free_params (ctx, start, PJD_ERR_UNKNOWN_PROJECTION_ID);
+ pj_log(ctx, PJ_LOG_ERROR, _("Unknown projection"));
+ free_params (ctx, start, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
return nullptr;
}
@@ -524,7 +532,7 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
/* Allocate projection structure */
PIN = proj(nullptr);
if (nullptr==PIN) {
- free_params (ctx, start, ENOMEM);
+ free_params (ctx, start, PROJ_ERR_INVALID_OP /*ENOMEM*/);
return nullptr;
}
@@ -550,11 +558,11 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
if (err) {
/* Didn't get an ellps, but doesn't need one: Get a free WGS84 */
if (PIN->need_ellps) {
- pj_log (ctx, PJ_LOG_DEBUG_MINOR, "pj_init_ctx: Must specify ellipsoid or sphere");
+ pj_log (ctx, PJ_LOG_ERROR, _("pj_init_ctx: Must specify ellipsoid or sphere"));
return pj_default_destructor (PIN, proj_errno(PIN));
}
else {
- if (PJD_ERR_MAJOR_AXIS_NOT_GIVEN==proj_errno (PIN))
+ if (PIN->a == 0)
proj_errno_reset (PIN);
PIN->f = 1.0/298.257223563;
PIN->a = 6378137.0;
@@ -564,7 +572,7 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
PIN->a_orig = PIN->a;
PIN->es_orig = PIN->es;
if (pj_calc_ellipsoid_params (PIN, PIN->a, PIN->es))
- return pj_default_destructor (PIN, PJD_ERR_INVALID_ECCENTRICITY);
+ return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
/* Now that we have ellipse information check for WGS84 datum */
if( PIN->datum_type == PJD_3PARAM
@@ -596,7 +604,10 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
/* when correcting longitudes around it */
/* The test is written this way to error on long_wrap_center "=" NaN */
if( !(fabs(PIN->long_wrap_center) < 10 * M_TWOPI) )
- return pj_default_destructor (PIN, PJD_ERR_LAT_OR_LON_EXCEED_LIMIT);
+ {
+ proj_log_error(PIN, _("Invalid value for lon_wrap"));
+ return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
}
/* Axis orientation */
@@ -605,12 +616,18 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
const char *axis_legal = "ewnsud";
const char *axis_arg = pj_param(ctx, start,"saxis").s;
if( strlen(axis_arg) != 3 )
- return pj_default_destructor (PIN, PJD_ERR_AXIS);
+ {
+ proj_log_error(PIN, _("Invalid value for axis"));
+ return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
if( strchr( axis_legal, axis_arg[0] ) == nullptr
|| strchr( axis_legal, axis_arg[1] ) == nullptr
|| strchr( axis_legal, axis_arg[2] ) == nullptr)
- return pj_default_destructor (PIN, PJD_ERR_AXIS);
+ {
+ proj_log_error(PIN, _("Invalid value for axis"));
+ return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
/* TODO: it would be nice to validate we don't have on axis repeated */
strcpy( PIN->axis, axis_arg );
@@ -622,7 +639,10 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
/* Central latitude */
PIN->phi0 = pj_param(ctx, start, "rlat_0").f;
if( fabs(PIN->phi0) > M_HALFPI )
- return pj_default_destructor (PIN, PJD_ERR_LAT_LARGER_THAN_90);
+ {
+ proj_log_error(PIN, _("Invalid value for lat_0: |lat_0| should be <= 90°"));
+ return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
/* False easting and northing */
PIN->x0 = pj_param(ctx, start, "dx_0").f;
@@ -638,7 +658,10 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
else
PIN->k0 = 1.;
if (PIN->k0 <= 0.)
- return pj_default_destructor (PIN, PJD_ERR_K_LESS_THAN_ZERO);
+ {
+ proj_log_error(PIN, _("Invalid value for k/k_0: it should be > 0"));
+ return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
/* Set units */
units = pj_list_linear_units();
@@ -646,7 +669,10 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
if ((name = pj_param(ctx, start, "sunits").s) != nullptr) {
for (i = 0; (s = units[i].id) && strcmp(name, s) ; ++i) ;
if (!s)
- return pj_default_destructor (PIN, PJD_ERR_UNKNOWN_UNIT_ID);
+ {
+ proj_log_error(PIN, _("Invalid value for units"));
+ return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
s = units[i].to_meter;
}
if (s || (s = pj_param(ctx, start, "sto_meter").s)) {
@@ -657,11 +683,17 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
++s;
double denom = pj_strtod(s, nullptr);
if (denom == 0.0)
- return pj_default_destructor (PIN, PJD_ERR_UNIT_FACTOR_LESS_THAN_0);
+ {
+ proj_log_error(PIN, _("Invalid value for to_meter donominator"));
+ return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
PIN->to_meter /= denom;
}
if (PIN->to_meter <= 0.0)
- return pj_default_destructor (PIN, PJD_ERR_UNIT_FACTOR_LESS_THAN_0);
+ {
+ proj_log_error(PIN, _("Invalid value for to_meter"));
+ return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
PIN->fr_meter = 1 / PIN->to_meter;
} else
@@ -672,7 +704,10 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
if ((name = pj_param(ctx, start, "svunits").s) != nullptr) {
for (i = 0; (s = units[i].id) && strcmp(name, s) ; ++i) ;
if (!s)
- return pj_default_destructor (PIN, PJD_ERR_UNKNOWN_UNIT_ID);
+ {
+ proj_log_error(PIN, _("Invalid value for vunits"));
+ return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
s = units[i].to_meter;
}
if (s || (s = pj_param(ctx, start, "svto_meter").s)) {
@@ -683,11 +718,17 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
++s;
double denom = pj_strtod(s, nullptr);
if (denom == 0.0)
- return pj_default_destructor (PIN, PJD_ERR_UNIT_FACTOR_LESS_THAN_0);
+ {
+ proj_log_error(PIN, _("Invalid value for vto_meter donominator"));
+ return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
PIN->vto_meter /= denom;
}
if (PIN->vto_meter <= 0.0)
- return pj_default_destructor (PIN, PJD_ERR_UNIT_FACTOR_LESS_THAN_0);
+ {
+ proj_log_error(PIN, _("Invalid value for vto_meter"));
+ return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
PIN->vfr_meter = 1. / PIN->vto_meter;
} else {
PIN->vto_meter = PIN->to_meter;
@@ -716,7 +757,10 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
value = name;
if (!value)
- return pj_default_destructor (PIN, PJD_ERR_UNKNOWN_PRIME_MERIDIAN);
+ {
+ proj_log_error(PIN, _("Invalid value for pm"));
+ return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
PIN->from_greenwich = dmstor_ctx(ctx,value,nullptr);
}
else
@@ -725,7 +769,7 @@ pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int all
/* Private object for the geodesic functions */
PIN->geod = static_cast<struct geod_geodesic*>(calloc (1, sizeof (struct geod_geodesic)));
if (nullptr==PIN->geod)
- return pj_default_destructor (PIN, ENOMEM);
+ return pj_default_destructor (PIN, PROJ_ERR_INVALID_OP /*ENOMEM*/);
geod_init(PIN->geod, PIN->a, (1 - sqrt (1 - PIN->es)));
/* Projection specific initialization */
diff --git a/src/internal.cpp b/src/internal.cpp
index 9cc48120..b96e2160 100644
--- a/src/internal.cpp
+++ b/src/internal.cpp
@@ -89,12 +89,9 @@ chained calls starting out with a call to its 2D interface.
coo.lp = pj_inv (coo.xy, P);
return coo;
case PJ_IDENT:
- return coo;
- default:
break;
}
- proj_errno_set (P, EINVAL);
- return proj_coord_error ();
+ return coo;
}
@@ -119,12 +116,9 @@ chained calls starting out with a call to its 3D interface.
coo.lpz = pj_inv3d (coo.xyz, P);
return coo;
case PJ_IDENT:
- return coo;
- default:
break;
}
- proj_errno_set (P, EINVAL);
- return proj_coord_error ();
+ return coo;
}
/**************************************************************************************/
diff --git a/src/inv.cpp b/src/inv.cpp
index 626c9ee5..b4a42189 100644
--- a/src/inv.cpp
+++ b/src/inv.cpp
@@ -38,7 +38,7 @@
static PJ_COORD inv_prepare (PJ *P, PJ_COORD coo) {
if (coo.v[0] == HUGE_VAL || coo.v[1] == HUGE_VAL || coo.v[2] == HUGE_VAL) {
- proj_errno_set (P, PJD_ERR_INVALID_X_OR_Y);
+ proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error ();
}
@@ -97,7 +97,7 @@ static PJ_COORD inv_prepare (PJ *P, PJ_COORD coo) {
static PJ_COORD inv_finalize (PJ *P, PJ_COORD coo) {
if (coo.xyz.x == HUGE_VAL) {
- proj_errno_set (P, PJD_ERR_INVALID_X_OR_Y);
+ proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error ();
}
@@ -163,7 +163,7 @@ PJ_LP pj_inv(PJ_XY xy, PJ *P) {
else if (P->inv4d)
coo = P->inv4d (coo, P);
else {
- proj_errno_set (P, EINVAL);
+ proj_errno_set (P, PROJ_ERR_OTHER_NO_INVERSE_OP);
return proj_coord_error ().lp;
}
if (HUGE_VAL==coo.v[0])
@@ -197,7 +197,7 @@ PJ_LPZ pj_inv3d (PJ_XYZ xyz, PJ *P) {
else if (P->inv)
coo.lp = P->inv (coo.xy, P);
else {
- proj_errno_set (P, EINVAL);
+ proj_errno_set (P, PROJ_ERR_OTHER_NO_INVERSE_OP);
return proj_coord_error ().lpz;
}
if (HUGE_VAL==coo.v[0])
@@ -227,7 +227,7 @@ PJ_COORD pj_inv4d (PJ_COORD coo, PJ *P) {
else if (P->inv)
coo.lp = P->inv (coo.xy, P);
else {
- proj_errno_set (P, EINVAL);
+ proj_errno_set (P, PROJ_ERR_OTHER_NO_INVERSE_OP);
return proj_coord_error ();
}
if (HUGE_VAL==coo.v[0])
diff --git a/src/iso19111/c_api.cpp b/src/iso19111/c_api.cpp
index 6bc1f166..cb0c113a 100644
--- a/src/iso19111/c_api.cpp
+++ b/src/iso19111/c_api.cpp
@@ -82,7 +82,7 @@ static void PROJ_NO_INLINE proj_log_error(PJ_CONTEXT *ctx, const char *function,
auto previous_errno = proj_context_errno(ctx);
if (previous_errno == 0) {
// only set errno if it wasn't set deeper down the call stack
- proj_context_errno_set(ctx, PJD_ERR_GENERIC_ERROR);
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER);
}
}
@@ -344,6 +344,7 @@ const char *proj_context_get_database_metadata(PJ_CONTEXT *ctx,
const char *key) {
SANITIZE_CTX(ctx);
if (!key) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -375,6 +376,7 @@ PJ_GUESSED_WKT_DIALECT proj_context_guess_wkt_dialect(PJ_CONTEXT *ctx,
const char *wkt) {
(void)ctx;
if (!wkt) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return PJ_GUESSED_NOT_WKT;
}
@@ -423,6 +425,7 @@ static const char *getOptionValue(const char *option,
PJ *proj_clone(PJ_CONTEXT *ctx, const PJ *obj) {
SANITIZE_CTX(ctx);
if (!obj) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -458,6 +461,7 @@ PJ *proj_clone(PJ_CONTEXT *ctx, const PJ *obj) {
PJ *proj_create(PJ_CONTEXT *ctx, const char *text) {
SANITIZE_CTX(ctx);
if (!text) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -534,6 +538,7 @@ PJ *proj_create_from_wkt(PJ_CONTEXT *ctx, const char *wkt,
PROJ_STRING_LIST *out_grammar_errors) {
SANITIZE_CTX(ctx);
if (!wkt) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -647,6 +652,7 @@ PJ *proj_create_from_database(PJ_CONTEXT *ctx, const char *auth_name,
const char *const *options) {
SANITIZE_CTX(ctx);
if (!auth_name || !code) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -752,6 +758,7 @@ int proj_uom_get_info_from_database(PJ_CONTEXT *ctx, const char *auth_name,
SANITIZE_CTX(ctx);
if (!auth_name || !code) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return false;
}
@@ -804,6 +811,7 @@ int PROJ_DLL proj_grid_get_info_from_database(
int *out_direct_download, int *out_open_license, int *out_available) {
SANITIZE_CTX(ctx);
if (!grid_name) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return false;
}
@@ -863,6 +871,7 @@ PJ_OBJ_LIST *proj_query_geodetic_crs_from_datum(PJ_CONTEXT *ctx,
const char *crs_type) {
SANITIZE_CTX(ctx);
if (!datum_auth_name || !datum_code) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -1200,6 +1209,7 @@ int proj_is_deprecated(const PJ *obj) {
PJ_OBJ_LIST *proj_get_non_deprecated(PJ_CONTEXT *ctx, const PJ *obj) {
SANITIZE_CTX(ctx);
if (!obj) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -1230,6 +1240,7 @@ static int proj_is_equivalent_to_internal(PJ_CONTEXT *ctx, const PJ *obj,
if (!obj || !other) {
if (ctx) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
}
return false;
@@ -1435,6 +1446,7 @@ const char *proj_as_wkt(PJ_CONTEXT *ctx, const PJ *obj, PJ_WKT_TYPE type,
const char *const *options) {
SANITIZE_CTX(ctx);
if (!obj) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -1536,6 +1548,7 @@ const char *proj_as_proj_string(PJ_CONTEXT *ctx, const PJ *obj,
const char *const *options) {
SANITIZE_CTX(ctx);
if (!obj) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -1625,6 +1638,7 @@ const char *proj_as_projjson(PJ_CONTEXT *ctx, const PJ *obj,
const char *const *options) {
SANITIZE_CTX(ctx);
if (!obj) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -1784,6 +1798,7 @@ int proj_get_area_of_use(PJ_CONTEXT *ctx, const PJ *obj,
static const GeodeticCRS *extractGeodeticCRS(PJ_CONTEXT *ctx, const PJ *crs,
const char *fname) {
if (!crs) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, fname, "missing required input");
return nullptr;
}
@@ -1841,6 +1856,7 @@ PJ *proj_crs_get_geodetic_crs(PJ_CONTEXT *ctx, const PJ *crs) {
PJ *proj_crs_get_sub_crs(PJ_CONTEXT *ctx, const PJ *crs, int index) {
SANITIZE_CTX(ctx);
if (!crs) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -1875,6 +1891,7 @@ PJ *proj_crs_create_bound_crs(PJ_CONTEXT *ctx, const PJ *base_crs,
const PJ *hub_crs, const PJ *transformation) {
SANITIZE_CTX(ctx);
if (!base_crs || !hub_crs || !transformation) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -1934,6 +1951,7 @@ PJ *proj_crs_create_bound_crs_to_WGS84(PJ_CONTEXT *ctx, const PJ *crs,
const char *const *options) {
SANITIZE_CTX(ctx);
if (!crs) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -1996,6 +2014,7 @@ PJ *proj_crs_create_bound_vertical_crs(PJ_CONTEXT *ctx, const PJ *vert_crs,
const char *grid_name) {
SANITIZE_CTX(ctx);
if (!vert_crs || !hub_geographic_3D_crs || !grid_name) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -2122,6 +2141,7 @@ int proj_ellipsoid_get_parameters(PJ_CONTEXT *ctx, const PJ *ellipsoid,
double *out_inv_flattening) {
SANITIZE_CTX(ctx);
if (!ellipsoid) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return FALSE;
}
@@ -2203,6 +2223,7 @@ int proj_prime_meridian_get_parameters(PJ_CONTEXT *ctx,
const char **out_unit_name) {
SANITIZE_CTX(ctx);
if (!prime_meridian) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return false;
}
@@ -2288,6 +2309,7 @@ PJ *proj_get_source_crs(PJ_CONTEXT *ctx, const PJ *obj) {
PJ *proj_get_target_crs(PJ_CONTEXT *ctx, const PJ *obj) {
SANITIZE_CTX(ctx);
if (!obj) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -2372,6 +2394,7 @@ PJ_OBJ_LIST *proj_identify(PJ_CONTEXT *ctx, const PJ *obj,
int **out_confidence) {
SANITIZE_CTX(ctx);
if (!obj) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -2468,6 +2491,7 @@ PROJ_STRING_LIST proj_get_codes_from_database(PJ_CONTEXT *ctx,
int allow_deprecated) {
SANITIZE_CTX(ctx);
if (!auth_name) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -2824,6 +2848,7 @@ void proj_unit_list_destroy(PROJ_UNIT_INFO **list) {
PJ *proj_crs_get_coordoperation(PJ_CONTEXT *ctx, const PJ *crs) {
SANITIZE_CTX(ctx);
if (!crs) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -2868,6 +2893,7 @@ int proj_coordoperation_get_method_info(PJ_CONTEXT *ctx,
const char **out_method_code) {
SANITIZE_CTX(ctx);
if (!coordoperation) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return false;
}
@@ -3416,6 +3442,7 @@ PJ *proj_create_compound_crs(PJ_CONTEXT *ctx, const char *crs_name,
SANITIZE_CTX(ctx);
if (!horiz_crs || !vert_crs) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -3458,6 +3485,7 @@ PJ *proj_create_compound_crs(PJ_CONTEXT *ctx, const char *crs_name,
PJ PROJ_DLL *proj_alter_name(PJ_CONTEXT *ctx, const PJ *obj, const char *name) {
SANITIZE_CTX(ctx);
if (!obj || !name) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -3495,6 +3523,7 @@ PJ PROJ_DLL *proj_alter_id(PJ_CONTEXT *ctx, const PJ *obj,
const char *auth_name, const char *code) {
SANITIZE_CTX(ctx);
if (!obj || !auth_name || !code) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -3535,6 +3564,7 @@ PJ *proj_crs_alter_geodetic_crs(PJ_CONTEXT *ctx, const PJ *obj,
const PJ *new_geod_crs) {
SANITIZE_CTX(ctx);
if (!obj || !new_geod_crs) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -3648,6 +3678,7 @@ PJ *proj_crs_alter_cs_linear_unit(PJ_CONTEXT *ctx, const PJ *obj,
const char *unit_code) {
SANITIZE_CTX(ctx);
if (!obj) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -3700,6 +3731,7 @@ PJ *proj_crs_alter_parameters_linear_unit(PJ_CONTEXT *ctx, const PJ *obj,
int convert_to_new_unit) {
SANITIZE_CTX(ctx);
if (!obj) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -3745,6 +3777,7 @@ PJ *proj_crs_promote_to_3D(PJ_CONTEXT *ctx, const char *crs_3D_name,
const PJ *crs_2D) {
SANITIZE_CTX(ctx);
if (!crs_2D) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -3804,6 +3837,7 @@ PJ *proj_crs_create_projected_3D_crs_from_2D(PJ_CONTEXT *ctx,
const PJ *geog_3D_crs) {
SANITIZE_CTX(ctx);
if (!projected_2D_crs) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -3889,6 +3923,7 @@ PJ *proj_crs_demote_to_2D(PJ_CONTEXT *ctx, const char *crs_2D_name,
const PJ *crs_3D) {
SANITIZE_CTX(ctx);
if (!crs_3D) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -4097,6 +4132,7 @@ PJ *proj_create_transformation(PJ_CONTEXT *ctx, const char *name,
double accuracy) {
SANITIZE_CTX(ctx);
if (!source_crs || !target_crs) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -4182,6 +4218,7 @@ PJ *proj_convert_conversion_to_other_method(PJ_CONTEXT *ctx,
const char *new_method_name) {
SANITIZE_CTX(ctx);
if (!conversion) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -4566,6 +4603,7 @@ PJ *proj_create_projected_crs(PJ_CONTEXT *ctx, const char *crs_name,
const PJ *coordinate_system) {
SANITIZE_CTX(ctx);
if (!geodetic_crs || !conversion || !coordinate_system) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -6897,6 +6935,7 @@ int proj_coordoperation_is_instantiable(PJ_CONTEXT *ctx,
const PJ *coordoperation) {
SANITIZE_CTX(ctx);
if (!coordoperation) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return false;
}
@@ -6942,6 +6981,7 @@ int proj_coordoperation_has_ballpark_transformation(PJ_CONTEXT *ctx,
const PJ *coordoperation) {
SANITIZE_CTX(ctx);
if (!coordoperation) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return false;
}
@@ -6968,6 +7008,7 @@ int proj_coordoperation_get_param_count(PJ_CONTEXT *ctx,
const PJ *coordoperation) {
SANITIZE_CTX(ctx);
if (!coordoperation) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return false;
}
@@ -6996,6 +7037,7 @@ int proj_coordoperation_get_param_index(PJ_CONTEXT *ctx,
const char *name) {
SANITIZE_CTX(ctx);
if (!coordoperation || !name) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return -1;
}
@@ -7057,6 +7099,7 @@ int proj_coordoperation_get_param(
const char **out_unit_code, const char **out_unit_category) {
SANITIZE_CTX(ctx);
if (!coordoperation) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return false;
}
@@ -7186,6 +7229,7 @@ int proj_coordoperation_get_towgs84_values(PJ_CONTEXT *ctx,
int emit_error_if_incompatible) {
SANITIZE_CTX(ctx);
if (!coordoperation) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return false;
}
@@ -7225,6 +7269,7 @@ int proj_coordoperation_get_grid_used_count(PJ_CONTEXT *ctx,
const PJ *coordoperation) {
SANITIZE_CTX(ctx);
if (!coordoperation) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return false;
}
@@ -7418,6 +7463,7 @@ void proj_operation_factory_context_set_desired_accuracy(
double accuracy) {
SANITIZE_CTX(ctx);
if (!factory_ctx) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return;
}
@@ -7449,6 +7495,7 @@ void proj_operation_factory_context_set_area_of_interest(
double north_lat_degree) {
SANITIZE_CTX(ctx);
if (!factory_ctx) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return;
}
@@ -7478,6 +7525,7 @@ void proj_operation_factory_context_set_crs_extent_use(
PROJ_CRS_EXTENT_USE use) {
SANITIZE_CTX(ctx);
if (!factory_ctx) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return;
}
@@ -7527,6 +7575,7 @@ void PROJ_DLL proj_operation_factory_context_set_spatial_criterion(
PROJ_SPATIAL_CRITERION criterion) {
SANITIZE_CTX(ctx);
if (!factory_ctx) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return;
}
@@ -7564,6 +7613,7 @@ void PROJ_DLL proj_operation_factory_context_set_grid_availability_use(
PROJ_GRID_AVAILABILITY_USE use) {
SANITIZE_CTX(ctx);
if (!factory_ctx) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return;
}
@@ -7614,6 +7664,7 @@ void proj_operation_factory_context_set_use_proj_alternative_grid_names(
int usePROJNames) {
SANITIZE_CTX(ctx);
if (!factory_ctx) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return;
}
@@ -7650,6 +7701,7 @@ void proj_operation_factory_context_set_allow_use_intermediate_crs(
PROJ_INTERMEDIATE_CRS_USE use) {
SANITIZE_CTX(ctx);
if (!factory_ctx) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return;
}
@@ -7691,6 +7743,7 @@ void proj_operation_factory_context_set_allowed_intermediate_crs(
const char *const *list_of_auth_name_codes) {
SANITIZE_CTX(ctx);
if (!factory_ctx) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return;
}
@@ -7720,6 +7773,7 @@ void PROJ_DLL proj_operation_factory_context_set_discard_superseded(
PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, int discard) {
SANITIZE_CTX(ctx);
if (!factory_ctx) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return;
}
@@ -7743,6 +7797,7 @@ void PROJ_DLL proj_operation_factory_context_set_allow_ballpark_transformations(
PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, int allow) {
SANITIZE_CTX(ctx);
if (!factory_ctx) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return;
}
@@ -7840,6 +7895,7 @@ proj_create_operations(PJ_CONTEXT *ctx, const PJ *source_crs,
const PJ_OPERATION_FACTORY_CONTEXT *operationContext) {
SANITIZE_CTX(ctx);
if (!source_crs || !target_crs || !operationContext) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -7951,6 +8007,7 @@ int proj_list_get_count(const PJ_OBJ_LIST *result) {
PJ *proj_list_get(PJ_CONTEXT *ctx, const PJ_OBJ_LIST *result, int index) {
SANITIZE_CTX(ctx);
if (!result) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -7984,6 +8041,7 @@ double proj_coordoperation_get_accuracy(PJ_CONTEXT *ctx,
const PJ *coordoperation) {
SANITIZE_CTX(ctx);
if (!coordoperation) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return -1;
}
@@ -8024,6 +8082,7 @@ double proj_coordoperation_get_accuracy(PJ_CONTEXT *ctx,
PJ *proj_crs_get_datum(PJ_CONTEXT *ctx, const PJ *crs) {
SANITIZE_CTX(ctx);
if (!crs) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -8060,6 +8119,7 @@ PJ *proj_crs_get_datum(PJ_CONTEXT *ctx, const PJ *crs) {
PJ *proj_crs_get_datum_ensemble(PJ_CONTEXT *ctx, const PJ *crs) {
SANITIZE_CTX(ctx);
if (!crs) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -8088,6 +8148,7 @@ int proj_datum_ensemble_get_member_count(PJ_CONTEXT *ctx,
const PJ *datum_ensemble) {
SANITIZE_CTX(ctx);
if (!datum_ensemble) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return 0;
}
@@ -8114,6 +8175,7 @@ double proj_datum_ensemble_get_accuracy(PJ_CONTEXT *ctx,
const PJ *datum_ensemble) {
SANITIZE_CTX(ctx);
if (!datum_ensemble) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return -1;
}
@@ -8152,6 +8214,7 @@ PJ *proj_datum_ensemble_get_member(PJ_CONTEXT *ctx, const PJ *datum_ensemble,
int member_index) {
SANITIZE_CTX(ctx);
if (!datum_ensemble) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -8191,6 +8254,7 @@ PJ *proj_datum_ensemble_get_member(PJ_CONTEXT *ctx, const PJ *datum_ensemble,
PJ *proj_crs_get_datum_forced(PJ_CONTEXT *ctx, const PJ *crs) {
SANITIZE_CTX(ctx);
if (!crs) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -8225,6 +8289,7 @@ double proj_dynamic_datum_get_frame_reference_epoch(PJ_CONTEXT *ctx,
const PJ *datum) {
SANITIZE_CTX(ctx);
if (!datum) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return -1;
}
@@ -8259,6 +8324,7 @@ double proj_dynamic_datum_get_frame_reference_epoch(PJ_CONTEXT *ctx,
PJ *proj_crs_get_coordinate_system(PJ_CONTEXT *ctx, const PJ *crs) {
SANITIZE_CTX(ctx);
if (!crs) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -8281,6 +8347,7 @@ PJ *proj_crs_get_coordinate_system(PJ_CONTEXT *ctx, const PJ *crs) {
PJ_COORDINATE_SYSTEM_TYPE proj_cs_get_type(PJ_CONTEXT *ctx, const PJ *cs) {
SANITIZE_CTX(ctx);
if (!cs) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return PJ_CS_TYPE_UNKNOWN;
}
@@ -8330,6 +8397,7 @@ PJ_COORDINATE_SYSTEM_TYPE proj_cs_get_type(PJ_CONTEXT *ctx, const PJ *cs) {
int proj_cs_get_axis_count(PJ_CONTEXT *ctx, const PJ *cs) {
SANITIZE_CTX(ctx);
if (!cs) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return -1;
}
@@ -8373,6 +8441,7 @@ int proj_cs_get_axis_info(PJ_CONTEXT *ctx, const PJ *cs, int index,
const char **out_unit_code) {
SANITIZE_CTX(ctx);
if (!cs) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return false;
}
@@ -8526,6 +8595,7 @@ PJ *proj_coordoperation_create_inverse(PJ_CONTEXT *ctx, const PJ *obj) {
SANITIZE_CTX(ctx);
if (!obj) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
@@ -8557,6 +8627,7 @@ int proj_concatoperation_get_step_count(PJ_CONTEXT *ctx,
const PJ *concatoperation) {
SANITIZE_CTX(ctx);
if (!concatoperation) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return false;
}
@@ -8590,6 +8661,7 @@ PJ *proj_concatoperation_get_step(PJ_CONTEXT *ctx, const PJ *concatoperation,
int i_step) {
SANITIZE_CTX(ctx);
if (!concatoperation) {
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE);
proj_log_error(ctx, __FUNCTION__, "missing required input");
return nullptr;
}
diff --git a/src/log.cpp b/src/log.cpp
index 35e276de..edfba140 100644
--- a/src/log.cpp
+++ b/src/log.cpp
@@ -118,13 +118,13 @@ PJ_LOG_LEVEL proj_log_level (PJ_CONTEXT *ctx, PJ_LOG_LEVEL log_level) {
/*****************************************************************************/
-void proj_log_error (PJ *P, const char *fmt, ...) {
+void proj_log_error (const PJ *P, const char *fmt, ...) {
/******************************************************************************
For reporting the most severe events.
******************************************************************************/
va_list args;
va_start( args, fmt );
- pj_vlog (pj_get_ctx (P), PJ_LOG_ERROR , fmt, args);
+ pj_vlog (pj_get_ctx ((PJ*)P), PJ_LOG_ERROR , fmt, args);
va_end( args );
}
diff --git a/src/mlfn.hpp b/src/mlfn.hpp
index 228c65a4..426dcb0e 100644
--- a/src/mlfn.hpp
+++ b/src/mlfn.hpp
@@ -66,7 +66,7 @@ inline_pj_inv_mlfn(PJ_CONTEXT *ctx, double arg, double es, const double *en,
}
*sinphi = s;
*cosphi = c;
- proj_context_errno_set( ctx, PJD_ERR_NON_CONV_INV_MERI_DIST );
+ proj_context_errno_set( ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN );
return phi;
}
diff --git a/src/networkfilemanager.cpp b/src/networkfilemanager.cpp
index 9edffaad..102d3d15 100644
--- a/src/networkfilemanager.cpp
+++ b/src/networkfilemanager.cpp
@@ -1315,7 +1315,7 @@ std::unique_ptr<File> NetworkFile::open(PJ_CONTEXT *ctx, const char *filename) {
errorBuffer.resize(strlen(errorBuffer.data()));
pj_log(ctx, PJ_LOG_ERROR, "Cannot open %s: %s", filename,
errorBuffer.c_str());
- proj_context_errno_set(ctx, PJD_ERR_NETWORK_ERROR);
+ proj_context_errno_set(ctx, PROJ_ERR_OTHER_NETWORK_ERROR);
}
bool ok = false;
@@ -1404,7 +1404,7 @@ size_t NetworkFile::read(void *buffer, size_t sizeBytes) {
&nRead, errorBuffer.size(), &errorBuffer[0],
m_ctx->networking.user_data);
if (!m_handle) {
- proj_context_errno_set(m_ctx, PJD_ERR_NETWORK_ERROR);
+ proj_context_errno_set(m_ctx, PROJ_ERR_OTHER_NETWORK_ERROR);
return 0;
}
} else {
@@ -1420,7 +1420,7 @@ size_t NetworkFile::read(void *buffer, size_t sizeBytes) {
pj_log(m_ctx, PJ_LOG_ERROR, "Cannot read in %s: %s",
m_url.c_str(), errorBuffer.c_str());
}
- proj_context_errno_set(m_ctx, PJD_ERR_NETWORK_ERROR);
+ proj_context_errno_set(m_ctx, PROJ_ERR_OTHER_NETWORK_ERROR);
return 0;
}
diff --git a/src/param.cpp b/src/param.cpp
index 28d6bc3e..a716f9b9 100644
--- a/src/param.cpp
+++ b/src/param.cpp
@@ -220,7 +220,7 @@ PROJVALUE pj_param (PJ_CONTEXT *ctx, paralist *pl, const char *opt) {
value.i = 1;
break;
default:
- proj_context_errno_set (ctx, PJD_ERR_INVALID_BOOLEAN_PARAM);
+ proj_context_errno_set (ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
value.i = 0;
break;
}
diff --git a/src/phi2.cpp b/src/phi2.cpp
index 2f258e47..23793557 100644
--- a/src/phi2.cpp
+++ b/src/phi2.cpp
@@ -103,7 +103,7 @@ double pj_sinhpsi2tanphi(PJ_CONTEXT *ctx, const double taup, const double e) {
break;
}
if (i == 0)
- proj_context_errno_set(ctx, PJD_ERR_NON_CONV_SINHPSI2TANPHI);
+ proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
return tau;
}
diff --git a/src/pipeline.cpp b/src/pipeline.cpp
index e9d11604..6a46ebd8 100644
--- a/src/pipeline.cpp
+++ b/src/pipeline.cpp
@@ -96,7 +96,6 @@ Thomas Knudsen, thokn@sdfe.dk, 2016-05-20
#define PJ_LIB__
-#include <errno.h>
#include <math.h>
#include <stddef.h>
#include <string.h>
@@ -430,8 +429,8 @@ PJ *OPERATION(pipeline,0) {
// proj=pipeline step "x="""," u=" proj=pipeline step ste=""[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline p step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ""x="""""""""""
// Probably an issue with the quoting handling code
// But doesn't hurt to add an extra safety check
- proj_log_error (P, "Pipeline: too deep recursion");
- return destructor (P, PJD_ERR_MALFORMED_PIPELINE); /* ERROR: nested pipelines */
+ proj_log_error (P, _("Pipeline: too deep recursion"));
+ return destructor (P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); /* ERROR: nested pipelines */
}
P->fwd4d = pipeline_forward_4d;
@@ -453,24 +452,24 @@ PJ *OPERATION(pipeline,0) {
P->opaque = new (std::nothrow) Pipeline();
if (nullptr==P->opaque)
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /* ENOMEM */);
argc = (int)argc_params (P->params);
auto pipeline = static_cast<struct Pipeline*>(P->opaque);
pipeline->argv = argv = argv_params (P->params, argc);
if (nullptr==argv)
- return destructor (P, ENOMEM);
+ return destructor (P, PROJ_ERR_INVALID_OP /* ENOMEM */);
pipeline->current_argv = current_argv = static_cast<char**>(calloc (argc, sizeof (char *)));
if (nullptr==current_argv)
- return destructor (P, ENOMEM);
+ return destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
/* Do some syntactical sanity checking */
for (i = 0; i < argc; i++) {
if (0==strcmp (argv_sentinel, argv[i])) {
if (-1==i_pipeline) {
- proj_log_error (P, "Pipeline: +step before +proj=pipeline");
- return destructor (P, PJD_ERR_MALFORMED_PIPELINE);
+ proj_log_error (P, _("Pipeline: +step before +proj=pipeline"));
+ return destructor (P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX);
}
if (0==nsteps)
i_first_step = i;
@@ -480,8 +479,8 @@ PJ *OPERATION(pipeline,0) {
if (0==strcmp ("proj=pipeline", argv[i])) {
if (-1 != i_pipeline) {
- proj_log_error (P, "Pipeline: Nesting only allowed when child pipelines are wrapped in '+init's");
- return destructor (P, PJD_ERR_MALFORMED_PIPELINE); /* ERROR: nested pipelines */
+ proj_log_error (P, _("Pipeline: Nesting only allowed when child pipelines are wrapped in '+init's"));
+ return destructor (P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); /* ERROR: nested pipelines */
}
i_pipeline = i;
}
@@ -489,10 +488,10 @@ PJ *OPERATION(pipeline,0) {
nsteps--; /* Last instance of +step is just a sentinel */
if (-1==i_pipeline)
- return destructor (P, PJD_ERR_MALFORMED_PIPELINE); /* ERROR: no pipeline def */
+ return destructor (P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); /* ERROR: no pipeline def */
if (0==nsteps)
- return destructor (P, PJD_ERR_MALFORMED_PIPELINE); /* ERROR: no pipeline def */
+ return destructor (P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); /* ERROR: no pipeline def */
set_ellipsoid(P);
@@ -532,8 +531,8 @@ PJ *OPERATION(pipeline,0) {
/* The step init failed, but possibly without setting errno. If so, we say "malformed" */
int err_to_report = proj_errno(P);
if (0==err_to_report)
- err_to_report = PJD_ERR_MALFORMED_PIPELINE;
- proj_log_error (P, "Pipeline: Bad step definition: %s (%s)", current_argv[0], proj_errno_string (err_to_report));
+ err_to_report = PROJ_ERR_INVALID_OP_WRONG_SYNTAX;
+ proj_log_error (P, _("Pipeline: Bad step definition: %s (%s)"), current_argv[0], proj_context_errno_string (P->ctx, err_to_report));
return destructor (P, err_to_report); /* ERROR: bad pipeline def */
}
next_step->parent = P;
@@ -562,8 +561,8 @@ PJ *OPERATION(pipeline,0) {
(!Q->inverted && (Q->fwd || Q->fwd3d || Q->fwd4d) ) ) {
continue;
} else {
- proj_log_error (P, "Pipeline: A forward operation couldn't be constructed");
- return destructor (P, PJD_ERR_MALFORMED_PIPELINE);
+ proj_log_error (P, _("Pipeline: A forward operation couldn't be constructed"));
+ return destructor (P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX);
}
}
@@ -612,8 +611,8 @@ PJ *OPERATION(pipeline,0) {
continue;
if ( curr_step_output != next_step_input ) {
- proj_log_error (P, "Pipeline: Mismatched units between step %d and %d", i+1, i+2);
- return destructor (P, PJD_ERR_MALFORMED_PIPELINE);
+ proj_log_error (P, _("Pipeline: Mismatched units between step %d and %d"), i+1, i+2);
+ return destructor (P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX);
}
}
@@ -682,7 +681,7 @@ static PJ *setup_pushpop(PJ *P) {
auto pushpop = static_cast<struct PushPop*>(calloc (1, sizeof(struct PushPop)));
P->opaque = pushpop;
if (nullptr==P->opaque)
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
if (pj_param_exists(P->params, "v_1"))
pushpop->v1 = true;
diff --git a/src/proj.h b/src/proj.h
index d4defc47..b16f54ea 100644
--- a/src/proj.h
+++ b/src/proj.h
@@ -610,6 +610,33 @@ double PROJ_DLL proj_xyz_dist (PJ_COORD a, PJ_COORD b);
/* Geodesic distance (in meter) + fwd and rev azimuth between two points on the ellipsoid */
PJ_COORD PROJ_DLL proj_geod (const PJ *P, PJ_COORD a, PJ_COORD b);
+/* PROJ error codes */
+
+/** Error codes typically related to coordinate operation initalization
+ * Note: some of them can also be emitted during coordinate transformation,
+ * like PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID in case the resource loading
+ * is differed until it is really needed.
+ */
+#define PROJ_ERR_INVALID_OP 1024 /* other/unspecified error related to coordinate operation initialization */
+#define PROJ_ERR_INVALID_OP_WRONG_SYNTAX (PROJ_ERR_INVALID_OP+1) /* invalid pipeline structure, missing +proj argument, etc */
+#define PROJ_ERR_INVALID_OP_MISSING_ARG (PROJ_ERR_INVALID_OP+2) /* missing required operation parameter */
+#define PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE (PROJ_ERR_INVALID_OP+3) /* one of the operation parameter has an illegal value */
+#define PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS (PROJ_ERR_INVALID_OP+4) /* mutually exclusive arguments */
+#define PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID (PROJ_ERR_INVALID_OP+5) /* file not found (particular case of PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE) */
+
+/** Error codes related to transformation on a specific coordinate */
+#define PROJ_ERR_COORD_TRANSFM 2048 /* other error related to coordinate transformation */
+#define PROJ_ERR_COORD_TRANSFM_INVALID_COORD (PROJ_ERR_COORD_TRANSFM+1) /* for e.g lat > 90deg */
+#define PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN (PROJ_ERR_COORD_TRANSFM+2) /* coordinate is outside of the projection domain. e.g approximate mercator with |longitude - lon_0| > 90deg, or iterative convergence method failed */
+#define PROJ_ERR_COORD_TRANSFM_NO_OPERATION (PROJ_ERR_COORD_TRANSFM+3) /* no operation found, e.g if no match the required accuracy, or if ballpark transformations were asked to not be used and they would be only such candidate */
+#define PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID (PROJ_ERR_COORD_TRANSFM+4) /* point to transform falls outside grid or subgrid */
+#define PROJ_ERR_COORD_TRANSFM_GRID_AT_NODATA (PROJ_ERR_COORD_TRANSFM+5) /* point to transform falls in a grid cell that evaluates to nodata */
+
+/** Other type of errors */
+#define PROJ_ERR_OTHER 4096
+#define PROJ_ERR_OTHER_API_MISUSE (PROJ_ERR_OTHER+1) /* error related to a misuse of PROJ API */
+#define PROJ_ERR_OTHER_NO_INVERSE_OP (PROJ_ERR_OTHER+2) /* no inverse method available */
+#define PROJ_ERR_OTHER_NETWORK_ERROR (PROJ_ERR_OTHER+3) /* failure when accessing a network resource */
/* Set or read error level */
int PROJ_DLL proj_context_errno (PJ_CONTEXT *ctx);
@@ -617,7 +644,8 @@ int PROJ_DLL proj_errno (const PJ *P);
int PROJ_DLL proj_errno_set (const PJ *P, int err);
int PROJ_DLL proj_errno_reset (const PJ *P);
int PROJ_DLL proj_errno_restore (const PJ *P, int err);
-const char PROJ_DLL * proj_errno_string (int err);
+const char PROJ_DLL * proj_errno_string (int err); /* deprecated. use proj_context_errno_string() */
+const char PROJ_DLL * proj_context_errno_string(PJ_CONTEXT* ctx, int err);
PJ_LOG_LEVEL PROJ_DLL proj_log_level (PJ_CONTEXT *ctx, PJ_LOG_LEVEL log_level);
void PROJ_DLL proj_log_func (PJ_CONTEXT *ctx, void *app_data, PJ_LOG_FUNCTION logf);
diff --git a/src/proj_internal.h b/src/proj_internal.h
index 32aaa1ec..bf9e5386 100644
--- a/src/proj_internal.h
+++ b/src/proj_internal.h
@@ -189,7 +189,10 @@ PJ_COORD pj_inv4d (PJ_COORD coo, PJ *P);
PJ_COORD PROJ_DLL pj_approx_2D_trans (PJ *P, PJ_DIRECTION direction, PJ_COORD coo);
PJ_COORD PROJ_DLL pj_approx_3D_trans (PJ *P, PJ_DIRECTION direction, PJ_COORD coo);
-void PROJ_DLL proj_log_error (PJ *P, const char *fmt, ...);
+/* Provision for gettext translatable strings */
+#define _(str) (str)
+
+void PROJ_DLL proj_log_error (const PJ *P, const char *fmt, ...);
void proj_log_debug (PJ *P, const char *fmt, ...);
void proj_log_trace (PJ *P, const char *fmt, ...);
@@ -598,72 +601,6 @@ struct FACTORS {
int code; /* always 0 */
};
-/* library errors */
-#define PJD_ERR_NO_ARGS -1
-#define PJD_ERR_NO_OPTION_IN_INIT_FILE -2
-#define PJD_ERR_NO_COLON_IN_INIT_STRING -3
-#define PJD_ERR_PROJ_NOT_NAMED -4
-#define PJD_ERR_UNKNOWN_PROJECTION_ID -5
-#define PJD_ERR_INVALID_ECCENTRICITY -6
-#define PJD_ERR_UNKNOWN_UNIT_ID -7
-#define PJD_ERR_INVALID_BOOLEAN_PARAM -8
-#define PJD_ERR_UNKNOWN_ELLP_PARAM -9
-#define PJD_ERR_REV_FLATTENING_IS_ZERO -10
-#define PJD_ERR_REF_RAD_LARGER_THAN_90 -11
-#define PJD_ERR_ES_LESS_THAN_ZERO -12
-#define PJD_ERR_MAJOR_AXIS_NOT_GIVEN -13
-#define PJD_ERR_LAT_OR_LON_EXCEED_LIMIT -14
-#define PJD_ERR_INVALID_X_OR_Y -15
-#define PJD_ERR_WRONG_FORMAT_DMS_VALUE -16
-#define PJD_ERR_NON_CONV_INV_MERI_DIST -17
-#define PJD_ERR_NON_CONV_SINHPSI2TANPHI -18
-#define PJD_ERR_ACOS_ASIN_ARG_TOO_LARGE -19
-#define PJD_ERR_TOLERANCE_CONDITION -20
-#define PJD_ERR_CONIC_LAT_EQUAL -21
-#define PJD_ERR_LAT_LARGER_THAN_90 -22
-#define PJD_ERR_LAT1_IS_ZERO -23
-#define PJD_ERR_LAT_TS_LARGER_THAN_90 -24
-#define PJD_ERR_CONTROL_POINT_NO_DIST -25
-#define PJD_ERR_NO_ROTATION_PROJ -26
-#define PJD_ERR_W_OR_M_ZERO_OR_LESS -27
-#define PJD_ERR_LSAT_NOT_IN_RANGE -28
-#define PJD_ERR_PATH_NOT_IN_RANGE -29
-#define PJD_ERR_INVALID_H -30
-#define PJD_ERR_K_LESS_THAN_ZERO -31
-#define PJD_ERR_LAT_1_OR_2_ZERO_OR_90 -32
-#define PJD_ERR_LAT_0_OR_ALPHA_EQ_90 -33
-#define PJD_ERR_ELLIPSOID_USE_REQUIRED -34
-#define PJD_ERR_INVALID_UTM_ZONE -35
-/* -36 no longer used */
-#define PJD_ERR_FAILED_TO_FIND_PROJ -37
-#define PJD_ERR_FAILED_TO_LOAD_GRID -38
-#define PJD_ERR_INVALID_M_OR_N -39
-#define PJD_ERR_N_OUT_OF_RANGE -40
-#define PJD_ERR_LAT_1_2_UNSPECIFIED -41
-#define PJD_ERR_ABS_LAT1_EQ_ABS_LAT2 -42
-#define PJD_ERR_LAT_0_HALF_PI_FROM_MEAN -43
-#define PJD_ERR_UNPARSEABLE_CS_DEF -44
-#define PJD_ERR_GEOCENTRIC -45
-#define PJD_ERR_UNKNOWN_PRIME_MERIDIAN -46
-#define PJD_ERR_AXIS -47
-#define PJD_ERR_GRID_AREA -48
-#define PJD_ERR_INVALID_SWEEP_AXIS -49
-#define PJD_ERR_MALFORMED_PIPELINE -50
-#define PJD_ERR_UNIT_FACTOR_LESS_THAN_0 -51
-#define PJD_ERR_INVALID_SCALE -52
-#define PJD_ERR_NON_CONVERGENT -53
-#define PJD_ERR_MISSING_ARGS -54
-#define PJD_ERR_LAT_0_IS_ZERO -55
-#define PJD_ERR_ELLIPSOIDAL_UNSUPPORTED -56
-#define PJD_ERR_TOO_MANY_INITS -57
-#define PJD_ERR_INVALID_ARG -58
-#define PJD_ERR_INCONSISTENT_UNIT -59
-#define PJD_ERR_MUTUALLY_EXCLUSIVE_ARGS -60
-#define PJD_ERR_GENERIC_ERROR -61
-#define PJD_ERR_NETWORK_ERROR -62
-/* NOTE: Remember to update src/strerrno.cpp, src/apps/gie.cpp and transient_error in */
-/* src/transform.cpp when adding new value */
-
// Legacy
struct projFileAPI_t;
@@ -707,6 +644,7 @@ struct projFileApiCallbackAndData
/* proj thread context */
struct pj_ctx{
+ std::string lastFullErrorMessage{}; // used by proj_context_errno_string
int last_errno = 0;
int debug_level = 0;
void (*logger)(void *, int, const char *) = nullptr;
diff --git a/src/proj_mdist.cpp b/src/proj_mdist.cpp
index ed07ffd1..9a819861 100644
--- a/src/proj_mdist.cpp
+++ b/src/proj_mdist.cpp
@@ -124,6 +124,6 @@ proj_inv_mdist(PJ_CONTEXT *ctx, double dist, const void *data) {
return phi;
}
/* convergence failed */
- proj_context_errno_set(ctx, PJD_ERR_NON_CONV_INV_MERI_DIST);
+ proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return phi;
}
diff --git a/src/projections/adams.cpp b/src/projections/adams.cpp
index d1217ff1..44e98a2c 100644
--- a/src/projections/adams.cpp
+++ b/src/projections/adams.cpp
@@ -99,7 +99,7 @@ static PJ_XY adams_forward(PJ_LP lp, PJ *P) {
switch (Q->mode) {
case GUYOU:
if ((fabs(lp.lam) - TOL) > M_PI_2) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error().xy;
}
@@ -119,7 +119,7 @@ static PJ_XY adams_forward(PJ_LP lp, PJ *P) {
break;
case PEIRCE_Q: {
if( lp.phi < -TOL ) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error().xy;
}
const double sl = sin(lp.lam);
@@ -134,7 +134,7 @@ static PJ_XY adams_forward(PJ_LP lp, PJ *P) {
case ADAMS_HEMI: {
const double sp = sin(lp.phi);
if ((fabs(lp.lam) - TOL) > M_PI_2) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error().xy;
}
a = cos(lp.phi) * sin(lp.lam);
@@ -208,7 +208,7 @@ static PJ *setup(PJ *P, projection_type mode) {
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;
P->es = 0;
diff --git a/src/projections/aea.cpp b/src/projections/aea.cpp
index af0f292d..c5b03158 100644
--- a/src/projections/aea.cpp
+++ b/src/projections/aea.cpp
@@ -107,7 +107,7 @@ static PJ_XY aea_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoid/spheroid, forward
struct pj_opaque *Q = static_cast<struct pj_opaque*>(P->opaque);
Q->rho = Q->c - (Q->ellips ? Q->n * pj_qsfn(sin(lp.phi), P->e, P->one_es) : Q->n2 * sin(lp.phi));;
if (Q->rho < 0.) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
Q->rho = Q->dd * sqrt(Q->rho);
@@ -134,12 +134,12 @@ static PJ_LP aea_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoid/spheroid, inverse
lp.phi = (Q->c - lp.phi * lp.phi) / Q->n;
if (fabs(Q->ec - fabs(lp.phi)) > TOL7) {
if (fabs(lp.phi) > 2 ) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
lp.phi = phi1_(lp.phi, P->e, P->one_es);
if (lp.phi == HUGE_VAL) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
} else
@@ -167,10 +167,21 @@ static PJ *setup(PJ *P) {
P->inv = aea_e_inverse;
P->fwd = aea_e_forward;
- if (fabs(Q->phi1) > M_HALFPI || fabs(Q->phi2) > M_HALFPI)
- return destructor(P, PJD_ERR_LAT_LARGER_THAN_90);
+ if (fabs(Q->phi1) > M_HALFPI)
+ {
+ proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be <= 90°"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
+ if (fabs(Q->phi2) > M_HALFPI)
+ {
+ proj_log_error(P, _("Invalid value for lat_2: |lat_2| should be <= 90°"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
if (fabs(Q->phi1 + Q->phi2) < EPS10)
- return destructor(P, PJD_ERR_CONIC_LAT_EQUAL);
+ {
+ proj_log_error(P, _("Invalid value for lat_1 and lat_2: |lat_1 + lat_2| should be > 0"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
double sinphi = sin(Q->phi1);
Q->n = sinphi;
double cosphi = cos(Q->phi1);
@@ -197,7 +208,8 @@ static PJ *setup(PJ *P) {
Q->n = (m1 * m1 - m2 * m2) / (ml2 - ml1);
if (Q->n == 0) {
// Not quite, but es is very close to 1...
- return destructor(P, PJD_ERR_INVALID_ECCENTRICITY);
+ proj_log_error(P, _("Invalid value for eccentricity"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
}
Q->ec = 1. - .5 * P->one_es * log((1. - P->e) /
@@ -221,7 +233,7 @@ static PJ *setup(PJ *P) {
PJ *PROJECTION(aea) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
@@ -234,7 +246,7 @@ PJ *PROJECTION(aea) {
PJ *PROJECTION(leac) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
diff --git a/src/projections/aeqd.cpp b/src/projections/aeqd.cpp
index d5d90b62..2a42f379 100644
--- a/src/projections/aeqd.cpp
+++ b/src/projections/aeqd.cpp
@@ -149,7 +149,7 @@ static PJ_XY aeqd_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward
oblcon:
if (fabs(fabs(xy.y) - 1.) < TOL)
if (xy.y < 0.) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
else
@@ -168,7 +168,7 @@ oblcon:
/*-fallthrough*/
case S_POLE:
if (fabs(lp.phi - M_HALFPI) < EPS10) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
xy.y = (M_HALFPI + lp.phi);
@@ -239,7 +239,7 @@ static PJ_LP aeqd_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse
c_rh = hypot(xy.x, xy.y);
if (c_rh > M_PI) {
if (c_rh - EPS10 > M_PI) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
c_rh = M_PI;
@@ -276,7 +276,7 @@ static PJ_LP aeqd_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse
PJ *PROJECTION(aeqd) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
diff --git a/src/projections/airy.cpp b/src/projections/airy.cpp
index 15ff60d8..d162aba6 100644
--- a/src/projections/airy.cpp
+++ b/src/projections/airy.cpp
@@ -74,14 +74,14 @@ static PJ_XY airy_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward
if (Q->mode == OBLIQ)
cosz = Q->sinph0 * sinphi + Q->cosph0 * cosz;
if (!Q->no_cut && cosz < -EPS) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
s = 1. - cosz;
if (fabs(s) > EPS) {
t = 0.5 * (1. + cosz);
if(t == 0) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
Krho = -log(t)/s - Q->Cb / t;
@@ -97,7 +97,7 @@ static PJ_XY airy_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward
case N_POLE:
lp.phi = fabs(Q->p_halfpi - lp.phi);
if (!Q->no_cut && (lp.phi - EPS) > M_HALFPI) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
lp.phi *= 0.5;
@@ -122,7 +122,7 @@ PJ *PROJECTION(airy) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
diff --git a/src/projections/aitoff.cpp b/src/projections/aitoff.cpp
index 857ebb80..1051c711 100644
--- a/src/projections/aitoff.cpp
+++ b/src/projections/aitoff.cpp
@@ -123,7 +123,7 @@ static PJ_LP aitoff_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver
C = 1. - D * D;
const double denom = pow(C, 1.5);
if( denom == 0 ) {
- proj_errno_set(P, PJD_ERR_NON_CONVERGENT);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
D = acos(D) / denom;
@@ -170,7 +170,7 @@ static PJ_LP aitoff_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver
if (iter == MAXITER && round == MAXROUND)
{
- proj_context_errno_set( P->ctx, PJD_ERR_NON_CONVERGENT );
+ proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN );
/* fprintf(stderr, "Warning: Accuracy of 1e-12 not reached. Last increments: dlat=%e and dlon=%e\n", dp, dl); */
}
@@ -189,7 +189,7 @@ static PJ *setup(PJ *P) {
PJ *PROJECTION(aitoff) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->mode = AITOFF;
@@ -200,13 +200,16 @@ PJ *PROJECTION(aitoff) {
PJ *PROJECTION(wintri) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->mode = WINKEL_TRIPEL;
if (pj_param(P->ctx, P->params, "tlat_1").i) {
if ((Q->cosphi1 = cos(pj_param(P->ctx, P->params, "rlat_1").f)) == 0.)
- return pj_default_destructor (P, PJD_ERR_LAT_LARGER_THAN_90);
+ {
+ proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be < 90°"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
}
else /* 50d28' or acos(2/pi) */
Q->cosphi1 = 0.636619772367581343;
diff --git a/src/projections/bacon.cpp b/src/projections/bacon.cpp
index 7ff2a7ac..c236e943 100644
--- a/src/projections/bacon.cpp
+++ b/src/projections/bacon.cpp
@@ -45,7 +45,7 @@ static PJ_XY bacon_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar
PJ *PROJECTION(bacon) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->bacn = 1;
@@ -59,7 +59,7 @@ PJ *PROJECTION(bacon) {
PJ *PROJECTION(apian) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->bacn = Q->ortl = 0;
@@ -72,7 +72,7 @@ PJ *PROJECTION(apian) {
PJ *PROJECTION(ortel) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->bacn = 0;
diff --git a/src/projections/bertin1953.cpp b/src/projections/bertin1953.cpp
index 58509e16..db7aa7c8 100644
--- a/src/projections/bertin1953.cpp
+++ b/src/projections/bertin1953.cpp
@@ -77,7 +77,7 @@ static PJ_XY bertin1953_s_forward (PJ_LP lp, PJ *P) {
PJ *PROJECTION(bertin1953) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->lam0 = 0;
diff --git a/src/projections/bipc.cpp b/src/projections/bipc.cpp
index 743acd1c..e89e189a 100644
--- a/src/projections/bipc.cpp
+++ b/src/projections/bipc.cpp
@@ -60,7 +60,7 @@ static PJ_XY bipc_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward
z = S20 * sphi + C20 * cphi * cdlam;
if (fabs(z) > 1.) {
if (fabs(z) > ONEEPS) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
else z = z < 0. ? -1. : 1.;
@@ -74,7 +74,7 @@ static PJ_XY bipc_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward
z = S45 * (sphi + cphi * cdlam);
if (fabs(z) > 1.) {
if (fabs(z) > ONEEPS) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
else z = z < 0. ? -1. : 1.;
@@ -84,19 +84,19 @@ static PJ_XY bipc_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward
xy.y = -rhoc;
}
if (z < 0.) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
t = pow(tan(.5 * z), n);
r = F * t;
if ((al = .5 * (R104 - z)) < 0.) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
al = (t + pow(al, n)) / T;
if (fabs(al) > 1.) {
if (fabs(al) > ONEEPS) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
else al = al < 0. ? -1. : 1.;
@@ -153,7 +153,7 @@ static PJ_LP bipc_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse
rl = r;
}
if (! i) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
Az = Av - Az / n;
@@ -170,7 +170,7 @@ static PJ_LP bipc_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse
PJ *PROJECTION(bipc) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->noskew = pj_param(P->ctx, P->params, "bns").i;
diff --git a/src/projections/bonne.cpp b/src/projections/bonne.cpp
index 7817e968..1728a477 100644
--- a/src/projections/bonne.cpp
+++ b/src/projections/bonne.cpp
@@ -65,7 +65,7 @@ static PJ_LP bonne_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers
rh = hypot(xy.x, xy.y);
lp.phi = Q->cphi1 + Q->phi1 - rh;
if (fabs(lp.phi) > M_HALFPI) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
if (fabs(fabs(lp.phi) - M_HALFPI) <= EPS10)
@@ -91,7 +91,7 @@ static PJ_LP bonne_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, invers
} else if (fabs(s - M_HALFPI) <= EPS10)
lp.lam = 0.;
else {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
return lp;
@@ -115,18 +115,21 @@ PJ *PROJECTION(bonne) {
double c;
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f;
if (fabs(Q->phi1) < EPS10)
- return destructor (P, PJD_ERR_LAT1_IS_ZERO);
+ {
+ proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be > 0"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
if (P->es != 0.0) {
Q->en = pj_enfn(P->es);
if (nullptr==Q->en)
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
Q->am1 = sin(Q->phi1);
c = cos(Q->phi1);
Q->m1 = pj_mlfn(Q->phi1, Q->am1, c, Q->en);
diff --git a/src/projections/calcofi.cpp b/src/projections/calcofi.cpp
index d1e96de8..b9528ab9 100644
--- a/src/projections/calcofi.cpp
+++ b/src/projections/calcofi.cpp
@@ -44,7 +44,7 @@ static PJ_XY calcofi_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, forw
line as xy xy, r, o form a right triangle */
if (fabs(fabs(lp.phi) - M_HALFPI) <= EPS10) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
@@ -73,7 +73,7 @@ static PJ_XY calcofi_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forw
double l2;
double ry;
if (fabs(fabs(lp.phi) - M_HALFPI) <= EPS10) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
xy.x = lp.lam;
diff --git a/src/projections/cass.cpp b/src/projections/cass.cpp
index f5531f6a..9902f9d7 100644
--- a/src/projections/cass.cpp
+++ b/src/projections/cass.cpp
@@ -113,12 +113,12 @@ PJ *PROJECTION(cass) {
/* otherwise it's ellipsoidal */
P->opaque = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque)));
if (nullptr==P->opaque)
- return pj_default_destructor (P, ENOMEM);
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
P->destructor = destructor;
static_cast<struct pj_opaque*>(P->opaque)->en = pj_enfn (P->es);
if (nullptr==static_cast<struct pj_opaque*>(P->opaque)->en)
- return pj_default_destructor (P, ENOMEM);
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
static_cast<struct pj_opaque*>(P->opaque)->m0 = pj_mlfn (P->phi0, sin (P->phi0), cos (P->phi0), static_cast<struct pj_opaque*>(P->opaque)->en);
P->inv = cass_e_inverse;
diff --git a/src/projections/cc.cpp b/src/projections/cc.cpp
index 244e185d..f15a95bd 100644
--- a/src/projections/cc.cpp
+++ b/src/projections/cc.cpp
@@ -12,7 +12,7 @@ PROJ_HEAD(cc, "Central Cylindrical") "\n\tCyl, Sph";
static PJ_XY cc_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward */
PJ_XY xy = {0.0,0.0};
if (fabs (fabs(lp.phi) - M_HALFPI) <= EPS10) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
xy.x = lp.lam;
diff --git a/src/projections/ccon.cpp b/src/projections/ccon.cpp
index 7b3b7105..5f58d536 100644
--- a/src/projections/ccon.cpp
+++ b/src/projections/ccon.cpp
@@ -84,16 +84,18 @@ PJ *PROJECTION(ccon) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f;
if (fabs(Q->phi1) < EPS10)
- return destructor (P, PJD_ERR_LAT1_IS_ZERO);
-
+ {
+ proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be > 0"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
if (!(Q->en = pj_enfn(P->es)))
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
Q->sinphi1 = sin(Q->phi1);
Q->cosphi1 = cos(Q->phi1);
diff --git a/src/projections/cea.cpp b/src/projections/cea.cpp
index b7874b90..0d850b49 100644
--- a/src/projections/cea.cpp
+++ b/src/projections/cea.cpp
@@ -53,7 +53,7 @@ static PJ_LP cea_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse
lp.phi = asin(xy.y);
lp.lam = xy.x / P->k0;
} else {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
return (lp);
@@ -75,15 +75,19 @@ PJ *PROJECTION(cea) {
double t = 0.0;
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
if (pj_param(P->ctx, P->params, "tlat_ts").i) {
- P->k0 = cos(t = pj_param(P->ctx, P->params, "rlat_ts").f);
+ t = pj_param(P->ctx, P->params, "rlat_ts").f;
+ P->k0 = cos(t);
if (P->k0 < 0.)
- return pj_default_destructor (P, PJD_ERR_LAT_TS_LARGER_THAN_90);
+ {
+ proj_log_error(P, _("Invalid value for lat_ts: |lat_ts| should be <= 90°"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
}
if (P->es != 0.0) {
t = sin(t);
@@ -91,7 +95,7 @@ PJ *PROJECTION(cea) {
P->e = sqrt(P->es);
Q->apa = pj_authset(P->es);
if (!(Q->apa))
- return pj_default_destructor(P, ENOMEM);
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
Q->qp = pj_qsfn(1., P->e, P->one_es);
P->inv = cea_e_inverse;
diff --git a/src/projections/chamb.cpp b/src/projections/chamb.cpp
index b315832a..ca5d6d82 100644
--- a/src/projections/chamb.cpp
+++ b/src/projections/chamb.cpp
@@ -105,7 +105,7 @@ PJ *PROJECTION(chamb) {
char line[10];
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
@@ -123,7 +123,10 @@ PJ *PROJECTION(chamb) {
Q->c[i].v = vect(P->ctx,Q->c[j].phi - Q->c[i].phi, Q->c[i].cosphi, Q->c[i].sinphi,
Q->c[j].cosphi, Q->c[j].sinphi, Q->c[j].lam - Q->c[i].lam);
if (Q->c[i].v.r == 0.0)
- return pj_default_destructor (P, PJD_ERR_CONTROL_POINT_NO_DIST);
+ {
+ proj_log_error(P, _("Invalid value for control points: they should be distinct"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
/* co-linearity problem ignored for now */
}
Q->beta_0 = lc(P->ctx,Q->c[0].v.r, Q->c[2].v.r, Q->c[1].v.r);
diff --git a/src/projections/col_urban.cpp b/src/projections/col_urban.cpp
index de0c178f..6d8157b6 100644
--- a/src/projections/col_urban.cpp
+++ b/src/projections/col_urban.cpp
@@ -56,7 +56,7 @@ static PJ_LP col_urban_inverse (PJ_XY xy, PJ *P) {
PJ *PROJECTION(col_urban) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
const double h0_unscaled = pj_param(P->ctx, P->params, "dh_0").f;
diff --git a/src/projections/collg.cpp b/src/projections/collg.cpp
index 1b9d2da7..958dfddb 100644
--- a/src/projections/collg.cpp
+++ b/src/projections/collg.cpp
@@ -32,7 +32,7 @@ static PJ_LP collg_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers
if (fabs(lp.phi) < 1.)
lp.phi = asin(lp.phi);
else if (fabs(lp.phi) > ONEEPS) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
} else {
lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI;
diff --git a/src/projections/comill.cpp b/src/projections/comill.cpp
index 44524990..910d8aa7 100644
--- a/src/projections/comill.cpp
+++ b/src/projections/comill.cpp
@@ -66,7 +66,7 @@ static PJ_LP comill_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver
}
}
if( i == 0 )
- proj_context_errno_set( P->ctx, PJD_ERR_NON_CONVERGENT );
+ proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN );
lp.phi = yc;
/* longitude */
diff --git a/src/projections/eck2.cpp b/src/projections/eck2.cpp
index 0d9fd5fa..891ad30e 100644
--- a/src/projections/eck2.cpp
+++ b/src/projections/eck2.cpp
@@ -34,7 +34,7 @@ static PJ_LP eck2_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse
lp.phi = (4. - lp.phi * lp.phi) * C13;
if (fabs(lp.phi) >= 1.) {
if (fabs(lp.phi) > ONEEPS) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
} else {
lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI;
diff --git a/src/projections/eck3.cpp b/src/projections/eck3.cpp
index 2563053f..cd0ccdf9 100644
--- a/src/projections/eck3.cpp
+++ b/src/projections/eck3.cpp
@@ -54,7 +54,7 @@ static PJ *setup(PJ *P) {
PJ *PROJECTION(eck3) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->C_x = 0.42223820031577120149;
@@ -69,7 +69,7 @@ PJ *PROJECTION(eck3) {
PJ *PROJECTION(kav7) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
/* Defined twice in original code - Using 0.866...,
@@ -87,7 +87,7 @@ PJ *PROJECTION(kav7) {
PJ *PROJECTION(wag6) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->C_x = 0.94745;
@@ -102,7 +102,7 @@ PJ *PROJECTION(wag6) {
PJ *PROJECTION(putp1) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->C_x = 1.89490;
diff --git a/src/projections/eqc.cpp b/src/projections/eqc.cpp
index 9ebc9286..fd385bb2 100644
--- a/src/projections/eqc.cpp
+++ b/src/projections/eqc.cpp
@@ -41,11 +41,14 @@ static PJ_LP eqc_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse
PJ *PROJECTION(eqc) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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->rc = cos(pj_param(P->ctx, P->params, "rlat_ts").f)) <= 0.)
- return pj_default_destructor (P, PJD_ERR_LAT_TS_LARGER_THAN_90);
+ {
+ proj_log_error(P, _("Invalid value for lat_ts: |lat_ts| should be <= 90°"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
P->inv = eqc_s_inverse;
P->fwd = eqc_s_forward;
P->es = 0.;
diff --git a/src/projections/eqdc.cpp b/src/projections/eqdc.cpp
index 28767d74..4f49c136 100644
--- a/src/projections/eqdc.cpp
+++ b/src/projections/eqdc.cpp
@@ -79,20 +79,32 @@ PJ *PROJECTION(eqdc) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f;
Q->phi2 = pj_param(P->ctx, P->params, "rlat_2").f;
- if (fabs(Q->phi1) > M_HALFPI || fabs(Q->phi2) > M_HALFPI)
- return destructor(P, PJD_ERR_LAT_LARGER_THAN_90);
+ if (fabs(Q->phi1) > M_HALFPI)
+ {
+ proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be <= 90°"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
+
+ if (fabs(Q->phi2) > M_HALFPI)
+ {
+ proj_log_error(P, _("Invalid value for lat_2: |lat_2| should be <= 90°"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
if (fabs(Q->phi1 + Q->phi2) < EPS10)
- return destructor (P, PJD_ERR_CONIC_LAT_EQUAL);
+ {
+ proj_log_error(P, _("Invalid value for lat_1 and lat_2: |lat_1 + lat_2| should be > 0"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
if (!(Q->en = pj_enfn(P->es)))
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
sinphi = sin(Q->phi1);
Q->n = sinphi;
@@ -111,7 +123,8 @@ PJ *PROJECTION(eqdc) {
(pj_mlfn(Q->phi2, sinphi, cosphi, Q->en) - ml1);
if (Q->n == 0) {
// Not quite, but es is very close to 1...
- return destructor(P, PJD_ERR_INVALID_ECCENTRICITY);
+ proj_log_error(P, _("Invalid value for eccentricity"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
}
Q->c = ml1 + m1 / Q->n;
@@ -121,7 +134,10 @@ PJ *PROJECTION(eqdc) {
if (secant)
Q->n = (cosphi - cos(Q->phi2)) / (Q->phi2 - Q->phi1);
if (Q->n == 0)
- return destructor (P, PJD_ERR_CONIC_LAT_EQUAL);
+ {
+ proj_log_error(P, _("Invalid value for lat_1 and lat_2: lat_1 + lat_2 should be > 0"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
Q->c = Q->phi1 + cos(Q->phi1) / Q->n;
Q->rho0 = Q->c - P->phi0;
}
diff --git a/src/projections/eqearth.cpp b/src/projections/eqearth.cpp
index 2ef2775b..9600e039 100644
--- a/src/projections/eqearth.cpp
+++ b/src/projections/eqearth.cpp
@@ -110,7 +110,7 @@ static PJ_LP eqearth_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal/sphe
}
if( i == 0 ) {
- proj_context_errno_set( P->ctx, PJD_ERR_NON_CONVERGENT );
+ proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN );
return lp;
}
@@ -145,7 +145,7 @@ static PJ *destructor (PJ *P, int errlev) { /* Destructor */
PJ *PROJECTION(eqearth) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
P->fwd = eqearth_e_forward;
@@ -156,7 +156,7 @@ PJ *PROJECTION(eqearth) {
if (P->es != 0.0) {
Q->apa = pj_authset(P->es); /* For auth_lat(). */
if (nullptr == Q->apa)
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
Q->qp = pj_qsfn(1.0, P->e, P->one_es); /* For auth_lat(). */
Q->rqda = sqrt(0.5*Q->qp); /* Authalic radius divided by major axis */
}
diff --git a/src/projections/fouc_s.cpp b/src/projections/fouc_s.cpp
index f7607635..5a560d97 100644
--- a/src/projections/fouc_s.cpp
+++ b/src/projections/fouc_s.cpp
@@ -57,12 +57,15 @@ static PJ_LP fouc_s_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver
PJ *PROJECTION(fouc_s) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->n = pj_param(P->ctx, P->params, "dn").f;
if (Q->n < 0. || Q->n > 1.)
- return pj_default_destructor (P, PJD_ERR_N_OUT_OF_RANGE);
+ {
+ proj_log_error(P, _("Invalid value for n: it should be in [0,1] range."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
Q->n1 = 1. - Q->n;
P->es = 0;
diff --git a/src/projections/geos.cpp b/src/projections/geos.cpp
index 5de4c7ca..8d05dd24 100644
--- a/src/projections/geos.cpp
+++ b/src/projections/geos.cpp
@@ -99,7 +99,7 @@ static PJ_XY geos_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, forward
/* Check visibility. */
if (((Q->radius_g - Vx) * Vx - Vy * Vy - Vz * Vz * Q->radius_p_inv2) < 0.) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
@@ -138,7 +138,7 @@ static PJ_LP geos_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse
b = 2 * Q->radius_g * Vx;
const double det = (b * b) - 4 * a * Q->C;
if (det < 0.) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
@@ -178,7 +178,7 @@ static PJ_LP geos_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse
b = 2 * Q->radius_g * Vx;
const double det = (b * b) - 4 * a * Q->C;
if (det < 0.) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
@@ -201,7 +201,7 @@ PJ *PROJECTION(geos) {
char *sweep_axis;
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->h = pj_param(P->ctx, P->params, "dh").f;
@@ -212,7 +212,10 @@ PJ *PROJECTION(geos) {
else {
if ((sweep_axis[0] != 'x' && sweep_axis[0] != 'y') ||
sweep_axis[1] != '\0')
- return pj_default_destructor (P, PJD_ERR_INVALID_SWEEP_AXIS);
+ {
+ proj_log_error(P, _("Invalid value for sweep: it should be equal to x or y."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
if (sweep_axis[0] == 'x')
Q->flip_axis = 1;
@@ -222,7 +225,10 @@ PJ *PROJECTION(geos) {
Q->radius_g_1 = Q->h / P->a;
if ( Q->radius_g_1 <= 0 || Q->radius_g_1 > 1e10 )
- return pj_default_destructor (P, PJD_ERR_INVALID_H);
+ {
+ proj_log_error(P, _("Invalid value for h."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
Q->radius_g = 1. + Q->radius_g_1;
Q->C = Q->radius_g * Q->radius_g - 1.0;
if (P->es != 0.0) {
diff --git a/src/projections/gn_sinu.cpp b/src/projections/gn_sinu.cpp
index ef312613..5d3f9491 100644
--- a/src/projections/gn_sinu.cpp
+++ b/src/projections/gn_sinu.cpp
@@ -46,7 +46,7 @@ static PJ_LP gn_sinu_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inve
} else if ((s - EPS10) < M_HALFPI) {
lp.lam = 0.;
} else {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
}
return lp;
@@ -71,7 +71,7 @@ static PJ_XY gn_sinu_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forw
break;
}
if (!i) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
@@ -123,12 +123,12 @@ static void setup(PJ *P) {
PJ *PROJECTION(sinu) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
if (!(Q->en = pj_enfn(P->es)))
- return pj_default_destructor (P, ENOMEM);
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
if (P->es != 0.0) {
P->inv = gn_sinu_e_inverse;
@@ -145,7 +145,7 @@ PJ *PROJECTION(sinu) {
PJ *PROJECTION(eck6) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
@@ -160,7 +160,7 @@ PJ *PROJECTION(eck6) {
PJ *PROJECTION(mbtfps) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
@@ -175,17 +175,33 @@ PJ *PROJECTION(mbtfps) {
PJ *PROJECTION(gn_sinu) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
- if (pj_param(P->ctx, P->params, "tn").i && pj_param(P->ctx, P->params, "tm").i) {
- Q->n = pj_param(P->ctx, P->params, "dn").f;
- Q->m = pj_param(P->ctx, P->params, "dm").f;
- if (Q->n <= 0 || Q->m < 0)
- return destructor (P, PJD_ERR_INVALID_M_OR_N);
- } else
- return destructor (P, PJD_ERR_INVALID_M_OR_N);
+ if (!pj_param(P->ctx, P->params, "tn").i )
+ {
+ proj_log_error(P, _("Missing parameter n."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
+ }
+ if (!pj_param(P->ctx, P->params, "tm").i )
+ {
+ proj_log_error(P, _("Missing parameter m."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
+ }
+
+ Q->n = pj_param(P->ctx, P->params, "dn").f;
+ Q->m = pj_param(P->ctx, P->params, "dm").f;
+ if (Q->n <= 0)
+ {
+ proj_log_error(P, _("Invalid value for n: it should be > 0."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
+ if (Q->m < 0)
+ {
+ proj_log_error(P, _("Invalid value for m: it should be >= 0."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
setup(P);
diff --git a/src/projections/gnom.cpp b/src/projections/gnom.cpp
index 9abbb7ce..0d53cfab 100644
--- a/src/projections/gnom.cpp
+++ b/src/projections/gnom.cpp
@@ -54,7 +54,7 @@ static PJ_XY gnom_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward
}
if (xy.y <= EPS10) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
@@ -126,7 +126,7 @@ static PJ_LP gnom_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse
PJ *PROJECTION(gnom) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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 (fabs(fabs(P->phi0) - M_HALFPI) < EPS10) {
diff --git a/src/projections/goode.cpp b/src/projections/goode.cpp
index c0afd2d8..1107d203 100644
--- a/src/projections/goode.cpp
+++ b/src/projections/goode.cpp
@@ -64,7 +64,7 @@ static PJ *destructor (PJ *P, int errlev) { /* Destructor */
PJ *PROJECTION(goode) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
@@ -72,14 +72,14 @@ PJ *PROJECTION(goode) {
Q->sinu = pj_sinu(nullptr);
Q->moll = pj_moll(nullptr);
if (Q->sinu == nullptr || Q->moll == nullptr)
- return destructor (P, ENOMEM);
+ return destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
Q->sinu->es = 0.;
Q->sinu->ctx = P->ctx;
Q->moll->ctx = P->ctx;
Q->sinu = pj_sinu(Q->sinu);
Q->moll = pj_moll(Q->moll);
if (Q->sinu == nullptr || Q->moll == nullptr)
- return destructor (P, ENOMEM);
+ return destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
P->fwd = goode_s_forward;
P->inv = goode_s_inverse;
diff --git a/src/projections/gstmerc.cpp b/src/projections/gstmerc.cpp
index b21f6ffd..8957d05d 100644
--- a/src/projections/gstmerc.cpp
+++ b/src/projections/gstmerc.cpp
@@ -56,7 +56,7 @@ static PJ_LP gstmerc_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inve
PJ *PROJECTION(gstmerc) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->lamc = P->lam0;
diff --git a/src/projections/hammer.cpp b/src/projections/hammer.cpp
index d9bcafc7..5a183082 100644
--- a/src/projections/hammer.cpp
+++ b/src/projections/hammer.cpp
@@ -28,7 +28,7 @@ static PJ_XY hammer_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwa
lp.lam *= Q->w;
double denom = 1. + cosphi * cos(lp.lam);
if( denom == 0.0 ) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error().xy;
}
d = sqrt(2./denom);
@@ -47,7 +47,7 @@ static PJ_LP hammer_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver
if (fabs(2.*z*z-1.) < EPS) {
lp.lam = HUGE_VAL;
lp.phi = HUGE_VAL;
- proj_errno_set(P, PJD_ERR_LAT_OR_LON_EXCEED_LIMIT);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
} else {
lp.lam = aatan2(Q->w * xy.x * z,2. * z * z - 1)/Q->w;
lp.phi = aasin(P->ctx,z * xy.y);
@@ -59,19 +59,25 @@ static PJ_LP hammer_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver
PJ *PROJECTION(hammer) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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 (pj_param(P->ctx, P->params, "tW").i) {
Q->w = fabs(pj_param(P->ctx, P->params, "dW").f);
if (Q->w <= 0.)
- return pj_default_destructor (P, PJD_ERR_W_OR_M_ZERO_OR_LESS);
+ {
+ proj_log_error(P, _("Invalid value for W: it should be > 0"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
} else
Q->w = .5;
if (pj_param(P->ctx, P->params, "tM").i) {
Q->m = fabs(pj_param(P->ctx, P->params, "dM").f);
if (Q->m <= 0.)
- return pj_default_destructor (P, PJD_ERR_W_OR_M_ZERO_OR_LESS);
+ {
+ proj_log_error(P, _("Invalid value for M: it should be > 0"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
} else
Q->m = 1.;
diff --git a/src/projections/hatano.cpp b/src/projections/hatano.cpp
index c10c4e35..4897435f 100644
--- a/src/projections/hatano.cpp
+++ b/src/projections/hatano.cpp
@@ -47,7 +47,7 @@ static PJ_LP hatano_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver
th = xy.y * ( xy.y < 0. ? RYCS : RYCN);
if (fabs(th) > 1.) {
if (fabs(th) > ONETOL) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
} else {
th = th > 0. ? M_HALFPI : - M_HALFPI;
@@ -61,7 +61,7 @@ static PJ_LP hatano_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver
lp.phi = (th + sin(th)) * (xy.y < 0. ? RCS : RCN);
if (fabs(lp.phi) > 1.) {
if (fabs(lp.phi) > ONETOL) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
} else {
lp.phi = lp.phi > 0. ? M_HALFPI : - M_HALFPI;
diff --git a/src/projections/healpix.cpp b/src/projections/healpix.cpp
index c778f28f..b6863fad 100644
--- a/src/projections/healpix.cpp
+++ b/src/projections/healpix.cpp
@@ -524,7 +524,7 @@ static PJ_LP s_healpix_inverse(PJ_XY xy, PJ *P) { /* sphere */
PJ_LP lp;
lp.lam = HUGE_VAL;
lp.phi = HUGE_VAL;
- proj_context_errno_set(P->ctx, PJD_ERR_INVALID_X_OR_Y);
+ proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
return healpix_spherhealpix_e_inverse(xy);
@@ -540,7 +540,7 @@ static PJ_LP e_healpix_inverse(PJ_XY xy, PJ *P) { /* ellipsoid */
if (in_image(xy.x, xy.y, 0, 0, 0) == 0) {
lp.lam = HUGE_VAL;
lp.phi = HUGE_VAL;
- proj_context_errno_set(P->ctx, PJD_ERR_INVALID_X_OR_Y);
+ proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
lp = healpix_spherhealpix_e_inverse(xy);
@@ -574,7 +574,7 @@ static PJ_LP s_rhealpix_inverse(PJ_XY xy, PJ *P) { /* sphere */
PJ_LP lp;
lp.lam = HUGE_VAL;
lp.phi = HUGE_VAL;
- proj_context_errno_set(P->ctx, PJD_ERR_INVALID_X_OR_Y);
+ proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
xy = combine_caps(xy.x, xy.y, Q->north_square, Q->south_square, 1);
@@ -590,7 +590,7 @@ static PJ_LP e_rhealpix_inverse(PJ_XY xy, PJ *P) { /* ellipsoid */
if (in_image(xy.x, xy.y, 1, Q->north_square, Q->south_square) == 0) {
lp.lam = HUGE_VAL;
lp.phi = HUGE_VAL;
- proj_context_errno_set(P->ctx, PJD_ERR_INVALID_X_OR_Y);
+ proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
xy = combine_caps(xy.x, xy.y, Q->north_square, Q->south_square, 1);
@@ -615,7 +615,7 @@ static PJ *destructor (PJ *P, int errlev) { /* Destructor
PJ *PROJECTION(healpix) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
@@ -625,7 +625,7 @@ PJ *PROJECTION(healpix) {
if (P->es != 0.0) {
Q->apa = pj_authset(P->es); /* For auth_lat(). */
if (nullptr==Q->apa)
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
Q->qp = pj_qsfn(1.0, P->e, P->one_es); /* For auth_lat(). */
P->a = P->a*sqrt(0.5*Q->qp); /* Set P->a to authalic radius. */
pj_calc_ellipsoid_params (P, P->a, P->es); /* Ensure we have a consistent parameter set */
@@ -643,7 +643,7 @@ PJ *PROJECTION(healpix) {
PJ *PROJECTION(rhealpix) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
@@ -652,13 +652,19 @@ PJ *PROJECTION(rhealpix) {
/* Check for valid north_square and south_square inputs. */
if (Q->north_square < 0 || Q->north_square > 3)
- return destructor (P, PJD_ERR_AXIS);
+ {
+ proj_log_error(P, _("Invalid value for north_square: it should be in [0,3] range."));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
if (Q->south_square < 0 || Q->south_square > 3)
- return destructor (P, PJD_ERR_AXIS);
+ {
+ proj_log_error(P, _("Invalid value for south_square: it should be in [0,3] range."));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
if (P->es != 0.0) {
Q->apa = pj_authset(P->es); /* For auth_lat(). */
if (nullptr==Q->apa)
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
Q->qp = pj_qsfn(1.0, P->e, P->one_es); /* For auth_lat(). */
P->a = P->a*sqrt(0.5*Q->qp); /* Set P->a to authalic radius. */
P->ra = 1.0/P->a;
diff --git a/src/projections/igh.cpp b/src/projections/igh.cpp
index 8aaaaba1..9e51addf 100644
--- a/src/projections/igh.cpp
+++ b/src/projections/igh.cpp
@@ -210,7 +210,7 @@ PJ *PROJECTION(igh) {
PJ_LP lp = { 0, phi_boundary };
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
@@ -222,7 +222,7 @@ PJ *PROJECTION(igh) {
!setup_zone(P, Q, 7, pj_sinu, d20, 0, d20) ||
!setup_zone(P, Q, 8, pj_sinu, d140, 0, d140))
{
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
}
/* mollweide zones */
@@ -243,7 +243,7 @@ PJ *PROJECTION(igh) {
!setup_zone(P, Q,11, pj_moll, d20, -Q->dy0, d20) ||
!setup_zone(P, Q,12, pj_moll, d140, -Q->dy0, d140))
{
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
}
P->inv = igh_s_inverse;
diff --git a/src/projections/igh_o.cpp b/src/projections/igh_o.cpp
index 80874845..1a7485e1 100644
--- a/src/projections/igh_o.cpp
+++ b/src/projections/igh_o.cpp
@@ -224,7 +224,7 @@ PJ *PROJECTION(igh_o) {
PJ_LP lp = { 0, phi_boundary };
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
@@ -236,13 +236,13 @@ PJ *PROJECTION(igh_o) {
!setup_zone(P, Q, 8, pj_sinu, d20, 0, d20) ||
!setup_zone(P, Q, 9, pj_sinu, d150, 0, d150))
{
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
}
/* mollweide zones */
if (!setup_zone(P, Q, 1, pj_moll, -d140, 0, -d140)) {
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
}
/* y0 ? */
@@ -260,7 +260,7 @@ PJ *PROJECTION(igh_o) {
!setup_zone(P, Q, 11, pj_moll, d20, -Q->dy0, d20) ||
!setup_zone(P, Q, 12, pj_moll, d150, -Q->dy0, d150))
{
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
}
P->inv = igh_o_s_inverse;
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<struct pj_opaque*>(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<struct pj_opaque*>(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);
}
diff --git a/src/projections/isea.cpp b/src/projections/isea.cpp
index 77a5689b..7a782f3d 100644
--- a/src/projections/isea.cpp
+++ b/src/projections/isea.cpp
@@ -1026,7 +1026,7 @@ static PJ_XY isea_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward
try {
out = isea_forward(&Q->dgg, &in);
} catch( const char* ) {
- proj_errno_set(P, PJD_ERR_NON_CONVERGENT);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error().xy;
}
@@ -1041,7 +1041,7 @@ PJ *PROJECTION(isea) {
char *opt;
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
@@ -1059,7 +1059,8 @@ PJ *PROJECTION(isea) {
} else if (!strcmp(opt, "pole")) {
isea_orient_pole(&Q->dgg);
} else {
- return pj_default_destructor(P, PJD_ERR_ELLIPSOID_USE_REQUIRED);
+ proj_log_error(P, _("Invalid value for orient: only isea or pole are supported"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
}
@@ -1089,8 +1090,8 @@ PJ *PROJECTION(isea) {
Q->dgg.output = ISEA_HEX;
}
else {
- /* TODO verify error code. Possibly eliminate magic */
- return pj_default_destructor(P, PJD_ERR_ELLIPSOID_USE_REQUIRED);
+ proj_log_error(P, _("Invalid value for mode: only plane, di, dd or hex are supported"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
}
diff --git a/src/projections/krovak.cpp b/src/projections/krovak.cpp
index adc039fe..2afe3672 100644
--- a/src/projections/krovak.cpp
+++ b/src/projections/krovak.cpp
@@ -181,7 +181,7 @@ static PJ_LP krovak_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal,
fi1 = lp.phi;
}
if( i == 0 )
- proj_context_errno_set( P->ctx, PJD_ERR_NON_CONVERGENT );
+ proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN );
lp.lam -= P->lam0;
@@ -193,7 +193,7 @@ PJ *PROJECTION(krovak) {
double u0, n0, g;
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
/* we want Bessel as fixed ellipsoid */
@@ -225,7 +225,8 @@ PJ *PROJECTION(krovak) {
g = pow( (1. + P->e * sin(P->phi0)) / (1. - P->e * sin(P->phi0)) , Q->alpha * P->e / 2. );
double tan_half_phi0_plus_pi_4 = tan(P->phi0 / 2. + M_PI_4);
if( tan_half_phi0_plus_pi_4 == 0.0 ) {
- return pj_default_destructor(P, PJD_ERR_INVALID_ARG);
+ proj_log_error(P, _("Invalid value for lat_0: lat_0 + PI/4 should be different from 0"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
Q->k = tan( u0 / 2. + M_PI_4) / pow (tan_half_phi0_plus_pi_4 , Q->alpha) * g;
n0 = sqrt(1. - P->es) / (1. - P->es * pow(sin(P->phi0), 2));
diff --git a/src/projections/labrd.cpp b/src/projections/labrd.cpp
index 4fbcf460..b17e71e9 100644
--- a/src/projections/labrd.cpp
+++ b/src/projections/labrd.cpp
@@ -107,11 +107,12 @@ PJ *PROJECTION(labrd) {
double Az, sinp, R, N, t;
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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 (P->phi0 == 0.) {
- return pj_default_destructor(P, PJD_ERR_LAT_0_IS_ZERO);
+ proj_log_error(P, _("Invalid value for lat_0: lat_0 should be different from 0"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
Az = pj_param(P->ctx, P->params, "razi").f;
diff --git a/src/projections/laea.cpp b/src/projections/laea.cpp
index 2d19cab1..5054e8ff 100644
--- a/src/projections/laea.cpp
+++ b/src/projections/laea.cpp
@@ -65,7 +65,7 @@ static PJ_XY laea_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, forward
break;
}
if (fabs(b) < EPS10) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
@@ -111,7 +111,7 @@ static PJ_XY laea_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward
xy.y = 1. + Q->sinb1 * sinphi + Q->cosb1 * cosphi * coslam;
oblcon:
if (xy.y <= EPS10) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
xy.y = sqrt(2. / xy.y);
@@ -124,7 +124,7 @@ oblcon:
/*-fallthrough*/
case S_POLE:
if (fabs(lp.phi + P->phi0) < EPS10) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
xy.y = M_FORTPI - lp.phi * .5;
@@ -193,7 +193,7 @@ static PJ_LP laea_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse
rh = hypot(xy.x, xy.y);
if ((lp.phi = rh * .5 ) > 1.) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
lp.phi = 2. * asin(lp.phi);
@@ -244,13 +244,14 @@ PJ *PROJECTION(laea) {
double t;
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
t = fabs(P->phi0);
if (t > M_HALFPI + EPS10 ) {
- return destructor(P, PJD_ERR_LAT_LARGER_THAN_90);
+ proj_log_error(P, _("Invalid value for lat_0: |lat_0| should be <= 90°"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
if (fabs(t - M_HALFPI) < EPS10)
Q->mode = P->phi0 < 0. ? S_POLE : N_POLE;
@@ -266,7 +267,7 @@ PJ *PROJECTION(laea) {
Q->mmf = .5 / (1. - P->es);
Q->apa = pj_authset(P->es);
if (nullptr==Q->apa)
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
switch (Q->mode) {
case N_POLE:
case S_POLE:
diff --git a/src/projections/lagrng.cpp b/src/projections/lagrng.cpp
index 1029bf8d..fa680643 100644
--- a/src/projections/lagrng.cpp
+++ b/src/projections/lagrng.cpp
@@ -35,7 +35,7 @@ static PJ_XY lagrng_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwa
lp.lam *= Q->rw;
c = 0.5 * (v + 1./v) + cos(lp.lam);
if (c < TOL) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
xy.x = 2. * sin(lp.lam) / c;
@@ -59,7 +59,7 @@ static PJ_LP lagrng_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver
y2m = 2. - xy.y;
c = y2p * y2m - x2;
if (fabs(c) < TOL) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
lp.phi = 2. * atan(pow((y2p * y2p + x2) / (Q->a2 * (y2m * y2m + x2)), Q->hw)) - M_HALFPI;
@@ -73,7 +73,7 @@ PJ *PROJECTION(lagrng) {
double sin_phi1;
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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( pj_param(P->ctx, P->params, "tW").i )
@@ -81,13 +81,19 @@ PJ *PROJECTION(lagrng) {
else
Q->w = 2;
if (Q->w <= 0)
- return pj_default_destructor(P, PJD_ERR_W_OR_M_ZERO_OR_LESS);
+ {
+ proj_log_error(P, _("Invalid value for W: it should be > 0"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
Q->hw = 0.5 * Q->w;
Q->rw = 1. / Q->w;
Q->hrw = 0.5 * Q->rw;
sin_phi1 = sin(pj_param(P->ctx, P->params, "rlat_1").f);
if (fabs(fabs(sin_phi1) - 1.) < TOL)
- return pj_default_destructor(P, PJD_ERR_LAT_LARGER_THAN_90);
+ {
+ proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be < 90°"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
Q->a1 = pow((1. - sin_phi1)/(1. + sin_phi1), Q->hrw);
Q->a2 = Q->a1 * Q->a1;
diff --git a/src/projections/lcc.cpp b/src/projections/lcc.cpp
index 525281f4..42d8b2c9 100644
--- a/src/projections/lcc.cpp
+++ b/src/projections/lcc.cpp
@@ -27,7 +27,7 @@ static PJ_XY lcc_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, forward
if (fabs(fabs(lp.phi) - M_HALFPI) < EPS10) {
if ((lp.phi * Q->n) <= 0.) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
rho = 0.;
@@ -62,7 +62,7 @@ static PJ_LP lcc_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse
if (P->es != 0.) {
lp.phi = pj_phi2(P->ctx, pow(rho / Q->c, 1./Q->n), P->e);
if (lp.phi == HUGE_VAL) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
@@ -83,7 +83,7 @@ PJ *PROJECTION(lcc) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f;
@@ -94,37 +94,45 @@ PJ *PROJECTION(lcc) {
if (!pj_param(P->ctx, P->params, "tlat_0").i)
P->phi0 = Q->phi1;
}
- if (fabs(Q->phi1) > M_HALFPI || fabs(Q->phi2) > M_HALFPI)
- return pj_default_destructor(P, PJD_ERR_LAT_LARGER_THAN_90);
+
if (fabs(Q->phi1 + Q->phi2) < EPS10)
- return pj_default_destructor(P, PJD_ERR_CONIC_LAT_EQUAL);
+ {
+ proj_log_error(P, _("Invalid value for lat_1 and lat_2: |lat_1 + lat_2| should be > 0"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
Q->n = sinphi = sin(Q->phi1);
cosphi = cos(Q->phi1);
+
+ if( fabs(cosphi) < EPS10 || fabs(Q->phi1) >= M_PI_2 ) {
+ proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be < 90°"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
+ if( fabs(cos(Q->phi2)) < EPS10 || fabs(Q->phi2) >= M_PI_2 ) {
+ proj_log_error(P, _("Invalid value for lat_2: |lat_2| should be < 90°"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
+
secant = fabs(Q->phi1 - Q->phi2) >= EPS10;
if (P->es != 0.) {
double ml1, m1;
m1 = pj_msfn(sinphi, cosphi, P->es);
- if( fabs(Q->phi1) == M_HALFPI ) {
- return pj_default_destructor(P, PJD_ERR_LAT_1_OR_2_ZERO_OR_90);
- }
ml1 = pj_tsfn(Q->phi1, sinphi, P->e);
if (secant) { /* secant cone */
sinphi = sin(Q->phi2);
Q->n = log(m1 / pj_msfn(sinphi, cos(Q->phi2), P->es));
if (Q->n == 0) {
// Not quite, but es is very close to 1...
- return pj_default_destructor(P, PJD_ERR_INVALID_ECCENTRICITY);
- }
- if( fabs(Q->phi2) == M_HALFPI ) {
- return pj_default_destructor(P, PJD_ERR_LAT_1_OR_2_ZERO_OR_90);
+ proj_log_error(P, _("Invalid value for eccentricity"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
const double ml2 = pj_tsfn(Q->phi2, sinphi, P->e);
const double denom = log(ml1 / ml2);
if( denom == 0 ) {
// Not quite, but es is very close to 1...
- return pj_default_destructor(P, PJD_ERR_INVALID_ECCENTRICITY);
+ proj_log_error(P, _("Invalid value for eccentricity"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
Q->n /= denom;
}
@@ -133,9 +141,6 @@ PJ *PROJECTION(lcc) {
Q->rho0 *= (fabs(fabs(P->phi0) - M_HALFPI) < EPS10) ? 0. :
pow(pj_tsfn(P->phi0, sin(P->phi0), P->e), Q->n);
} else {
- if( fabs(cosphi) < EPS10 || fabs(cos(Q->phi2)) < EPS10 ) {
- return pj_default_destructor(P, PJD_ERR_LAT_1_OR_2_ZERO_OR_90);
- }
if (secant)
Q->n = log(cosphi / cos(Q->phi2)) /
log(tan(M_FORTPI + .5 * Q->phi2) /
@@ -143,7 +148,8 @@ PJ *PROJECTION(lcc) {
if( Q->n == 0 ) {
// Likely reason is that phi1 / phi2 are too close to zero.
// Can be reproduced with +proj=lcc +a=1 +lat_2=.0000001
- return pj_default_destructor(P, PJD_ERR_CONIC_LAT_EQUAL);
+ proj_log_error(P, _("Invalid value for lat_1 and lat_2: |lat_1 + lat_2| should be > 0"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
Q->c = cosphi * pow(tan(M_FORTPI + .5 * Q->phi1), Q->n) / Q->n;
Q->rho0 = (fabs(fabs(P->phi0) - M_HALFPI) < EPS10) ? 0. :
diff --git a/src/projections/lcca.cpp b/src/projections/lcca.cpp
index 53646fc6..6f962699 100644
--- a/src/projections/lcca.cpp
+++ b/src/projections/lcca.cpp
@@ -112,7 +112,7 @@ static PJ_LP lcca_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse
if (fabs(dif) < DEL_TOL) break;
}
if (!i) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
lp.phi = pj_inv_mlfn(P->ctx, S + Q->M0, P->es, Q->en);
@@ -137,15 +137,16 @@ PJ *PROJECTION(lcca) {
double s2p0, N0, R0, tan0;
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
(Q->en = pj_enfn(P->es));
if (!Q->en)
- return pj_default_destructor (P, ENOMEM);
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
if (P->phi0 == 0.) {
- return destructor(P, PJD_ERR_LAT_0_IS_ZERO);
+ proj_log_error(P, _("Invalid value for lat_0: it should be different from 0."));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
Q->l = sin(P->phi0);
Q->M0 = pj_mlfn(P->phi0, Q->l, cos(P->phi0), Q->en);
diff --git a/src/projections/loxim.cpp b/src/projections/loxim.cpp
index 64124bdd..e0b62f1b 100644
--- a/src/projections/loxim.cpp
+++ b/src/projections/loxim.cpp
@@ -58,14 +58,16 @@ static PJ_LP loxim_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers
PJ *PROJECTION(loxim) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f;
Q->cosphi1 = cos(Q->phi1);
if (Q->cosphi1 < EPS)
- return pj_default_destructor(P, PJD_ERR_LAT_LARGER_THAN_90);
-
+ {
+ proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be < 90°"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
Q->tanphi1 = tan(M_FORTPI + 0.5 * Q->phi1);
diff --git a/src/projections/lsat.cpp b/src/projections/lsat.cpp
index a811a3a6..ad056da5 100644
--- a/src/projections/lsat.cpp
+++ b/src/projections/lsat.cpp
@@ -136,7 +136,7 @@ static PJ_LP lsat_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse
sppsq = spp * spp;
const double denom = 1. - sppsq * (1. + Q->u);
if( denom == 0.0 ) {
- proj_errno_set(P, PJD_ERR_INVALID_X_OR_Y);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error().lp;
}
lamt = atan(((1. - sppsq * P->rone_es) * tan(lamdp) *
@@ -160,16 +160,23 @@ PJ *PROJECTION(lsat) {
double lam, alf, esc, ess;
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
land = pj_param(P->ctx, P->params, "ilsat").i;
if (land <= 0 || land > 5)
- return pj_default_destructor(P, PJD_ERR_LSAT_NOT_IN_RANGE);
+ {
+ proj_log_error(P, _("Invalid value for lsat: lsat should be in [1, 5] range"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
path = pj_param(P->ctx, P->params, "ipath").i;
- if (path <= 0 || path > (land <= 3 ? 251 : 233))
- return pj_default_destructor(P, PJD_ERR_PATH_NOT_IN_RANGE);
+ const int maxPathVal = (land <= 3 ? 251 : 233);
+ if (path <= 0 || path > maxPathVal)
+ {
+ proj_log_error(P, _("Invalid value for path: path should be in [1, %d] range"), maxPathVal);
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
if (land <= 3) {
P->lam0 = DEG_TO_RAD * 128.87 - M_TWOPI / 251. * path;
diff --git a/src/projections/mbtfpp.cpp b/src/projections/mbtfpp.cpp
index cc01cb40..bfa869f9 100644
--- a/src/projections/mbtfpp.cpp
+++ b/src/projections/mbtfpp.cpp
@@ -32,7 +32,7 @@ static PJ_LP mbtfpp_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver
lp.phi = xy.y / FYC;
if (fabs(lp.phi) >= 1.) {
if (fabs(lp.phi) > ONEEPS) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
} else {
lp.phi = (lp.phi < 0.) ? -M_HALFPI : M_HALFPI;
@@ -45,7 +45,7 @@ static PJ_LP mbtfpp_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver
lp.phi = sin(lp.phi) / CSy;
if (fabs(lp.phi) >= 1.) {
if (fabs(lp.phi) > ONEEPS) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
} else {
lp.phi = (lp.phi < 0.) ? -M_HALFPI : M_HALFPI;
diff --git a/src/projections/mbtfpq.cpp b/src/projections/mbtfpq.cpp
index 5c7f8ca6..7d44b5ba 100644
--- a/src/projections/mbtfpq.cpp
+++ b/src/projections/mbtfpq.cpp
@@ -42,7 +42,7 @@ static PJ_LP mbtfpq_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver
lp.phi = RYC * xy.y;
if (fabs(lp.phi) > 1.) {
if (fabs(lp.phi) > ONETOL) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
else if (lp.phi < 0.) {
@@ -61,7 +61,7 @@ static PJ_LP mbtfpq_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver
lp.phi = RC * (t + sin(lp.phi));
if (fabs(lp.phi) > 1.)
if (fabs(lp.phi) > ONETOL) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
else lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI;
diff --git a/src/projections/merc.cpp b/src/projections/merc.cpp
index 3a0ed7b4..7fd3dff9 100644
--- a/src/projections/merc.cpp
+++ b/src/projections/merc.cpp
@@ -53,7 +53,10 @@ PJ *PROJECTION(merc) {
if( (is_phits = pj_param(P->ctx, P->params, "tlat_ts").i) ) {
phits = fabs(pj_param(P->ctx, P->params, "rlat_ts").f);
if (phits >= M_HALFPI)
- return pj_default_destructor(P, PJD_ERR_LAT_TS_LARGER_THAN_90);
+ {
+ proj_log_error(P, _("Invalid value for lat_ts: |lat_ts| should be <= 90°"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
}
if (P->es != 0.0) { /* ellipsoid */
diff --git a/src/projections/misrsom.cpp b/src/projections/misrsom.cpp
index d7e199f2..23376789 100644
--- a/src/projections/misrsom.cpp
+++ b/src/projections/misrsom.cpp
@@ -155,7 +155,7 @@ static PJ_LP misrsom_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inve
sppsq = spp * spp;
const double denom = 1. - sppsq * (1. + Q->u);
if( denom == 0.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;
}
lamt = atan(((1. - sppsq * P->rone_es) * tan(lamdp) *
@@ -180,12 +180,15 @@ PJ *PROJECTION(misrsom) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
path = pj_param(P->ctx, P->params, "ipath").i;
if (path <= 0 || path > 233)
- return pj_default_destructor(P, PJD_ERR_PATH_NOT_IN_RANGE);
+ {
+ proj_log_error(P, _("Invalid value for path: path should be in [1, 233] range"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
P->lam0 = DEG_TO_RAD * 129.3056 - M_TWOPI / 233. * path;
alf = 98.30382 * DEG_TO_RAD;
diff --git a/src/projections/mod_ster.cpp b/src/projections/mod_ster.cpp
index 0c30b7b6..237ff75a 100644
--- a/src/projections/mod_ster.cpp
+++ b/src/projections/mod_ster.cpp
@@ -37,7 +37,7 @@ static PJ_XY mod_ster_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, for
cchi = cos(chi);
const double denom = 1. + Q->schio * schi + Q->cchio * cchi * coslon;
if( denom == 0 ) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
s = 2. / denom;
@@ -136,7 +136,7 @@ PJ *PROJECTION(mil_os) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->n = 2;
@@ -159,7 +159,7 @@ PJ *PROJECTION(lee_os) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->n = 2;
@@ -184,7 +184,7 @@ PJ *PROJECTION(gs48) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->n = 4;
@@ -219,7 +219,7 @@ PJ *PROJECTION(alsk) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->n = 5;
@@ -267,7 +267,7 @@ PJ *PROJECTION(gs50) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->n = 9;
diff --git a/src/projections/moll.cpp b/src/projections/moll.cpp
index 4864c8e1..523de210 100644
--- a/src/projections/moll.cpp
+++ b/src/projections/moll.cpp
@@ -79,7 +79,7 @@ static PJ * setup(PJ *P, double p) {
PJ *PROJECTION(moll) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
return setup(P, M_HALFPI);
@@ -89,7 +89,7 @@ PJ *PROJECTION(moll) {
PJ *PROJECTION(wag4) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
return setup(P, M_PI/3.);
@@ -98,7 +98,7 @@ PJ *PROJECTION(wag4) {
PJ *PROJECTION(wag5) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->es = 0;
diff --git a/src/projections/natearth.cpp b/src/projections/natearth.cpp
index e1f71089..f83c8467 100644
--- a/src/projections/natearth.cpp
+++ b/src/projections/natearth.cpp
@@ -82,7 +82,7 @@ static PJ_LP natearth_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inv
}
}
if( i == 0 )
- proj_context_errno_set( P->ctx, PJD_ERR_NON_CONVERGENT );
+ proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN );
lp.phi = yc;
/* longitude */
diff --git a/src/projections/natearth2.cpp b/src/projections/natearth2.cpp
index e4516a0a..8bef168d 100644
--- a/src/projections/natearth2.cpp
+++ b/src/projections/natearth2.cpp
@@ -76,7 +76,7 @@ static PJ_LP natearth2_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, in
}
}
if( i == 0 )
- proj_context_errno_set( P->ctx, PJD_ERR_NON_CONVERGENT );
+ proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN );
lp.phi = yc;
/* longitude */
diff --git a/src/projections/nsper.cpp b/src/projections/nsper.cpp
index 951111ac..5f76d9b0 100644
--- a/src/projections/nsper.cpp
+++ b/src/projections/nsper.cpp
@@ -66,7 +66,7 @@ static PJ_XY nsper_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar
break;
}
if (xy.y < Q->rp) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
xy.y = Q->pn1 / (Q->p - xy.y);
@@ -120,7 +120,7 @@ static PJ_LP nsper_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers
double cosz, sinz;
sinz = 1. - rh * rh * Q->pfact;
if (sinz < 0.) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
sinz = (Q->p - sqrt(sinz)) / (Q->pn1 / rh + rh / Q->pn1);
@@ -166,7 +166,10 @@ static PJ *setup(PJ *P) {
}
Q->pn1 = Q->height / P->a; /* normalize by radius */
if ( Q->pn1 <= 0 || Q->pn1 > 1e10 )
- return pj_default_destructor (P, PJD_ERR_INVALID_H);
+ {
+ proj_log_error(P, _("Invalid value for h"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
Q->p = 1. + Q->pn1;
Q->rp = 1. / Q->p;
Q->h = 1. / Q->pn1;
@@ -182,7 +185,7 @@ static PJ *setup(PJ *P) {
PJ *PROJECTION(nsper) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->tilt = 0;
@@ -196,7 +199,7 @@ PJ *PROJECTION(tpers) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
omega = pj_param(P->ctx, P->params, "rtilt").f;
diff --git a/src/projections/ob_tran.cpp b/src/projections/ob_tran.cpp
index 86798e0a..abab5835 100644
--- a/src/projections/ob_tran.cpp
+++ b/src/projections/ob_tran.cpp
@@ -180,26 +180,33 @@ PJ *PROJECTION(ob_tran) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(calloc (1, sizeof (struct pj_opaque)));
if (nullptr==Q)
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
P->opaque = Q;
P->destructor = destructor;
/* get name of projection to be translated */
if (pj_param(P->ctx, P->params, "so_proj").s == nullptr)
- return destructor(P, PJD_ERR_NO_ROTATION_PROJ);
+ {
+ proj_log_error(P, _("Missing parameter: o_proj"));
+ return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
+ }
/* Create the target projection object to rotate */
args = ob_tran_target_params (P->params);
/* avoid endless recursion */
if (args.argv == nullptr ) {
- return destructor(P, PJD_ERR_FAILED_TO_FIND_PROJ);
+ proj_log_error(P, _("Failed to find projection to be rotated"));
+ return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
R = proj_create_argv (P->ctx, args.argc, args.argv);
free (args.argv);
if (nullptr==R)
- return destructor (P, PJD_ERR_UNKNOWN_PROJECTION_ID);
+ {
+ proj_log_error(P, _("Projection to be rotated is unknown"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
Q->link = R;
if (pj_param(P->ctx, P->params, "to_alpha").i) {
@@ -210,7 +217,10 @@ PJ *PROJECTION(ob_tran) {
alpha = pj_param(P->ctx, P->params, "ro_alpha").f;
if (fabs(fabs(phic) - M_HALFPI) <= TOL)
- return destructor(P, PJD_ERR_LAT_0_OR_ALPHA_EQ_90);
+ {
+ proj_log_error(P, _("Invalid value for lat_c: |lat_c| should be < 90°"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
Q->lamp = lamc + aatan2(-cos(alpha), -sin(alpha) * sin(phic));
phip = aasin(P->ctx,cos(phic) * sin(alpha));
@@ -225,9 +235,27 @@ PJ *PROJECTION(ob_tran) {
lam2 = pj_param(P->ctx, P->params, "ro_lon_2").f;
phi2 = pj_param(P->ctx, P->params, "ro_lat_2").f;
con = fabs(phi1);
- if (fabs(phi1 - phi2) <= TOL || con <= TOL ||
- fabs(con - M_HALFPI) <= TOL || fabs(fabs(phi2) - M_HALFPI) <= TOL)
- return destructor(P, PJD_ERR_LAT_1_OR_2_ZERO_OR_90);
+
+ if (fabs(phi1) > M_HALFPI - TOL)
+ {
+ proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be < 90°"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
+ if (fabs(phi2) > M_HALFPI - TOL)
+ {
+ proj_log_error(P, _("Invalid value for lat_2: |lat_2| should be < 90°"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
+ if (fabs(phi1 - phi2) < TOL)
+ {
+ proj_log_error(P, _("Invalid value for lat_1 and lat_2: lat_1 should be different from lat_2"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
+ if (con < TOL)
+ {
+ proj_log_error(P, _("Invalid value for lat_1: lat_1 should be different from zero"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
Q->lamp = atan2(cos(phi1) * sin(phi2) * cos(lam1) -
sin(phi1) * cos(phi2) * cos(lam2),
diff --git a/src/projections/ocea.cpp b/src/projections/ocea.cpp
index c78e1ebc..febebcc0 100644
--- a/src/projections/ocea.cpp
+++ b/src/projections/ocea.cpp
@@ -54,7 +54,7 @@ PJ *PROJECTION(ocea) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->rok = 1. / P->k0;
diff --git a/src/projections/oea.cpp b/src/projections/oea.cpp
index 46c00d16..2d16d529 100644
--- a/src/projections/oea.cpp
+++ b/src/projections/oea.cpp
@@ -60,27 +60,34 @@ static PJ_LP oea_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse
PJ *PROJECTION(oea) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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->n = pj_param(P->ctx, P->params, "dn").f) <= 0.) ||
- ((Q->m = pj_param(P->ctx, P->params, "dm").f) <= 0.)) {
- return pj_default_destructor(P, PJD_ERR_INVALID_M_OR_N);
- } else {
- Q->theta = pj_param(P->ctx, P->params, "rtheta").f;
- Q->sp0 = sin(P->phi0);
- Q->cp0 = cos(P->phi0);
- Q->rn = 1./ Q->n;
- Q->rm = 1./ Q->m;
- Q->two_r_n = 2. * Q->rn;
- Q->two_r_m = 2. * Q->rm;
- Q->hm = 0.5 * Q->m;
- Q->hn = 0.5 * Q->n;
- P->fwd = oea_s_forward;
- P->inv = oea_s_inverse;
- P->es = 0.;
+ if (((Q->n = pj_param(P->ctx, P->params, "dn").f) <= 0.) )
+ {
+ proj_log_error(P, _("Invalid value for n: it should be > 0"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
+ if (((Q->m = pj_param(P->ctx, P->params, "dm").f) <= 0.) )
+ {
+ proj_log_error(P, _("Invalid value for m: it should be > 0"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
+
+ Q->theta = pj_param(P->ctx, P->params, "rtheta").f;
+ Q->sp0 = sin(P->phi0);
+ Q->cp0 = cos(P->phi0);
+ Q->rn = 1./ Q->n;
+ Q->rm = 1./ Q->m;
+ Q->two_r_n = 2. * Q->rn;
+ Q->two_r_m = 2. * Q->rm;
+ Q->hm = 0.5 * Q->m;
+ Q->hn = 0.5 * Q->n;
+ P->fwd = oea_s_forward;
+ P->inv = oea_s_inverse;
+ P->es = 0.;
+
return P;
}
diff --git a/src/projections/omerc.cpp b/src/projections/omerc.cpp
index 90067cc3..88d63809 100644
--- a/src/projections/omerc.cpp
+++ b/src/projections/omerc.cpp
@@ -58,7 +58,7 @@ static PJ_XY omerc_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, forwar
const double V = sin(Q->B * lp.lam);
const double U = (S * Q->singam - V * Q->cosgam) / T;
if (fabs(fabs(U) - 1.0) < EPS) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
v = 0.5 * Q->ArB * log((1. - U)/(1. + U));
@@ -98,7 +98,7 @@ static PJ_LP omerc_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, invers
}
Qp = exp(- Q->BrA * v);
if( Qp == 0 ) {
- proj_errno_set(P, PJD_ERR_INVALID_X_OR_Y);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error().lp;
}
Sp = .5 * (Qp - 1. / Qp);
@@ -111,7 +111,7 @@ static PJ_LP omerc_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, invers
} else {
lp.phi = Q->E / sqrt((1. + Up) / (1. - Up));
if ((lp.phi = pj_phi2(P->ctx, pow(lp.phi, 1. / Q->B), P->e)) == HUGE_VAL) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
lp.lam = - Q->rB * atan2((Sp * Q->cosgam -
@@ -128,7 +128,7 @@ PJ *PROJECTION(omerc) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->no_rot = pj_param(P->ctx, P->params, "bno_rot").i;
@@ -154,14 +154,36 @@ PJ *PROJECTION(omerc) {
phi1 = pj_param(P->ctx, P->params, "rlat_1").f;
lam2 = pj_param(P->ctx, P->params, "rlon_2").f;
phi2 = pj_param(P->ctx, P->params, "rlat_2").f;
- if (fabs(phi1) > M_HALFPI || fabs(phi2) > M_HALFPI)
- return pj_default_destructor(P, PJD_ERR_LAT_LARGER_THAN_90);
- if (fabs(phi1 - phi2) <= TOL ||
- (con = fabs(phi1)) <= TOL ||
- fabs(con - M_HALFPI) <= TOL ||
- fabs(fabs(P->phi0) - M_HALFPI) <= TOL ||
- fabs(fabs(phi2) - M_HALFPI) <= TOL)
- return pj_default_destructor(P, PJD_ERR_LAT_0_OR_ALPHA_EQ_90);
+ con = fabs(phi1);
+
+ if (fabs(phi1) > M_HALFPI - TOL)
+ {
+ proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be < 90°"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
+ if (fabs(phi2) > M_HALFPI - TOL)
+ {
+ proj_log_error(P, _("Invalid value for lat_2: |lat_2| should be < 90°"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
+
+ if (fabs(phi1 - phi2) <= TOL )
+ {
+ proj_log_error(P, _("Invalid value for lat_1/lat_2: lat_1 should be different from lat_2"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
+
+ if (con <= TOL )
+ {
+ proj_log_error(P, _("Invalid value for lat_1: lat_1 should be different from 0"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
+
+ if (fabs(fabs(P->phi0) - M_HALFPI) <= TOL)
+ {
+ proj_log_error(P, _("Invalid value for lat_01: |lat_0| should be < 90°"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
}
com = sqrt(P->one_es);
if (fabs(P->phi0) > EPS) {
@@ -193,9 +215,13 @@ PJ *PROJECTION(omerc) {
gamma = alpha_c;
} else
alpha_c = aasin(P->ctx, D*sin(gamma0 = gamma));
- if( fabs(fabs(P->phi0) - M_HALFPI) <= TOL ) {
- return pj_default_destructor(P, PJD_ERR_LAT_0_OR_ALPHA_EQ_90);
+
+ if (fabs(fabs(P->phi0) - M_HALFPI) <= TOL)
+ {
+ proj_log_error(P, _("Invalid value for lat_01: |lat_0| should be < 90°"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
+
P->lam0 = lamc - aasin(P->ctx, .5 * (F - 1. / F) *
tan(gamma0)) / Q->B;
} else {
@@ -205,7 +231,8 @@ PJ *PROJECTION(omerc) {
p = (L - H) / (L + H);
if( p == 0 ) {
// Not quite, but es is very close to 1...
- return pj_default_destructor(P, PJD_ERR_INVALID_ECCENTRICITY);
+ proj_log_error(P, _("Invalid value for eccentricity"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
J = Q->E * Q->E;
J = (J - L * H) / (J + L * H);
@@ -217,7 +244,8 @@ PJ *PROJECTION(omerc) {
J * tan(.5 * Q->B * (lam1 - lam2)) / p) / Q->B);
const double denom = F - 1. / F;
if( denom == 0 ) {
- return pj_default_destructor(P, PJD_ERR_INVALID_ECCENTRICITY);
+ proj_log_error(P, _("Invalid value for eccentricity"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
gamma0 = atan(2. * sin(Q->B * adjlon(lam1 - P->lam0)) / denom);
gamma = alpha_c = aasin(P->ctx, D * sin(gamma0));
diff --git a/src/projections/ortho.cpp b/src/projections/ortho.cpp
index 4417dac7..206abb69 100644
--- a/src/projections/ortho.cpp
+++ b/src/projections/ortho.cpp
@@ -29,7 +29,7 @@ struct pj_opaque {
#define EPS10 1.e-10
static PJ_XY forward_error(PJ *P, PJ_LP lp, PJ_XY xy) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
proj_log_trace(P, "Coordinate (%.3f, %.3f) is on the unprojected hemisphere",
proj_todeg(lp.lam), proj_todeg(lp.phi));
return xy;
@@ -88,7 +88,7 @@ static PJ_LP ortho_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers
sinc = rh;
if (sinc > 1.) {
if ((sinc - 1.) > EPS10) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
proj_log_trace(P, "Point (%.3f, %.3f) is outside the projection boundary");
return lp;
}
@@ -176,7 +176,7 @@ static PJ_LP ortho_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inver
const double rh2 = SQ(xy.x) + SQ(xy.y);
if (rh2 >= 1. - 1e-15) {
if ((rh2 - 1.) > EPS10) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
proj_log_trace(P, "Point (%.3f, %.3f) is outside the projection boundary");
lp.lam = HUGE_VAL; lp.phi = HUGE_VAL;
return lp;
@@ -200,7 +200,7 @@ static PJ_LP ortho_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inver
// Equation of the ellipse
if( SQ(xy.x) + SQ(xy.y * (P->a / P->b)) > 1 + 1e-11 ) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
proj_log_trace(P, "Point (%.3f, %.3f) is outside the projection boundary");
lp.lam = HUGE_VAL; lp.phi = HUGE_VAL;
return lp;
@@ -228,7 +228,7 @@ static PJ_LP ortho_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inver
xy_recentered.x = xy.x;
xy_recentered.y = (xy.y - Q->y_shift) / Q->y_scale;
if( SQ(xy.x) + SQ(xy_recentered.y) > 1 + 1e-11 ) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
proj_log_trace(P, "Point (%.3f, %.3f) is outside the projection boundary");
lp.lam = HUGE_VAL; lp.phi = HUGE_VAL;
return lp;
@@ -273,7 +273,7 @@ static PJ_LP ortho_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inver
return lp;
}
}
- proj_context_errno_set(P->ctx, PJD_ERR_NON_CONVERGENT);
+ proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
@@ -281,7 +281,7 @@ static PJ_LP ortho_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inver
PJ *PROJECTION(ortho) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->sinph0 = sin(P->phi0);
diff --git a/src/projections/patterson.cpp b/src/projections/patterson.cpp
index 32544580..d24ee98d 100644
--- a/src/projections/patterson.cpp
+++ b/src/projections/patterson.cpp
@@ -100,7 +100,7 @@ static PJ_LP patterson_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, in
}
}
if( i == 0 )
- proj_context_errno_set( P->ctx, PJD_ERR_NON_CONVERGENT );
+ proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN );
lp.phi = yc;
/* longitude */
diff --git a/src/projections/poly.cpp b/src/projections/poly.cpp
index 4ea95cc7..99b6772e 100644
--- a/src/projections/poly.cpp
+++ b/src/projections/poly.cpp
@@ -80,7 +80,7 @@ static PJ_LP poly_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse
const double cp = cos(lp.phi);
const double s2ph = sp * cp;
if (fabs(cp) < ITOL) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
double mlp = sqrt(1. - P->es * sp * sp);
@@ -97,7 +97,7 @@ static PJ_LP poly_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse
break;
}
if (!i) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
const double c = sin(lp.phi);
@@ -128,7 +128,7 @@ static PJ_LP poly_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse
break;
--i;
if( i == 0 ) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
}
@@ -156,14 +156,14 @@ static PJ *destructor(PJ *P, int errlev) {
PJ *PROJECTION(poly) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
if (P->es != 0.0) {
if (!(Q->en = pj_enfn(P->es)))
- return pj_default_destructor (P, ENOMEM);
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
Q->ml0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), Q->en);
P->inv = poly_e_inverse;
P->fwd = poly_e_forward;
diff --git a/src/projections/putp3.cpp b/src/projections/putp3.cpp
index 09763851..3554909e 100644
--- a/src/projections/putp3.cpp
+++ b/src/projections/putp3.cpp
@@ -40,7 +40,7 @@ static PJ_LP putp3_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers
PJ *PROJECTION(putp3) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->A = 4. * RPISQ;
@@ -55,7 +55,7 @@ PJ *PROJECTION(putp3) {
PJ *PROJECTION(putp3p) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->A = 2. * RPISQ;
diff --git a/src/projections/putp4p.cpp b/src/projections/putp4p.cpp
index 8df18972..1c9a763e 100644
--- a/src/projections/putp4p.cpp
+++ b/src/projections/putp4p.cpp
@@ -47,7 +47,7 @@ static PJ_LP putp4p_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver
PJ *PROJECTION(putp4p) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->C_x = 0.874038744;
@@ -64,7 +64,7 @@ PJ *PROJECTION(putp4p) {
PJ *PROJECTION(weren) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->C_x = 1.;
diff --git a/src/projections/putp5.cpp b/src/projections/putp5.cpp
index 5e70382d..a6aed94e 100644
--- a/src/projections/putp5.cpp
+++ b/src/projections/putp5.cpp
@@ -45,7 +45,7 @@ static PJ_LP putp5_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers
PJ *PROJECTION(putp5) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->A = 2.;
@@ -62,7 +62,7 @@ PJ *PROJECTION(putp5) {
PJ *PROJECTION(putp5p) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->A = 1.5;
diff --git a/src/projections/putp6.cpp b/src/projections/putp6.cpp
index da8c0a7c..63253fbd 100644
--- a/src/projections/putp6.cpp
+++ b/src/projections/putp6.cpp
@@ -61,7 +61,7 @@ static PJ_LP putp6_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers
PJ *PROJECTION(putp6) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->C_x = 1.01346;
@@ -81,7 +81,7 @@ PJ *PROJECTION(putp6) {
PJ *PROJECTION(putp6p) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->C_x = 0.44329;
diff --git a/src/projections/qsc.cpp b/src/projections/qsc.cpp
index dd9ce965..920e93b0 100644
--- a/src/projections/qsc.cpp
+++ b/src/projections/qsc.cpp
@@ -379,7 +379,7 @@ static PJ_LP qsc_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse
PJ *PROJECTION(qsc) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->inv = qsc_e_inverse;
diff --git a/src/projections/robin.cpp b/src/projections/robin.cpp
index 6a1405b6..4dfc306c 100644
--- a/src/projections/robin.cpp
+++ b/src/projections/robin.cpp
@@ -86,7 +86,7 @@ static PJ_XY robin_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar
dphi = fabs(lp.phi);
i = isnan(lp.phi) ? -1 : lround(floor(dphi * C1 + 1e-15));
if( i < 0 ){
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
if (i >= NODES) i = NODES;
@@ -109,7 +109,7 @@ static PJ_LP robin_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers
lp.phi = fabs(xy.y / FYC);
if (lp.phi >= 1.) { /* simple pathologic cases */
if (lp.phi > ONEEPS) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
else {
@@ -120,7 +120,7 @@ static PJ_LP robin_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers
/* in Y space, reduce to table interval */
long i = isnan(lp.phi) ? -1 : lround(floor(lp.phi * NODES));
if( i < 0 || i >= NODES ) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
for (;;) {
@@ -138,12 +138,12 @@ static PJ_LP robin_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers
break;
}
if( iters == 0 )
- proj_context_errno_set( P->ctx, PJD_ERR_NON_CONVERGENT );
+ proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN );
lp.phi = (5 * i + t) * DEG_TO_RAD;
if (xy.y < 0.) lp.phi = -lp.phi;
lp.lam /= V(X[i], t);
if( fabs(lp.lam) > M_PI ) {
- proj_errno_set(P, PJD_ERR_LAT_OR_LON_EXCEED_LIMIT);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
lp = proj_coord_error().lp;
}
}
diff --git a/src/projections/rouss.cpp b/src/projections/rouss.cpp
index 2eb13b3d..195b90b3 100644
--- a/src/projections/rouss.cpp
+++ b/src/projections/rouss.cpp
@@ -95,7 +95,7 @@ static PJ *destructor (PJ *P, int errlev) {
if (static_cast<struct pj_opaque*>(P->opaque)->en)
free (static_cast<struct pj_opaque*>(P->opaque)->en);
- return pj_default_destructor (P, ENOMEM);
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
}
@@ -104,11 +104,11 @@ PJ *PROJECTION(rouss) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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 = proj_mdist_ini(P->es))))
- return pj_default_destructor (P, ENOMEM);
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
es2 = sin(P->phi0);
Q->s0 = proj_mdist(P->phi0, es2, cos(P->phi0), Q->en);
diff --git a/src/projections/rpoly.cpp b/src/projections/rpoly.cpp
index e3f09c59..0c55954d 100644
--- a/src/projections/rpoly.cpp
+++ b/src/projections/rpoly.cpp
@@ -46,7 +46,7 @@ static PJ_XY rpoly_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar
PJ *PROJECTION(rpoly) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->phi1 = fabs(pj_param(P->ctx, P->params, "rlat_ts").f);
diff --git a/src/projections/sch.cpp b/src/projections/sch.cpp
index 359e8efc..d10ccf6c 100644
--- a/src/projections/sch.cpp
+++ b/src/projections/sch.cpp
@@ -131,7 +131,7 @@ static PJ *setup(PJ *P) { /* general initialization */
// Pass a dummy ellipsoid definition that will be overridden just afterwards
Q->cart = proj_create(P->ctx, "+proj=cart +a=1");
if (Q->cart == nullptr)
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
/* inherit ellipsoid definition from P to Q->cart */
pj_inherit_ellipsoid_def (P, Q->cart);
@@ -154,7 +154,7 @@ static PJ *setup(PJ *P) { /* general initialization */
/* Set up local sphere at the given peg point */
Q->cart_sph = proj_create(P->ctx, "+proj=cart +a=1");
if (Q->cart_sph == nullptr)
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
pj_calc_ellipsoid_params(Q->cart_sph, Q->rcurv, 0);
/* Set up the transformation matrices */
@@ -186,7 +186,7 @@ static PJ *setup(PJ *P) { /* general initialization */
PJ *PROJECTION(sch) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
P->destructor = destructor;
@@ -196,21 +196,24 @@ PJ *PROJECTION(sch) {
if (pj_param(P->ctx, P->params, "tplat_0").i)
Q->plat = pj_param(P->ctx, P->params, "rplat_0").f;
else {
- return pj_default_destructor(P, PJD_ERR_FAILED_TO_FIND_PROJ);
+ proj_log_error(P, _("Missing parameter plat_0."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
/* Check if peg longitude was defined */
if (pj_param(P->ctx, P->params, "tplon_0").i)
Q->plon = pj_param(P->ctx, P->params, "rplon_0").f;
else {
- return pj_default_destructor(P, PJD_ERR_FAILED_TO_FIND_PROJ);
+ proj_log_error(P, _("Missing parameter plon_0."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
/* Check if peg heading is defined */
if (pj_param(P->ctx, P->params, "tphdg_0").i)
Q->phdg = pj_param(P->ctx, P->params, "rphdg_0").f;
else {
- return pj_default_destructor(P, PJD_ERR_FAILED_TO_FIND_PROJ);
+ proj_log_error(P, _("Missing parameter phdg_0."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
diff --git a/src/projections/sconics.cpp b/src/projections/sconics.cpp
index c12b05a2..9084404c 100644
--- a/src/projections/sconics.cpp
+++ b/src/projections/sconics.cpp
@@ -48,15 +48,28 @@ static int phi12(PJ *P, double *del) {
double p1, p2;
int err = 0;
- if (!pj_param(P->ctx, P->params, "tlat_1").i ||
- !pj_param(P->ctx, P->params, "tlat_2").i) {
- err = -41;
- } 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
+ {
p1 = pj_param(P->ctx, P->params, "rlat_1").f;
p2 = pj_param(P->ctx, P->params, "rlat_2").f;
*del = 0.5 * (p2 - p1);
- static_cast<struct pj_opaque*>(P->opaque)->sig = 0.5 * (p2 + p1);
- err = (fabs(*del) < EPS || fabs(static_cast<struct pj_opaque*>(P->opaque)->sig) < EPS) ? PJD_ERR_ABS_LAT1_EQ_ABS_LAT2 : 0;
+ const double sig = 0.5 * (p2 + p1);
+ static_cast<struct pj_opaque*>(P->opaque)->sig = sig;
+ 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;
}
@@ -119,7 +132,7 @@ static PJ *setup(PJ *P, enum Type type) {
int err;
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->type = type;
@@ -167,8 +180,10 @@ static PJ *setup(PJ *P, enum Type type) {
Q->c1 = 1./tan (Q->sig);
del = P->phi0 - Q->sig;
if (fabs (del) - EPS10 >= M_HALFPI)
- return pj_default_destructor(P, PJD_ERR_LAT_0_HALF_PI_FROM_MEAN);
-
+ {
+ proj_log_error(P, _("Invalid value for lat_0/lat_1/lat_2: |lat_0 - 0.5 * (lat_1 + lat_2)| should be < 90°"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
Q->rho_0 = Q->c2 * (Q->c1 - tan (del));
break;
diff --git a/src/projections/somerc.cpp b/src/projections/somerc.cpp
index a184500c..af8c0b17 100644
--- a/src/projections/somerc.cpp
+++ b/src/projections/somerc.cpp
@@ -62,7 +62,7 @@ static PJ_LP somerc_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inver
lp.phi = phip;
lp.lam = lamp / Q->c;
} else {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
return (lp);
@@ -73,7 +73,7 @@ PJ *PROJECTION(somerc) {
double cp, phip0, sp;
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
diff --git a/src/projections/stere.cpp b/src/projections/stere.cpp
index ad1caae2..4646db3d 100644
--- a/src/projections/stere.cpp
+++ b/src/projections/stere.cpp
@@ -60,7 +60,7 @@ static PJ_XY stere_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, forwar
const double denom = Q->cosX1 * (1. + Q->sinX1 * sinX +
Q->cosX1 * cosX * coslam);
if( denom == 0 ) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error().xy;
}
A = Q->akm1 / denom;
@@ -117,7 +117,7 @@ static PJ_XY stere_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar
xy.y = 1. + sinph0 * sinphi + cosph0 * cosphi * coslam;
oblcon:
if (xy.y <= EPS10) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
xy.y = Q->akm1 / xy.y;
@@ -131,7 +131,7 @@ oblcon:
/*-fallthrough*/
case S_POLE:
if (fabs (lp.phi - M_HALFPI) < TOL) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
xy.y = Q->akm1 * tan (M_FORTPI + .5 * lp.phi);
@@ -190,7 +190,7 @@ static PJ_LP stere_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, invers
phi_l = lp.phi;
}
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
@@ -304,7 +304,7 @@ static PJ *setup(PJ *P) { /* general initialization */
PJ *PROJECTION(stere) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->phits = pj_param (P->ctx, P->params, "tlat_ts").i ?
@@ -317,13 +317,14 @@ PJ *PROJECTION(stere) {
PJ *PROJECTION(ups) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
/* International Ellipsoid */
P->phi0 = pj_param(P->ctx, P->params, "bsouth").i ? - M_HALFPI: M_HALFPI;
if (P->es == 0.0) {
- return pj_default_destructor (P, PJD_ERR_ELLIPSOID_USE_REQUIRED);
+ proj_log_error(P, _("Invalid value for es: only ellipsoidal formulation supported"));
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
P->k0 = .994;
P->x0 = 2000000.;
diff --git a/src/projections/sterea.cpp b/src/projections/sterea.cpp
index 4dd22d2f..28fdea2e 100644
--- a/src/projections/sterea.cpp
+++ b/src/projections/sterea.cpp
@@ -55,7 +55,7 @@ static PJ_XY sterea_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, forwa
cosl = cos(lp.lam);
const double denom = 1. + Q->sinc0 * sinc + Q->cosc0 * cosc * cosl;
if( denom == 0.0 ) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error().xy;
}
k = P->k0 * Q->R2 / denom;
@@ -103,12 +103,12 @@ PJ *PROJECTION(sterea) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->en = pj_gauss_ini(P->e, P->phi0, &(Q->phic0), &R);
if (nullptr==Q->en)
- return pj_default_destructor (P, ENOMEM);
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
Q->sinc0 = sin (Q->phic0);
Q->cosc0 = cos (Q->phic0);
diff --git a/src/projections/sts.cpp b/src/projections/sts.cpp
index 75190e85..cdd59044 100644
--- a/src/projections/sts.cpp
+++ b/src/projections/sts.cpp
@@ -72,7 +72,7 @@ static PJ *setup(PJ *P, double p, double q, int mode) {
PJ *PROJECTION(fouc) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
return setup(P, 2., 2., 1);
}
@@ -82,7 +82,7 @@ PJ *PROJECTION(fouc) {
PJ *PROJECTION(kav5) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
return setup(P, 1.50488, 1.35439, 0);
@@ -93,7 +93,7 @@ PJ *PROJECTION(kav5) {
PJ *PROJECTION(qua_aut) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
return setup(P, 2., 2., 0);
}
@@ -103,7 +103,7 @@ PJ *PROJECTION(qua_aut) {
PJ *PROJECTION(mbt_s) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
return setup(P, 1.48875, 1.36509, 0);
}
diff --git a/src/projections/tcc.cpp b/src/projections/tcc.cpp
index 9413b567..c53bed05 100644
--- a/src/projections/tcc.cpp
+++ b/src/projections/tcc.cpp
@@ -16,7 +16,7 @@ static PJ_XY tcc_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward
const double b = cos (lp.phi) * sin (lp.lam);
const double bt = 1. - b * b;
if (bt < EPS10) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
xy.x = b / sqrt(bt);
diff --git a/src/projections/tmerc.cpp b/src/projections/tmerc.cpp
index 8f897061..3093e745 100644
--- a/src/projections/tmerc.cpp
+++ b/src/projections/tmerc.cpp
@@ -89,7 +89,7 @@ static PJ_XY approx_e_fwd (PJ_LP lp, PJ *P)
if( lp.lam < -M_HALFPI || lp.lam > M_HALFPI ) {
xy.x = HUGE_VAL;
xy.y = HUGE_VAL;
- proj_context_errno_set( P->ctx, PJD_ERR_LAT_OR_LON_EXCEED_LIMIT );
+ proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN );
return xy;
}
@@ -123,7 +123,7 @@ static PJ_XY tmerc_spherical_fwd (PJ_LP lp, PJ *P) {
cosphi = cos(lp.phi);
b = cosphi * sin (lp.lam);
if (fabs (fabs (b) - 1.) <= EPS10) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
@@ -138,7 +138,7 @@ static PJ_XY tmerc_spherical_fwd (PJ_LP lp, PJ *P) {
}
else if (b >= 1.) {
if ((b - 1.) > EPS10) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
else xy.y = 0.;
@@ -190,7 +190,7 @@ static PJ_LP tmerc_spherical_inv (PJ_XY xy, PJ *P) {
h = exp(xy.x / Q->esp);
if( h == 0 ) {
- proj_errno_set(P, PJD_ERR_INVALID_X_OR_Y);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error().lp;
}
g = .5 * (h - 1. / h);
@@ -224,7 +224,7 @@ static PJ *setup_approx(PJ *P) {
if (P->es != 0.0) {
if (!(Q->en = pj_enfn(P->es)))
- return pj_default_destructor(P, ENOMEM);
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
Q->ml0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), Q->en);
Q->esp = P->es / (1. - P->es);
@@ -587,7 +587,7 @@ static PJ *setup(PJ *P, TMercAlgo eAlg) {
struct tmerc_data *Q = static_cast<struct tmerc_data*>(calloc (1, sizeof (struct tmerc_data)));
if (nullptr==Q)
- return pj_default_destructor (P, ENOMEM);
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
P->opaque = Q;
if( P->es == 0 )
@@ -701,14 +701,18 @@ PJ *PROJECTION(tmerc) {
TMercAlgo algo;
if( !getAlgoFromParams(P, algo) )
- return pj_default_destructor(P, PJD_ERR_INVALID_ARG);
+ {
+ proj_log_error(P, _("Invalid value for algo"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
return setup(P, algo);
}
PJ *PROJECTION(etmerc) {
if (P->es == 0.0) {
- return pj_default_destructor(P, PJD_ERR_ELLIPSOID_USE_REQUIRED);
+ proj_log_error(P, _("Invalid value for eccentricity: it should not be zero"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
return setup (P, TMercAlgo::PODER_ENGSAGER);
@@ -720,10 +724,12 @@ PJ *PROJECTION(etmerc) {
PJ *PROJECTION(utm) {
long zone;
if (P->es == 0.0) {
- return pj_default_destructor(P, PJD_ERR_ELLIPSOID_USE_REQUIRED);
+ proj_log_error(P, _("Invalid value for eccentricity: it should not be zero"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
if (P->lam0 < -1000.0 || P->lam0 > 1000.0) {
- return pj_default_destructor(P, PJD_ERR_INVALID_UTM_ZONE);
+ proj_log_error(P, _("Invalid value for lon_0"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
P->y0 = pj_param (P->ctx, P->params, "bsouth").i ? 10000000. : 0.;
@@ -734,7 +740,8 @@ PJ *PROJECTION(utm) {
if (zone > 0 && zone <= 60)
--zone;
else {
- return pj_default_destructor(P, PJD_ERR_INVALID_UTM_ZONE);
+ proj_log_error(P, _("Invalid value for zone"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
}
else /* nearest central meridian input */
@@ -751,6 +758,9 @@ PJ *PROJECTION(utm) {
TMercAlgo algo;
if( !getAlgoFromParams(P, algo) )
- return pj_default_destructor(P, PJD_ERR_INVALID_ARG);
+ {
+ proj_log_error(P, _("Invalid value for algo"));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
return setup(P, algo);
}
diff --git a/src/projections/tobmerc.cpp b/src/projections/tobmerc.cpp
index f05a9b6b..13633a91 100644
--- a/src/projections/tobmerc.cpp
+++ b/src/projections/tobmerc.cpp
@@ -20,7 +20,7 @@ static PJ_XY tobmerc_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forw
// it's not even that large, merely 38.025...). Even if the logic was
// such that phi was strictly equal to pi/2, allowing xy.y = inf would be
// a reasonable result.
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
diff --git a/src/projections/tpeqd.cpp b/src/projections/tpeqd.cpp
index 90efb395..d6d8e790 100644
--- a/src/projections/tpeqd.cpp
+++ b/src/projections/tpeqd.cpp
@@ -66,7 +66,7 @@ PJ *PROJECTION(tpeqd) {
double lam_1, lam_2, phi_1, phi_2, A12;
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
@@ -77,7 +77,10 @@ PJ *PROJECTION(tpeqd) {
lam_2 = pj_param(P->ctx, P->params, "rlon_2").f;
if (phi_1 == phi_2 && lam_1 == lam_2)
- return pj_default_destructor(P, PJD_ERR_CONTROL_POINT_NO_DIST);
+ {
+ proj_log_error(P, _("Invalid value for lat_1/lon_1/lat_2/lon_2: the 2 points should be distinct."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
P->lam0 = adjlon (0.5 * (lam_1 + lam_2));
Q->dlam2 = adjlon (lam_2 - lam_1);
@@ -92,7 +95,8 @@ PJ *PROJECTION(tpeqd) {
Q->z02 = aacos(P->ctx, Q->sp1 * Q->sp2 + Q->cp1 * Q->cp2 * cos (Q->dlam2));
if( Q->z02 == 0.0 ) {
// Actually happens when both lat_1 = lat_2 and |lat_1| = 90
- return pj_default_destructor(P, PJD_ERR_LAT_1_OR_2_ZERO_OR_90);
+ proj_log_error(P, _("Invalid value for lat_1 and lat_2: their absolute value should be < 90°."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
Q->hz0 = .5 * Q->z02;
A12 = atan2(Q->cp2 * sin (Q->dlam2),
diff --git a/src/projections/urm5.cpp b/src/projections/urm5.cpp
index c3021841..25db4391 100644
--- a/src/projections/urm5.cpp
+++ b/src/projections/urm5.cpp
@@ -32,22 +32,29 @@ PJ *PROJECTION(urm5) {
double alpha, t;
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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 (pj_param(P->ctx, P->params, "tn").i) {
- Q->n = pj_param(P->ctx, P->params, "dn").f;
- if (Q->n <= 0. || Q->n > 1.)
- return pj_default_destructor(P, PJD_ERR_N_OUT_OF_RANGE);
- } else {
- return pj_default_destructor(P, PJD_ERR_N_OUT_OF_RANGE);
+ if (!pj_param(P->ctx, P->params, "tn").i )
+ {
+ proj_log_error(P, _("Missing parameter n."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
+
+ Q->n = pj_param(P->ctx, P->params, "dn").f;
+ if (Q->n <= 0. || Q->n > 1.)
+ {
+ proj_log_error(P, _("Invalid value for n: it should be in ]0,1] range."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
+
Q->q3 = pj_param(P->ctx, P->params, "dq").f / 3.;
alpha = pj_param(P->ctx, P->params, "ralpha").f;
t = Q->n * sin (alpha);
const double denom = sqrt (1. - t * t);
if( denom == 0 ) {
- return pj_default_destructor(P, PJD_ERR_LAT_0_OR_ALPHA_EQ_90);
+ proj_log_error(P, _("Invalid value for n / alpha: n * sin(|alpha|) should be < 1."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
Q->m = cos (alpha) / denom;
Q->rmn = 1. / (Q->m * Q->n);
diff --git a/src/projections/urmfps.cpp b/src/projections/urmfps.cpp
index 5d689f9f..36c2b7d1 100644
--- a/src/projections/urmfps.cpp
+++ b/src/projections/urmfps.cpp
@@ -49,16 +49,21 @@ static PJ *setup(PJ *P) {
PJ *PROJECTION(urmfps) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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 (pj_param(P->ctx, P->params, "tn").i) {
- static_cast<struct pj_opaque*>(P->opaque)->n = pj_param(P->ctx, P->params, "dn").f;
- if (static_cast<struct pj_opaque*>(P->opaque)->n <= 0. || static_cast<struct pj_opaque*>(P->opaque)->n > 1.)
- return pj_default_destructor(P, PJD_ERR_N_OUT_OF_RANGE);
- } else {
- return pj_default_destructor(P, PJD_ERR_N_OUT_OF_RANGE);
+ if (!pj_param(P->ctx, P->params, "tn").i )
+ {
+ proj_log_error(P, _("Missing parameter n."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
+ }
+
+ Q->n = pj_param(P->ctx, P->params, "dn").f;
+ if (Q->n <= 0. || Q->n > 1.)
+ {
+ proj_log_error(P, _("Invalid value for n: it should be in ]0,1] range."));
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
return setup(P);
@@ -68,7 +73,7 @@ PJ *PROJECTION(urmfps) {
PJ *PROJECTION(wag1) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
static_cast<struct pj_opaque*>(P->opaque)->n = 0.8660254037844386467637231707;
diff --git a/src/projections/vandg.cpp b/src/projections/vandg.cpp
index 107fc3b9..603aa35c 100644
--- a/src/projections/vandg.cpp
+++ b/src/projections/vandg.cpp
@@ -19,7 +19,7 @@ static PJ_XY vandg_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar
// Comments tie this formulation to Snyder (1987), p. 241.
p2 = fabs(lp.phi / M_HALFPI); // sin(theta) from (29-6)
if ((p2 - TOL) > 1.) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
if (p2 > 1.)
@@ -56,7 +56,7 @@ static PJ_XY vandg_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar
// y from (29-2) has been expressed in terms of x here
xy.y = 1. - xy.y * (xy.y + 2. * al);
if (xy.y < -TOL) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
}
if (xy.y < 0.)
@@ -95,7 +95,7 @@ static PJ_LP vandg_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers
d = C2_27 * c2 * c2 * c2 + (c0 * c0 - THIRD * c2 * c1) / c3; // d (29-14)
const double al_mul_m = al * m; // a1*m1
if( fabs(al_mul_m) < 1e-16 ) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error().lp;
}
d = 3. * d /al_mul_m; // cos(3*theta1) (29-17)
@@ -109,7 +109,7 @@ static PJ_LP vandg_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers
lp.lam = fabs(xy.x) <= TOL ? 0. :
.5 * (r - PISQ + (t <= 0. ? 0. : sqrt(t))) / xy.x;
} else {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
}
diff --git a/src/projections/vandg2.cpp b/src/projections/vandg2.cpp
index cd7e7b6c..d3067952 100644
--- a/src/projections/vandg2.cpp
+++ b/src/projections/vandg2.cpp
@@ -55,7 +55,7 @@ static PJ_XY vandg2_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwa
PJ *PROJECTION(vandg2) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->vdg3 = 0;
@@ -67,7 +67,7 @@ PJ *PROJECTION(vandg2) {
PJ *PROJECTION(vandg3) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
Q->vdg3 = 1;
diff --git a/src/projections/wag3.cpp b/src/projections/wag3.cpp
index ed3250ef..c7308c51 100644
--- a/src/projections/wag3.cpp
+++ b/src/projections/wag3.cpp
@@ -37,7 +37,7 @@ PJ *PROJECTION(wag3) {
double ts;
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
diff --git a/src/projections/wink1.cpp b/src/projections/wink1.cpp
index f4ffafe3..0e68c1ab 100644
--- a/src/projections/wink1.cpp
+++ b/src/projections/wink1.cpp
@@ -35,7 +35,7 @@ static PJ_LP wink1_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers
PJ *PROJECTION(wink1) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
static_cast<struct pj_opaque*>(P->opaque)->cosphi1 = cos (pj_param(P->ctx, P->params, "rlat_ts").f);
diff --git a/src/projections/wink2.cpp b/src/projections/wink2.cpp
index b5b1e812..d3ba49d5 100644
--- a/src/projections/wink2.cpp
+++ b/src/projections/wink2.cpp
@@ -55,7 +55,7 @@ static PJ_LP wink2_s_inverse(PJ_XY xy, PJ *P)
PJ *PROJECTION(wink2) {
struct pj_opaque *Q = static_cast<struct pj_opaque*>(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;
static_cast<struct pj_opaque*>(P->opaque)->cosphi1 = cos(pj_param(P->ctx, P->params, "rlat_1").f);
diff --git a/src/strerrno.cpp b/src/strerrno.cpp
index 3d0131c6..f94de55d 100644
--- a/src/strerrno.cpp
+++ b/src/strerrno.cpp
@@ -8,103 +8,68 @@
#include "proj_config.h"
#include "proj_internal.h"
-static const char * const
-pj_err_list[] = {
- "no arguments in initialization list", /* -1 */
- "no options found in 'init' file", /* -2 */
- "no colon in init= string", /* -3 */
- "projection not named", /* -4 */
- "unknown projection id", /* -5 */
- "effective eccentricity < 0 or >= 1.", /* -6 */
- "unknown unit conversion id", /* -7 */
- "invalid boolean param argument", /* -8 */
- "unknown elliptical parameter name", /* -9 */
- "reciprocal flattening (1/f) = 0", /* -10 */
- "|radius reference latitude| > 90", /* -11 */
- "squared eccentricity < 0", /* -12 */
- "major axis or radius = 0 or not given", /* -13 */
- "latitude or longitude exceeded limits", /* -14 */
- "invalid x or y", /* -15 */
- "improperly formed DMS value", /* -16 */
- "non-convergent inverse meridional dist", /* -17 */
- "non-convergent sinh(psi) to tan(phi)", /* -18 */
- "acos/asin: |arg| >1.+1e-14", /* -19 */
- "tolerance condition error", /* -20 */
- "conic lat_1 = -lat_2", /* -21 */
- "lat_0, lat_1 or lat_2 >= 90", /* -22 */
- "lat_1 = 0", /* -23 */
- "lat_ts >= 90", /* -24 */
- "no distance between control points", /* -25 */
- "projection not selected to be rotated", /* -26 */
- "W <= 0 or M <= 0", /* -27 */
- "lsat not in 1-5 range", /* -28 */
- "path not in range", /* -29 */
- "h <= 0 or h > 1e10 * a", /* -30 */
- "k <= 0", /* -31 */
- "lat_1=lat_2 or lat_1=0 or lat_2=90", /* -32 */
- "lat_0 = 0 or 90 or alpha = 90", /* -33 */
- "elliptical usage required", /* -34 */
- "invalid UTM zone number", /* -35 */
- "", /* no longer used */ /* -36 */
- "failed to find projection to be rotated", /* -37 */
- "failed to load datum shift file", /* -38 */
- "both n & m must be spec'd and > 0", /* -39 */
- "n <= 0, n > 1 or not specified", /* -40 */
- "lat_1 or lat_2 not specified", /* -41 */
- "|lat_1| == |lat_2|", /* -42 */
- "lat_0 is pi/2 from mean lat", /* -43 */
- "unparseable coordinate system definition", /* -44 */
- "geocentric transformation missing z or ellps", /* -45 */
- "unknown prime meridian conversion id", /* -46 */
- "illegal axis orientation combination", /* -47 */
- "point not within available datum shift grids", /* -48 */
- "invalid sweep axis, choose x or y", /* -49 */
- "malformed pipeline", /* -50 */
- "unit conversion factor must be > 0", /* -51 */
- "invalid scale", /* -52 */
- "non-convergent computation", /* -53 */
- "missing required arguments", /* -54 */
- "lat_0 = 0", /* -55 */
- "ellipsoidal usage unsupported", /* -56 */
- "only one +init allowed for non-pipeline operations", /* -57 */
- "argument not numerical or out of range", /* -58 */
- "inconsistent unit type between input and output", /* -59 */
- "arguments are mutually exclusive", /* -60 */
- "generic error of unknown origin", /* -61 */
- "network error", /* -62 */
- /* When adding error messages, remember to update ID defines in
- src/proj_internal.h and src/apps/gie.cpp */
-};
+const char* proj_errno_string(int err) {
+ return proj_context_errno_string(pj_get_default_ctx(), err);
+}
+static const struct
+{
+ int num;
+ const char *str;
+} error_strings[] = {
-const char* proj_errno_string(int err) {
- const int max_error = 9999;
- static char note[50];
- size_t adjusted_err;
+ { PROJ_ERR_INVALID_OP_WRONG_SYNTAX, _("Invalid PROJ string syntax") },
+ { PROJ_ERR_INVALID_OP_MISSING_ARG, _("Missing argument") },
+ { PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE, _("Invalid value for an argument") },
+ { PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS, _("Mutually exclusive arguments") },
+ { PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID, _("File not found or invalid") },
+ { PROJ_ERR_COORD_TRANSFM_INVALID_COORD, _("Invalid coordinate") },
+ { PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN, _("Point outside of projection domain") },
+ { PROJ_ERR_COORD_TRANSFM_NO_OPERATION, _("No operation matching criteria found for coordinate") },
+ { PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID, _("Coordinate to transform falls outside grid") },
+ { PROJ_ERR_COORD_TRANSFM_GRID_AT_NODATA, _("Coordinate to transform falls into a grid cell that evaluates to nodata") },
+ { PROJ_ERR_OTHER_API_MISUSE, _("API misuse") },
+ { PROJ_ERR_OTHER_NO_INVERSE_OP, _("No inverse operation") },
+ { PROJ_ERR_OTHER_NETWORK_ERROR, _("Network error when accessing a remote resource") },
+};
+
+const char PROJ_DLL * proj_context_errno_string(PJ_CONTEXT* ctx, int err)
+{
+ if( ctx == nullptr )
+ ctx = pj_get_default_ctx();
if (0==err)
return nullptr;
- /* System error codes are positive */
- if (err > 0) {
-#ifdef HAVE_STRERROR
- return strerror(err);
-#else
- /* Defend string boundary against exorbitantly large err values */
- /* which may occur on platforms with 64-bit ints */
- sprintf(note, "no system list, errno: %d\n",
- (err < max_error) ? err: max_error);
- return note;
-#endif
+ const char* str = nullptr;
+ for( const auto& num_str_pair: error_strings )
+ {
+ if( err == num_str_pair.num )
+ {
+ str = num_str_pair.str;
+ break;
+ }
}
- /* PROJ error codes are negative: -1 to -9999 */
- adjusted_err = err < -max_error ? max_error : -err - 1;
- if (adjusted_err < (sizeof(pj_err_list) / sizeof(char *)))
- return (char *)pj_err_list[adjusted_err];
+ if( str == nullptr && err > 0 && (err & PROJ_ERR_INVALID_OP) != 0 )
+ {
+ str = _("Unspecified error related to coordinate operation initialization");
+ }
+ if( str == nullptr && err > 0 && (err & PROJ_ERR_COORD_TRANSFM) != 0 )
+ {
+ str = _("Unspecified error related to coordinate transformation");
+ }
- sprintf(note, "invalid projection system error (%d)",
- (err > -max_error) ? err: -max_error);
- return note;
+ if (str) {
+ ctx->lastFullErrorMessage = str;
+ }
+ else
+ {
+ ctx->lastFullErrorMessage.resize(50);
+ snprintf(&ctx->lastFullErrorMessage[0], ctx->lastFullErrorMessage.size(),
+ _("Unknown error (code %d)"), err);
+ ctx->lastFullErrorMessage.resize(strlen(ctx->lastFullErrorMessage.data()));
+ }
+ return ctx->lastFullErrorMessage.c_str();
}
diff --git a/src/transformations/affine.cpp b/src/transformations/affine.cpp
index 43fd8642..8b927688 100644
--- a/src/transformations/affine.cpp
+++ b/src/transformations/affine.cpp
@@ -176,7 +176,7 @@ static void computeReverseParameters(PJ* P)
PJ *TRANSFORMATION(affine,0 /* no need for ellipsoid */) {
struct pj_opaque_affine *Q = initQ();
if (nullptr==Q)
- return pj_default_destructor(P, ENOMEM);
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
P->opaque = (void *) Q;
P->fwd4d = forward_4d;
@@ -227,7 +227,7 @@ PJ *TRANSFORMATION(affine,0 /* no need for ellipsoid */) {
PJ *TRANSFORMATION(geogoffset,0 /* no need for ellipsoid */) {
struct pj_opaque_affine *Q = initQ();
if (nullptr==Q)
- return pj_default_destructor(P, ENOMEM);
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
P->opaque = (void *) Q;
P->fwd4d = forward_4d;
diff --git a/src/transformations/defmodel.cpp b/src/transformations/defmodel.cpp
index 3d0f2a58..89e0429f 100644
--- a/src/transformations/defmodel.cpp
+++ b/src/transformations/defmodel.cpp
@@ -390,7 +390,7 @@ PJ *TRANSFORMATION(defmodel, 1) {
// Pass a dummy ellipsoid definition that will be overridden just afterwards
auto cart = proj_create(P->ctx, "+proj=cart +a=1");
if (cart == nullptr)
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
/* inherit ellipsoid definition from P to Q->cart */
pj_inherit_ellipsoid_def(P, cart);
@@ -402,14 +402,14 @@ PJ *TRANSFORMATION(defmodel, 1) {
const char *model = pj_param(P->ctx, P->params, "smodel").s;
if (!model) {
- proj_log_error(P, "defmodel: +model= should be specified.");
- return destructor(P, PJD_ERR_NO_ARGS);
+ proj_log_error(P, _("defmodel: +model= should be specified."));
+ return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
auto file = NS_PROJ::FileManager::open_resource_file(P->ctx, model);
if (nullptr == file) {
- proj_log_error(P, "defmodel: Cannot open %s", model);
- return destructor(P, PJD_ERR_INVALID_ARG);
+ proj_log_error(P, _("defmodel: Cannot open %s"), model);
+ return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
file->seek(0, SEEK_END);
unsigned long long size = file->tell();
@@ -417,23 +417,23 @@ PJ *TRANSFORMATION(defmodel, 1) {
// that could be a denial of service risk. 10 MB should be sufficiently
// large for any valid use !
if (size > 10 * 1024 * 1024) {
- proj_log_error(P, "defmodel: File %s too large", model);
- return destructor(P, PJD_ERR_INVALID_ARG);
+ proj_log_error(P, _("defmodel: File %s too large"), model);
+ return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
file->seek(0);
std::string jsonStr;
jsonStr.resize(static_cast<size_t>(size));
if (file->read(&jsonStr[0], jsonStr.size()) != jsonStr.size()) {
- proj_log_error(P, "defmodel: Cannot read %s", model);
- return destructor(P, PJD_ERR_INVALID_ARG);
+ proj_log_error(P, _("defmodel: Cannot read %s"), model);
+ return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
try {
Q->evaluator.reset(new Evaluator<Grid, GridSet, EvaluatorIface>(
MasterFile::parse(jsonStr), Q->evaluatorIface, P->a, P->b));
} catch (const std::exception &e) {
- proj_log_error(P, "defmodel: invalid model: %s", e.what());
- return destructor(P, PJD_ERR_INVALID_ARG);
+ proj_log_error(P, _("defmodel: invalid model: %s"), e.what());
+ return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
P->fwd4d = forward_4d;
diff --git a/src/transformations/deformation.cpp b/src/transformations/deformation.cpp
index 8ce02bee..307de85f 100644
--- a/src/transformations/deformation.cpp
+++ b/src/transformations/deformation.cpp
@@ -179,7 +179,7 @@ static PJ_XYZ get_grid_shift(PJ* P, const PJ_XYZ& cartesian) {
shift.lp = pj_hgrid_value(P, Q->hgrids, geodetic.lp);
shift.enu.u = pj_vgrid_value(P, Q->vgrids, geodetic.lp, 1.0);
- if (proj_errno(P) == PJD_ERR_GRID_AREA)
+ if (proj_errno(P) == PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID)
proj_log_debug(P, "deformation: coordinate (%.3f, %.3f) outside deformation model",
proj_todeg(geodetic.lpz.lam), proj_todeg(geodetic.lpz.phi));
@@ -358,7 +358,7 @@ PJ *TRANSFORMATION(deformation,1) {
// Pass a dummy ellipsoid definition that will be overridden just afterwards
Q->cart = proj_create(P->ctx, "+proj=cart +a=1");
if (Q->cart == nullptr)
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
/* inherit ellipsoid definition from P to Q->cart */
pj_inherit_ellipsoid_def (P, Q->cart);
@@ -369,8 +369,8 @@ PJ *TRANSFORMATION(deformation,1) {
/* Build gridlists. Both horizontal and vertical grids are mandatory. */
if ( !has_grids && (!has_xy_grids || !has_z_grids)) {
- proj_log_error(P, "deformation: Either +grids or (+xy_grids and +z_grids) should be specified.");
- return destructor(P, PJD_ERR_NO_ARGS );
+ proj_log_error(P, _("deformation: Either +grids or (+xy_grids and +z_grids) should be specified."));
+ return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG );
}
if( has_grids )
@@ -378,22 +378,22 @@ PJ *TRANSFORMATION(deformation,1) {
Q->grids = pj_generic_grid_init(P, "grids");
/* Was gridlist compiled properly? */
if ( proj_errno(P) ) {
- proj_log_error(P, "deformation: could not find required grid(s).");
- return destructor(P, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_log_error(P, _("deformation: could not find required grid(s).)"));
+ return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
}
else
{
Q->hgrids = pj_hgrid_init(P, "xy_grids");
if (proj_errno(P)) {
- proj_log_error(P, "deformation: could not find requested xy_grid(s).");
- return destructor(P, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_log_error(P, _("deformation: could not find requested xy_grid(s)."));
+ return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
Q->vgrids = pj_vgrid_init(P, "z_grids");
if (proj_errno(P)) {
- proj_log_error(P, "deformation: could not find requested z_grid(s).");
- return destructor(P, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_log_error(P, _("deformation: could not find requested z_grid(s)."));
+ return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
}
@@ -403,8 +403,8 @@ PJ *TRANSFORMATION(deformation,1) {
}
if (pj_param_exists(P->params, "t_obs")) {
- proj_log_error(P, "deformation: +t_obs parameter is deprecated. Use +dt instead.");
- return destructor(P, PJD_ERR_MISSING_ARGS);
+ proj_log_error(P, _("deformation: +t_obs parameter is deprecated. Use +dt instead."));
+ return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
Q->t_epoch = HUGE_VAL;
@@ -413,13 +413,13 @@ PJ *TRANSFORMATION(deformation,1) {
}
if (Q->dt == HUGE_VAL && Q->t_epoch == HUGE_VAL) {
- proj_log_error(P, "deformation: either +dt or +t_epoch needs to be set.");
- return destructor(P, PJD_ERR_MISSING_ARGS);
+ proj_log_error(P, _("deformation: either +dt or +t_epoch needs to be set."));
+ return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
if (Q->dt != HUGE_VALL && Q->t_epoch != HUGE_VALL) {
- proj_log_error(P, "deformation: +dt or +t_epoch are mutually exclusive.");
- return destructor(P, PJD_ERR_MUTUALLY_EXCLUSIVE_ARGS);
+ proj_log_error(P, _("deformation: +dt or +t_epoch are mutually exclusive."));
+ return destructor(P, PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS);
}
P->fwd4d = forward_4d;
diff --git a/src/transformations/helmert.cpp b/src/transformations/helmert.cpp
index 99aa74a4..edb85355 100644
--- a/src/transformations/helmert.cpp
+++ b/src/transformations/helmert.cpp
@@ -478,7 +478,7 @@ static PJ_COORD helmert_reverse_4d (PJ_COORD point, PJ *P) {
static PJ* init_helmert_six_parameters(PJ* P) {
struct pj_opaque_helmert *Q = static_cast<struct pj_opaque_helmert*>(calloc (1, sizeof (struct pj_opaque_helmert)));
if (nullptr==Q)
- return pj_default_destructor (P, ENOMEM);
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
P->opaque = (void *) Q;
/* In most cases, we work on 3D cartesian coordinates */
@@ -522,8 +522,8 @@ static PJ* read_convention(PJ* P) {
if (!Q->no_rotation) {
const char* convention = pj_param (P->ctx, P->params, "sconvention").s;
if( !convention ) {
- proj_log_error (P, "helmert: missing 'convention' argument");
- return pj_default_destructor (P, PJD_ERR_MISSING_ARGS);
+ proj_log_error (P, _("helmert: missing 'convention' argument"));
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
if( strcmp(convention, "position_vector") == 0 ) {
Q->is_position_vector = 1;
@@ -532,17 +532,17 @@ static PJ* read_convention(PJ* P) {
Q->is_position_vector = 0;
}
else {
- proj_log_error (P, "helmert: invalid value for 'convention' argument");
- return pj_default_destructor (P, PJD_ERR_INVALID_ARG);
+ proj_log_error (P, _("helmert: invalid value for 'convention' argument"));
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
/* historically towgs84 in PROJ has always been using position_vector
* convention. Accepting coordinate_frame would be confusing. */
if (pj_param_exists (P->params, "towgs84")) {
if( !Q->is_position_vector ) {
- proj_log_error (P, "helmert: towgs84 should only be used with "
- "convention=position_vector");
- return pj_default_destructor (P, PJD_ERR_INVALID_ARG);
+ proj_log_error (P, _("helmert: towgs84 should only be used with "
+ "convention=position_vector"));
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
}
}
@@ -578,9 +578,9 @@ PJ *TRANSFORMATION(helmert, 0) {
/* Detect obsolete transpose flag and error out if found */
if (pj_param (P->ctx, P->params, "ttranspose").i) {
- proj_log_error (P, "helmert: 'transpose' argument is no longer valid. "
- "Use convention=position_vector/coordinate_frame");
- return pj_default_destructor (P, PJD_ERR_INVALID_ARG);
+ proj_log_error (P, _("helmert: 'transpose' argument is no longer valid. "
+ "Use convention=position_vector/coordinate_frame"));
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
/* Support the classic PROJ towgs84 parameter, but allow later overrides.*/
@@ -612,9 +612,15 @@ PJ *TRANSFORMATION(helmert, 0) {
if (pj_param (P->ctx, P->params, "ts").i) {
Q->scale_0 = pj_param (P->ctx, P->params, "ds").f;
if( Q->scale_0 <= -1.0e6 )
- return pj_default_destructor (P, PJD_ERR_INVALID_SCALE);
+ {
+ proj_log_error (P, _("helmert: invalid value for s."));
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
if (pj_param (P->ctx, P->params, "ttheta").i && Q->scale_0 == 0.0)
- return pj_default_destructor (P, PJD_ERR_INVALID_SCALE);
+ {
+ proj_log_error (P, _("helmert: invalid value for s."));
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
+ }
}
/* Translation rates */
diff --git a/src/transformations/hgridshift.cpp b/src/transformations/hgridshift.cpp
index b28eaf48..1b2ff9b1 100644
--- a/src/transformations/hgridshift.cpp
+++ b/src/transformations/hgridshift.cpp
@@ -155,8 +155,8 @@ PJ *TRANSFORMATION(hgridshift,0) {
P->right = PJ_IO_UNITS_RADIANS;
if (0==pj_param(P->ctx, P->params, "tgrids").i) {
- proj_log_error(P, "hgridshift: +grids parameter missing.");
- return destructor (P, PJD_ERR_NO_ARGS);
+ proj_log_error(P, _("hgridshift: +grids parameter missing."));
+ return destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
/* TODO: Refactor into shared function that can be used */
@@ -194,8 +194,8 @@ PJ *TRANSFORMATION(hgridshift,0) {
Q->grids = pj_hgrid_init(P, "grids");
/* Was gridlist compiled properly? */
if ( proj_errno(P) ) {
- proj_log_error(P, "hgridshift: could not find required grid(s).");
- return destructor(P, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_log_error(P, _("hgridshift: could not find required grid(s)."));
+ return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
gMutex.lock();
diff --git a/src/transformations/horner.cpp b/src/transformations/horner.cpp
index 2c049186..d88ea152 100644
--- a/src/transformations/horner.cpp
+++ b/src/transformations/horner.cpp
@@ -460,12 +460,12 @@ PJ *PROJECTION(horner) {
degree = pj_param(P->ctx, P->params, "ideg").i;
if (degree < 0 || degree > 10000) {
/* What are reasonable minimum and maximums for degree? */
- proj_log_debug (P, "Horner: Degree is unreasonable: %d", degree);
- return horner_freeup (P, PJD_ERR_INVALID_ARG);
+ proj_log_error (P, _("Horner: Degree is unreasonable: %d"), degree);
+ return horner_freeup (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
} else {
- proj_log_debug (P, "Horner: Must specify polynomial degree, (+deg=n)");
- return horner_freeup (P, PJD_ERR_MISSING_ARGS);
+ proj_log_error (P, _("Horner: Must specify polynomial degree, (+deg=n)"));
+ return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
if (pj_param (P->ctx, P->params, "tfwd_c").i || pj_param (P->ctx, P->params, "tinv_c").i) /* complex polynomium? */
@@ -473,7 +473,7 @@ PJ *PROJECTION(horner) {
Q = horner_alloc (degree, complex_polynomia);
if (Q == nullptr)
- return horner_freeup (P, ENOMEM);
+ return horner_freeup (P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
P->opaque = Q;
if (complex_polynomia) {
@@ -483,9 +483,15 @@ PJ *PROJECTION(horner) {
n = 2*degree + 2;
if (0==parse_coefs (P, Q->fwd_c, "fwd_c", n))
- return horner_freeup (P, PJD_ERR_MISSING_ARGS);
+ {
+ proj_log_error (P, _("Horner: missing fwd_c"));
+ return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
+ }
if (0==parse_coefs (P, Q->inv_c, "inv_c", n))
- return horner_freeup (P, PJD_ERR_MISSING_ARGS);
+ {
+ proj_log_error (P, _("Horner: missing inv_c"));
+ return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
+ }
P->fwd4d = complex_horner_forward_4d;
P->inv4d = complex_horner_reverse_4d;
}
@@ -493,19 +499,37 @@ PJ *PROJECTION(horner) {
else {
n = horner_number_of_coefficients (degree);
if (0==parse_coefs (P, Q->fwd_u, "fwd_u", n))
- return horner_freeup (P, PJD_ERR_MISSING_ARGS);
+ {
+ proj_log_error (P, _("Horner: missing fwd_u"));
+ return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
+ }
if (0==parse_coefs (P, Q->fwd_v, "fwd_v", n))
- return horner_freeup (P, PJD_ERR_MISSING_ARGS);
+ {
+ proj_log_error (P, _("Horner: missing fwd_v"));
+ return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
+ }
if (0==parse_coefs (P, Q->inv_u, "inv_u", n))
- return horner_freeup (P, PJD_ERR_MISSING_ARGS);
+ {
+ proj_log_error (P, _("Horner: missing inv_u"));
+ return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
+ }
if (0==parse_coefs (P, Q->inv_v, "inv_v", n))
- return horner_freeup (P, PJD_ERR_MISSING_ARGS);
+ {
+ proj_log_error (P, _("Horner: missing inv_v"));
+ return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
+ }
}
if (0==parse_coefs (P, (double *)(Q->fwd_origin), "fwd_origin", 2))
- return horner_freeup (P, PJD_ERR_MISSING_ARGS);
+ {
+ proj_log_error (P, _("Horner: missing fwd_origin"));
+ return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
+ }
if (0==parse_coefs (P, (double *)(Q->inv_origin), "inv_origin", 2))
- return horner_freeup (P, PJD_ERR_MISSING_ARGS);
+ {
+ proj_log_error (P, _("Horner: missing inv_origin"));
+ return horner_freeup (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
+ }
if (0==parse_coefs (P, &Q->range, "range", 1))
Q->range = 500000;
diff --git a/src/transformations/molodensky.cpp b/src/transformations/molodensky.cpp
index bf5960d2..4a6584a9 100644
--- a/src/transformations/molodensky.cpp
+++ b/src/transformations/molodensky.cpp
@@ -245,7 +245,7 @@ static PJ_XYZ forward_3d(PJ_LPZ lpz, PJ *P) {
lpz = calc_standard_params(lpz, P);
}
if( lpz.lam == HUGE_VAL ) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error().xyz;
}
@@ -277,7 +277,7 @@ static PJ_LPZ reverse_3d(PJ_XYZ xyz, PJ *P) {
lpz = calc_standard_params(point.lpz, P);
if( lpz.lam == HUGE_VAL ) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error().lpz;
}
@@ -297,10 +297,9 @@ static PJ_COORD reverse_4d(PJ_COORD obs, PJ *P) {
PJ *TRANSFORMATION(molodensky,1) {
- int count_required_params = 0;
struct pj_opaque_molodensky *Q = static_cast<struct pj_opaque_molodensky*>(calloc(1, sizeof(struct pj_opaque_molodensky)));
if (nullptr==Q)
- return pj_default_destructor(P, ENOMEM);
+ return pj_default_destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
P->opaque = (void *) Q;
P->fwd4d = forward_4d;
@@ -314,39 +313,42 @@ PJ *TRANSFORMATION(molodensky,1) {
P->right = PJ_IO_UNITS_RADIANS;
/* read args */
- if (pj_param(P->ctx, P->params, "tdx").i) {
- count_required_params ++;
- Q->dx = pj_param(P->ctx, P->params, "ddx").f;
+ if (!pj_param(P->ctx, P->params, "tdx").i)
+ {
+ proj_log_error (P, _("molodensky: missing dx"));
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
+ Q->dx = pj_param(P->ctx, P->params, "ddx").f;
- if (pj_param(P->ctx, P->params, "tdy").i) {
- count_required_params ++;
- Q->dy = pj_param(P->ctx, P->params, "ddy").f;
+ if (!pj_param(P->ctx, P->params, "tdy").i)
+ {
+ proj_log_error (P, _("molodensky: missing dy"));
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
+ Q->dy = pj_param(P->ctx, P->params, "ddy").f;
- if (pj_param(P->ctx, P->params, "tdz").i) {
- count_required_params ++;
- Q->dz = pj_param(P->ctx, P->params, "ddz").f;
+ if (!pj_param(P->ctx, P->params, "tdz").i)
+ {
+ proj_log_error (P, _("molodensky: missing dz"));
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
+ Q->dz = pj_param(P->ctx, P->params, "ddz").f;
- if (pj_param(P->ctx, P->params, "tda").i) {
- count_required_params ++;
- Q->da = pj_param(P->ctx, P->params, "dda").f;
+ if (!pj_param(P->ctx, P->params, "tda").i)
+ {
+ proj_log_error (P, _("molodensky: missing da"));
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
+ Q->da = pj_param(P->ctx, P->params, "dda").f;
- if (pj_param(P->ctx, P->params, "tdf").i) {
- count_required_params ++;
- Q->df = pj_param(P->ctx, P->params, "ddf").f;
+ if (!pj_param(P->ctx, P->params, "tdf").i)
+ {
+ proj_log_error (P, _("molodensky: missing df"));
+ return pj_default_destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
+ Q->df = pj_param(P->ctx, P->params, "ddf").f;
Q->abridged = pj_param(P->ctx, P->params, "tabridged").i;
- /* We want all parameters (except +abridged) to be set */
- if (count_required_params == 0)
- return pj_default_destructor(P, PJD_ERR_NO_ARGS);
-
- if (count_required_params != 5)
- return pj_default_destructor(P, PJD_ERR_MISSING_ARGS);
-
return P;
}
diff --git a/src/transformations/tinshift.cpp b/src/transformations/tinshift.cpp
index 96e0ea4f..8b73c28c 100644
--- a/src/transformations/tinshift.cpp
+++ b/src/transformations/tinshift.cpp
@@ -86,14 +86,14 @@ PJ *TRANSFORMATION(tinshift, 1) {
const char *filename = pj_param(P->ctx, P->params, "sfile").s;
if (!filename) {
- proj_log_error(P, "tinshift: +file= should be specified.");
- return destructor(P, PJD_ERR_NO_ARGS);
+ proj_log_error(P, _("tinshift: +file= should be specified."));
+ return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
auto file = NS_PROJ::FileManager::open_resource_file(P->ctx, filename);
if (nullptr == file) {
- proj_log_error(P, "tinshift: Cannot open %s", filename);
- return destructor(P, PJD_ERR_INVALID_ARG);
+ proj_log_error(P, _("tinshift: Cannot open %s"), filename);
+ return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
file->seek(0, SEEK_END);
unsigned long long size = file->tell();
@@ -101,15 +101,15 @@ PJ *TRANSFORMATION(tinshift, 1) {
// that could be a denial of service risk. 10 MB should be sufficiently
// large for any valid use !
if (size > 10 * 1024 * 1024) {
- proj_log_error(P, "tinshift: File %s too large", filename);
- return destructor(P, PJD_ERR_INVALID_ARG);
+ proj_log_error(P, _("tinshift: File %s too large"), filename);
+ return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
file->seek(0);
std::string jsonStr;
jsonStr.resize(static_cast<size_t>(size));
if (file->read(&jsonStr[0], jsonStr.size()) != jsonStr.size()) {
- proj_log_error(P, "tinshift: Cannot read %s", filename);
- return destructor(P, PJD_ERR_INVALID_ARG);
+ proj_log_error(P, _("tinshift: Cannot read %s"), filename);
+ return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
auto Q = new tinshiftData();
@@ -119,8 +119,8 @@ PJ *TRANSFORMATION(tinshift, 1) {
try {
Q->evaluator.reset(new Evaluator(TINShiftFile::parse(jsonStr)));
} catch (const std::exception &e) {
- proj_log_error(P, "tinshift: invalid model: %s", e.what());
- return destructor(P, PJD_ERR_INVALID_ARG);
+ proj_log_error(P, _("tinshift: invalid model: %s"), e.what());
+ return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
P->destructor = destructor;
diff --git a/src/transformations/vgridshift.cpp b/src/transformations/vgridshift.cpp
index 3d9f046a..b85e4ba4 100644
--- a/src/transformations/vgridshift.cpp
+++ b/src/transformations/vgridshift.cpp
@@ -179,8 +179,8 @@ PJ *TRANSFORMATION(vgridshift,0) {
P->reassign_context = reassign_context;
if (!pj_param(P->ctx, P->params, "tgrids").i) {
- proj_log_error(P, "vgridshift: +grids parameter missing.");
- return destructor(P, PJD_ERR_NO_ARGS);
+ proj_log_error(P, _("hgridshift: +grids parameter missing."));
+ return destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
/* TODO: Refactor into shared function that can be used */
@@ -227,8 +227,8 @@ PJ *TRANSFORMATION(vgridshift,0) {
/* Was gridlist compiled properly? */
if ( proj_errno(P) ) {
- proj_log_error(P, "vgridshift: could not find required grid(s).");
- return destructor(P, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_log_error(P, _("vgridshift: could not find required grid(s)."));
+ return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
gMutex.lock();
diff --git a/src/transformations/xyzgridshift.cpp b/src/transformations/xyzgridshift.cpp
index e37e874d..d00d6484 100644
--- a/src/transformations/xyzgridshift.cpp
+++ b/src/transformations/xyzgridshift.cpp
@@ -257,7 +257,7 @@ PJ *TRANSFORMATION(xyzgridshift,0) {
// Pass a dummy ellipsoid definition that will be overridden just afterwards
Q->cart = proj_create(P->ctx, "+proj=cart +a=1");
if (Q->cart == nullptr)
- return destructor(P, ENOMEM);
+ return destructor(P, PROJ_ERR_INVALID_OP /*ENOMEM*/);
/* inherit ellipsoid definition from P to Q->cart */
pj_inherit_ellipsoid_def (P, Q->cart);
@@ -272,14 +272,14 @@ PJ *TRANSFORMATION(xyzgridshift,0) {
// in RGF93
Q->grid_ref_is_input = false;
} else {
- proj_log_error(P, "xyzgridshift: unusupported value for grid_ref");
- return destructor (P, PJD_ERR_NO_ARGS);
+ proj_log_error(P, _("xyzgridshift: unusupported value for grid_ref"));
+ return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
}
if (0==pj_param(P->ctx, P->params, "tgrids").i) {
- proj_log_error(P, "xyzgridshift: +grids parameter missing.");
- return destructor (P, PJD_ERR_NO_ARGS);
+ proj_log_error(P, _("xyzgridshift: +grids parameter missing."));
+ return destructor (P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
/* multiplier for delta x,y,z */
@@ -294,8 +294,8 @@ PJ *TRANSFORMATION(xyzgridshift,0) {
Q->grids = pj_generic_grid_init(P, "grids");
/* Was gridlist compiled properly? */
if ( proj_errno(P) ) {
- proj_log_error(P, "xyzgridshift: could not find required grid(s).");
- return destructor(P, PJD_ERR_FAILED_TO_LOAD_GRID);
+ proj_log_error(P, _("xyzgridshift: could not find required grid(s)."));
+ return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID);
}
}
diff --git a/test/gie/4D-API_cs2cs-style.gie b/test/gie/4D-API_cs2cs-style.gie
index ade75907..b4ceb4f6 100644
--- a/test/gie/4D-API_cs2cs-style.gie
+++ b/test/gie/4D-API_cs2cs-style.gie
@@ -495,7 +495,7 @@ expect 0 0 1
roundtrip 1
operation +proj=longlat +a=1 +b=1 +vto_meter=1/0
-expect failure errno unit_factor_less_than_0
+expect failure errno invalid_op_illegal_arg_value
operation +proj=longlat +a=1 +b=1 +vto_meter=1000 +geoc
accept 0 0 1000
@@ -522,7 +522,7 @@ roundtrip 1
# in the creation of a PJ object.
-------------------------------------------------------------------------------
operation this is a bogus CRS meant to trigger a generic error in proj_create()
-expect failure errno generic error
+expect failure errno other
-------------------------------------------------------------------------------
# Test proj=set
diff --git a/test/gie/adams_hemi.gie b/test/gie/adams_hemi.gie
index b31c3581..9d23b939 100644
--- a/test/gie/adams_hemi.gie
+++ b/test/gie/adams_hemi.gie
@@ -9,31 +9,31 @@ operation +proj=adams_hemi +R=6370997
tolerance 1 mm
------------------------------------------------------------
accept -179.0512914938 -90.1445918836
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -169.5842217825 -89.1738195765
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.8126151474 -88.9303357409
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.8486678837 -88.7598088570
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.3978823413 -88.5424937255
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.4584139907 -88.3017941113
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.6382190434 -88.1579367749
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.1571755829 -87.4911657719
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.4449870732 -87.1707570236
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.9433443609 -87.0825895518
expect -2032451.307 -14670658.595
@@ -90,61 +90,61 @@ accept 80.5231675121 -77.0660588617
expect 3923735.969 -12068158.388
accept 90.0066580543 -76.6161050638
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.5350349572 -76.3746207928
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.7544963160 -76.2761103137
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.0734970456 -75.8866598636
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.5824490023 -75.8761529489
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.8041765005 -75.3058724059
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.3183273801 -74.4580538960
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.0892519416 -73.7178034782
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.3366715442 -72.7342346131
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.6302993811 -72.6551561090
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.1498353863 -79.8617775679
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.6126454375 -78.9973036997
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.5376706591 -78.3099466224
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.7206409942 -77.9762123582
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.5308439004 -77.1568269429
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.5655598613 -76.3111768828
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.7726048543 -75.3290637518
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.6962230001 -74.3833782562
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.6722260401 -73.9288741111
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.0043085338 -73.3335214021
expect -4844180.674 -11775270.656
@@ -201,61 +201,61 @@ accept 80.1994904845 -64.1621304539
expect 5574892.739 -10059995.184
accept 90.4107676644 -63.6583206132
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.7435829266 -62.9292855324
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.6722999581 -62.8950940661
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.8104324458 -62.4946649855
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.0315355771 -61.8657176607
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.7842333846 -61.7278379595
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.5202047210 -61.0467237730
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.7596965102 -60.2885251988
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.1658638654 -60.0997063537
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.2502374139 -59.7318603713
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.9256771826 -69.2161805164
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.2003519382 -68.5724302106
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.5787597594 -67.9857475830
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.8429607974 -67.2794853256
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.5406690392 -67.1131557084
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.7848559822 -66.2388824806
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.1305416029 -65.8739932573
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.5840686978 -65.1388713461
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.0639263051 -65.0873010186
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.1823111373 -64.6956687932
expect -6023804.986 -10592902.952
@@ -312,61 +312,61 @@ accept 80.4614530617 -58.9769415123
expect 6157836.688 -9386832.221
accept 90.1145386062 -58.4070158299
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.7207579758 -58.0174867644
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.5210303471 -57.2190055708
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.6967482820 -56.4709263993
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.0815389060 -55.4932687347
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.1058922487 -54.7233777967
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.7972249220 -54.0392541094
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.4001197642 -53.4894321537
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.7522870277 -52.8073510172
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.9552557119 -51.9628267761
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.8457680307 -59.7627027888
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.9866964666 -59.3961476674
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.7470584020 -58.4027994525
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.6934351691 -57.7899236032
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.8251656458 -57.1675573730
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.7548669173 -56.7627741202
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.8194582121 -56.1851853006
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.9910713909 -55.2204505294
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.5100607596 -54.5311736441
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.8644038896 -53.9245170355
expect -7342928.224 -9343992.584
@@ -423,61 +423,61 @@ accept 80.9191136756 -48.5703968561
expect 7251379.374 -8116860.291
accept 90.3784337844 -48.2622816670
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.0644440138 -47.5531771971
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.4395693884 -47.1020565364
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.8787420308 -46.5648775386
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.8192016133 -45.7254461234
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.6056889736 -45.1737240013
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.1175388463 -44.6690953878
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.6179845473 -44.6641530409
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.3909883495 -43.8609446159
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.3536945715 -43.4346766235
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.6728016921 -49.7927741248
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.8899091213 -49.5948095572
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.7193834386 -48.9692766397
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.3161804706 -48.3900540417
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.3059860307 -47.5443099911
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.2607005772 -47.3426945690
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.0464442962 -46.3637609990
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.3006137776 -46.2470536112
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.1086587357 -45.3788313212
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.6418391342 -44.9558227898
expect -8329227.919 -8319528.025
@@ -534,61 +534,61 @@ accept 80.6995146991 -37.6252342058
expect 8295075.544 -6755019.382
accept 90.0888221682 -36.9847575823
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.7780137471 -36.6711774624
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.5677826175 -36.0072187827
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.4571639125 -35.5987514678
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.4994689409 -35.0078880309
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.4973246226 -34.7603698284
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.2185553402 -33.7827115000
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.0049830768 -33.6576606654
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.1113538332 -32.7218296414
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.0413323536 -32.6458132046
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.7614880705 -39.3083971924
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.2195161001 -38.8120777840
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.8162149104 -38.0579151517
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.1975646236 -38.0219346503
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.4875552064 -37.4333640809
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.3174577073 -37.3101077795
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.3659376731 -37.0018039210
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.4951561921 -36.7266176768
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.0146344791 -36.1766584469
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.4535006021 -35.4158065520
expect -9377248.574 -7225961.706
@@ -645,61 +645,61 @@ accept 80.7902728211 -26.9566814760
expect 9340735.895 -5359874.908
accept 90.7774660604 -26.3781900961
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.9677349413 -25.6947295847
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.4045415377 -24.8858012124
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.9106581244 -24.6760450197
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.1070741983 -24.3713625355
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.5983717849 -23.4696540641
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.9695044815 -23.2859623288
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.2904693231 -22.4177486612
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.9786886104 -22.3889418243
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.4135817841 -21.4141834167
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.1529257481 -29.4728615966
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.2570543721 -28.7440325834
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.4124846191 -27.8743740104
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.9984258738 -27.2290510016
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.4767743694 -27.0546870326
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.5641039139 -26.6837015309
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.3705764793 -25.8611684419
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.5378587803 -25.4624789903
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.3734787689 -24.9304945684
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.3465946697 -24.1700440971
expect -10704395.428 -5847361.236
@@ -756,61 +756,61 @@ accept 80.8671865869 -16.2424776439
expect 10422654.067 -3712280.432
accept 90.2461291404 -15.5645924718
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.9711143384 -14.9057684714
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.5061775944 -13.9999376124
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.6646869394 -13.8762395278
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.4786384854 -13.6641917166
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.4992250881 -12.7990197875
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.0366235813 -12.4696803942
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.5278707110 -12.2720940753
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.3484529579 -12.2138862792
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.2280212650 -11.3213090122
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.9887698836 -19.8434403334
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.6164294546 -19.0221825561
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.5308654294 -18.1879041212
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.8050966059 -17.4019446265
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.1612469827 -16.6625595025
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.4619391187 -16.4594418864
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.8383311004 -16.1675065524
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.3335459376 -15.6868347454
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.7976668059 -15.6854972046
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.7267294244 -14.8632370454
expect -12053401.390 -4568307.176
@@ -867,61 +867,61 @@ accept 80.6138637845 -4.9732504580
expect 11379290.973 -1327935.989
accept 90.6032354861 -4.1370495786
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.1644532030 -3.7428216159
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.6488410247 -3.6483998900
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.4200133401 -3.5679026480
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.4611248753 -2.8417810196
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.5117693002 -2.1994039429
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.8812291858 -1.4289441365
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.7607399916 -1.4071810906
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.8773135555 -1.0552787291
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.0261501820 -0.4477561568
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.6651296552 -9.8752237332
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.8040567331 -9.5090347854
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.2369236977 -8.7812050100
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.4668694945 -8.7411685014
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.4921425087 -8.4838585832
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.0489643890 -8.3165131291
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.2267713387 -8.2419396541
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.8259504273 -7.2718622518
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.9614377002 -7.1037710855
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.8090238071 -6.4232987368
expect -13640751.484 -2974873.944
@@ -978,61 +978,61 @@ accept 80.6476764259 3.6310845229
expect 11462634.636 984489.812
accept 90.5849650699 4.1063917523
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.6238525596 4.1230600723
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.6594697851 5.0495381196
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.0930076215 5.2661796574
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.5000547754 5.3939702157
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.4751452989 5.8876297478
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.7452375246 6.3021488806
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.1359677924 6.9173640629
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.0302177328 7.6378853558
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.8170157951 8.3472735471
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.1943150364 0.7596010223
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.6391212860 1.0795717122
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.2152700578 1.5596096157
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.3566080854 2.3935395760
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.6411690265 2.8792042895
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.0884027419 3.3736512451
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.6412398776 3.5609941446
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.8410023851 4.3613065976
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.5554211656 5.1657533479
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.3773565828 5.9157121060
expect -13652078.995 2749284.275
@@ -1089,61 +1089,61 @@ accept 80.2140199400 13.5624272700
expect 10571534.837 3165721.762
accept 90.4576635954 13.9718076506
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.6449925924 14.8800104945
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.2075367326 15.0521133300
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.4913041985 15.0889224537
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.1088876084 15.6744717063
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.6091054692 15.9789322360
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.8827038395 16.1118935785
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.8584892232 16.9655055987
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.7081605352 17.1424915281
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.4875952646 17.7286920734
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.2192819040 10.8569245931
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.0657035958 11.2213297367
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.1659774291 11.5431930234
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.9545173238 12.5029285949
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.3117413904 12.6753804804
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.3194639426 13.3306225335
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.8562785026 13.8682936931
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.1061461002 14.0130001331
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.6079217864 14.7921669533
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.3223757109 14.9467935082
expect -11977848.908 4521084.682
@@ -1200,61 +1200,61 @@ accept 80.7948402736 23.3693033859
expect 9696270.644 4844753.993
accept 90.9423588456 23.9305098127
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.5427479545 24.6568371578
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.6483359564 25.2988879331
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.6254581560 25.7897168715
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.6198305384 26.5579713234
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.5223099495 27.4665102983
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.1770507578 27.9150551786
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.8757513817 28.5236724280
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.8877826460 29.0924417375
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.6425321330 29.5764205068
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.9444701529 20.8756448666
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.6232517758 21.6942653703
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.5830169036 22.4130383475
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.4619550763 22.6339632787
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.7058201004 23.2553831478
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.7766004320 23.8189681109
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.3228272091 24.7032636217
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.5551540716 24.7745254301
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.9135718461 25.5385802763
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.1841069049 26.2083957447
expect -10431143.612 6091127.422
@@ -1311,61 +1311,61 @@ accept 80.9991967787 34.8943272959
expect 8589604.803 6432883.803
accept 90.5925677009 35.3510670805
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.0148954666 36.2711932097
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.4283207815 36.6017613088
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.6777960225 37.3666811945
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.2891249681 37.8530786142
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.8212942434 38.5395736955
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.7430926180 38.7113483726
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.9509577553 39.6821505727
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.3061167023 40.4192356875
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.9886935244 41.3233715669
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.3343647471 30.6447124879
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.9318029695 30.8088173910
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.9351347433 31.4030041187
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.1603401895 31.7370508292
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.8411358400 31.9883214220
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.6487283950 32.2540792459
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.3377596938 32.5474903700
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.4052121056 32.6499740509
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.9645719240 33.2634048792
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.3430796801 33.3255757200
expect -9605176.890 6972552.471
@@ -1422,61 +1422,61 @@ accept 80.6903986951 43.0741360152
expect 7768806.954 7429525.503
accept 90.6634321726 43.5837411887
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.8304968356 44.3478015738
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.2734219112 44.4218804789
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.7981801963 44.9674252843
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.6206535666 45.4286113875
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.3730391283 46.0714239353
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.9426457881 46.5091534230
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.6115790352 47.4101077572
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.3277640796 48.0638373590
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.8477425796 48.8442357472
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.2598149320 40.1705017627
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.6056153255 40.1727881259
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.3396275493 41.0355246248
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.3430287138 41.0573932198
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.3972998819 41.0866734660
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.2347342883 41.3220478306
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.9384666450 41.9087201484
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.1765297705 42.5137977627
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.7425660165 43.1240737964
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.3631524858 43.6013437171
expect -8456598.089 8145902.918
@@ -1533,61 +1533,61 @@ accept 80.1015409967 53.6234824949
expect 6684866.077 8688618.853
accept 90.9390534980 54.4032676618
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.2275975816 54.6540829630
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.2799875321 55.5050863665
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.5746083149 55.8365526658
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.5493283922 55.8603600954
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.1036826064 56.0703761781
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.2683487285 56.7530037053
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.2871251380 57.2145257183
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.1375706366 57.2304506879
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.2551410057 57.5449642224
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.4163113130 50.3425538005
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.9733110986 50.4458299488
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.7576358296 50.9581504113
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.3417213155 51.6042289093
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.0195163151 51.8452436385
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.9037457234 52.0925641350
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.8773360504 52.9710431510
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.3390467545 53.2106639106
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.5444768748 53.6966176349
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.1508332331 54.2933793206
expect -7253089.374 9338825.070
@@ -1644,61 +1644,61 @@ accept 80.2667195466 63.4462194528
expect 5659364.075 9965995.331
accept 90.1958404963 64.0831209279
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.5787966151 64.7750993019
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.5253826702 65.0311314831
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.1812962078 65.3475412110
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.6287227669 65.6970336106
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.0181654960 66.0623612621
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.7856466511 66.3591210923
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.9724593003 66.6162174492
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.0946608724 66.6386212957
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.4742461481 67.2758505348
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.3409209668 60.7971917835
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.8189576120 61.1637771517
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.5389911401 61.2887975834
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.8226015684 61.6437737052
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.2361655032 62.2457658007
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.4677006422 63.0421916813
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.2765495979 63.0575080285
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.6674914716 63.2917945558
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.7670971881 63.3834861911
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.8162159435 64.1409584458
expect -6128005.443 10556995.120
@@ -1755,61 +1755,61 @@ accept 80.1791569395 72.7183017021
expect 4529430.842 11315638.668
accept 90.8791736411 72.9059905421
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.0478827489 73.6259975169
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.4087249466 74.2803681973
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.3401612468 74.8365621394
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.1826062634 75.5694271641
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.9483568214 75.9187393924
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.4892277622 76.6692051191
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.6382868956 77.4573927636
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.7717121538 77.8061856572
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.3573673565 78.0660690876
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.6675977383 70.0957203052
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.7405185971 70.8584256587
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.5167125707 71.8322204655
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.0042143904 72.1158106531
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.0329602286 72.2542294354
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.7801336775 73.2077231869
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.3119539671 73.8550759705
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.4758176356 74.3266149256
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.6607202273 75.0169362990
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.4753530769 75.9617981968
expect -4457168.999 12206697.987
@@ -1866,61 +1866,61 @@ accept 80.9787521274 84.9230149078
expect 2463890.570 13818835.453
accept 90.9143604315 85.3871192550
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.4734880731 86.0042464514
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.9680822795 86.3859461851
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.8622100732 87.2340544489
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.2558456040 87.3620502284
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.2081210889 87.9608446770
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.4963196965 88.3752399281
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.1141812758 89.1315428504
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.8037412086 89.6150717843
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.1602592915 90.5979873573
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -179.4988010038 80.2382292021
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.7323895837 80.2920174872
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.9503807693 80.8196927273
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.0925061081 81.4663152862
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.5716369758 82.4286410234
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.8787197288 82.8456226975
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.4793423714 83.5516191256
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.2664761985 84.4756117750
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.3415573570 85.3222226381
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.5621686999 86.1477384313
expect -2328002.776 14359252.241
@@ -1950,171 +1950,171 @@ accept -9.7223365758 89.3832521756
expect -112026.906 15387878.248
accept 0.6641448256 90.0106423220
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 10.1860723801 90.3688642972
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 20.9490167192 90.7173958262
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 30.5649867370 90.9925163187
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 40.4458702150 91.4734308311
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 50.5856921606 91.9158720484
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 60.1363202035 92.2767051552
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 70.0710227099 93.2758942081
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 80.2222434482 93.6733349750
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 90.0483434140 94.4740404396
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 100.6823676393 95.0641687155
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 110.6403276588 95.6156935259
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 120.2581625576 96.0431766104
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 130.4609264126 96.4854267472
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 140.6441294534 96.7262713213
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 150.3252472008 97.1420609214
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 160.7668616164 97.4790143988
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 170.7465062128 97.6550567817
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 180.7542323137 98.2872938097
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -179.4933532172 89.0462961156
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.8505428520 89.8903183246
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.6997771019 89.9583403191
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.2613507188 90.8395350848
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -139.1842997548 91.1573946186
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -129.6568991775 91.9446769249
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -119.3115606256 92.6597043587
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -109.6274703609 93.6500222571
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -99.3955363318 93.6790731121
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -89.4902277654 93.7101118679
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -79.2055095189 93.8973426839
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -69.2694919752 94.5715889948
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -59.2096313695 94.8767204910
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -49.3346426547 95.7619370286
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -39.2940192313 95.9177686800
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -29.1265263906 96.4025342806
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -19.8149677195 96.5067828223
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -9.2806942519 96.8402148749
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 0.9337491530 97.5569468760
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 10.2800898790 97.9514714385
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 20.9290209494 98.9284832763
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 30.3939457169 99.5719752144
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 40.6958590705 100.0328567981
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 50.1473239826 100.6776574030
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 60.6429472168 100.7044060498
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 70.8017862719 101.2635238404
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 80.3144473172 101.9663622692
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 90.7459660200 102.3134423218
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 100.1161002435 103.1947683448
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 110.1928396624 104.0579352787
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 120.2928981698 104.8100792607
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 130.4257286255 105.4176918707
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 140.8110132830 105.4248870814
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 150.8802025406 106.2350153626
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 160.3540927190 106.6211948814
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 170.1006211763 106.7429949781
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 180.9080349563 107.0582862622
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
</gie-strict>
diff --git a/test/gie/adams_ws1.gie b/test/gie/adams_ws1.gie
index fa9da8c6..3593fe12 100644
--- a/test/gie/adams_ws1.gie
+++ b/test/gie/adams_ws1.gie
@@ -10,10 +10,10 @@ operation +proj=adams_ws1 +R=6370997
tolerance 1 mm
------------------------------------------------------------
accept -179.5170670673 -90.3642618405
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -169.6193301609 -90.0089826784
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -159.5146913398 -89.9552061084
expect -350717.162 -11748881.092
@@ -1891,10 +1891,10 @@ accept 160.6971562328 89.4208328233
expect 1268680.941 11594325.039
accept 170.3991577317 90.3170479552
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 180.5908903286 90.7796418583
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -179.6672737749 80.9670130376
expect -5579975.368 11792148.700
@@ -1957,165 +1957,165 @@ accept 10.1878191712 89.8306694493
expect 61235.456 11123325.873
accept 20.3202271141 90.0891258483
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 30.4076531874 90.1655009485
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 40.4697816170 90.3073014721
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 50.0046280736 90.9081150272
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 60.2882853272 91.3234973005
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 70.1983790734 92.0487871293
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 80.2016298087 92.7883781050
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 90.1380649347 93.4193661081
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 100.9727810821 94.0036131508
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 110.2124518442 94.5588879261
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 120.9027437830 95.4070516655
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 130.4370128971 95.6659394457
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 140.5025123065 95.8655824422
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 150.4051276696 96.5597126498
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 160.6794810904 97.5509003421
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 170.0804614782 97.7962770171
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 180.7350988655 97.9297507566
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -179.6509243766 89.9594690425
expect -339016.824 11811270.987
accept -169.1462360158 90.2259103522
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -159.1237371257 91.0966186475
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -149.3864893992 92.0018593591
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -139.8836795793 92.7310580140
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -129.2447556879 93.0874941458
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -119.5691328385 94.0016439421
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -109.5375733271 94.6275672079
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -99.6767551820 94.9362396518
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -89.0765267674 95.5300020136
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -79.7404375474 95.8979843707
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -69.2186423862 96.1670313079
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -59.3116550382 97.0176191327
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -49.2194140278 97.9598960425
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -39.4423952109 97.9675789614
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -29.2846350035 98.7361321642
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -19.5599253582 98.8248133304
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -9.7751102831 99.2905137713
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 0.4459912613 99.9348079001
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 10.2556901904 100.0679369696
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 20.2129499464 100.4339484435
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 30.5120716507 100.8173987820
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 40.9186217475 101.3362169174
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 50.4499309674 101.7519777648
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 60.9618169609 101.9681616248
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 70.5136938969 102.7263743079
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 80.1112365376 103.4930742925
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 90.0656487088 104.2687818917
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 100.4737302350 105.1672304167
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 110.0826941374 105.9578331609
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 120.5038465053 106.4653112353
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 130.1946022249 107.2836000330
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 140.1612060920 108.2561565502
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 150.8381796528 108.3785139275
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 160.5344804952 109.2381208530
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 170.6816130052 110.0255190870
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 180.9197969760 110.0988929845
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
</gie-strict>
diff --git a/test/gie/adams_ws2.gie b/test/gie/adams_ws2.gie
index c2ff193f..06df3696 100644
--- a/test/gie/adams_ws2.gie
+++ b/test/gie/adams_ws2.gie
@@ -11,7 +11,7 @@ operation +proj=adams_ws2 +R=6370997
tolerance 1 mm
------------------------------------------------------------
accept -179.7092450238 -90.0290393775
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -169.9316998581 -89.6983443874
expect -2757243.603 -13694037.516
@@ -1886,16 +1886,16 @@ accept 140.8963110473 89.7228156694
expect 2304894.417 13439579.058
accept 150.4318097094 90.4391164019
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 160.7127363327 90.6605815936
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 170.7492804294 90.8176634524
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 180.4583398460 90.9109976584
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -179.7591323884 80.4424115493
expect -6903393.952 9786682.886
@@ -1964,160 +1964,160 @@ accept 30.8762585995 89.9894216623
expect 237234.260 14954822.615
accept 40.2272544657 90.2854737833
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 50.3342208278 90.6201781373
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 60.0620171885 91.1323497706
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 70.7871678571 91.2021231110
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 80.7237355733 91.8207335323
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 90.5359055804 91.8495346522
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 100.2370378259 92.3201685216
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 110.7018248262 92.7082390660
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 120.4791498907 92.8320642395
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 130.7292413039 93.7863129954
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 140.1002623482 94.2304861566
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 150.7401582820 94.4002034978
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 160.9690930362 95.0432445572
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 170.5238000008 95.9332496636
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 180.5593997844 96.9295538910
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -179.2788799656 89.7588830795
expect -2720982.745 13966946.704
accept -169.2920835775 90.4241930348
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -159.9895526197 91.4107597532
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -149.2463523987 92.1662912669
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -139.5441662785 93.0270602663
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -129.2489121030 93.8575161591
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -119.2218964968 94.3245277139
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -109.6391371233 94.8605218216
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -99.7022656135 95.4188372117
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -89.9236110047 96.1459344102
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -79.3053114467 96.4284727639
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -69.9403123372 97.1204524330
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -59.8919954903 98.0976036625
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -49.4360361183 99.0132534146
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -39.1296215520 99.7082663882
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -29.7429317093 100.3804719805
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -19.9518617483 100.7090523427
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -9.8094666546 100.7731576636
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 0.6789399156 101.1890038152
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 10.3002789517 101.6303167682
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 20.3122591998 101.9746447499
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 30.8403181671 102.1868812356
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 40.5913833272 102.9224326125
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 50.4094599185 103.4226263618
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 60.2807542048 103.6337815648
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 70.1179652096 103.9375646519
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 80.0709906538 104.9002368302
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 90.4905546467 104.9051484801
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 100.8677613905 105.1778053719
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 110.7875504667 106.1651152124
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 120.3531685812 106.2777498204
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 130.5786379336 106.8735960149
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 140.2390732913 107.1035922681
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 150.2230766093 107.9665006223
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 160.0106199737 108.8731447468
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 170.2666681817 109.4591245928
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 180.2003062924 109.9750225424
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
-------------------------------------------------------------------------------
# Test inverse
@@ -2171,6 +2171,6 @@ roundtrip 1
direction inverse
accept 0.000005801264 16722285.492330472916
-expect failure errno non_convergent
+expect failure errno coord_transfm_outside_projection_domain
</gie-strict>
diff --git a/test/gie/builtins.gie b/test/gie/builtins.gie
index 813b67bb..b3c84f74 100644
--- a/test/gie/builtins.gie
+++ b/test/gie/builtins.gie
@@ -79,18 +79,18 @@ accept -200 -100
expect -0.001790493 -0.000895247
operation +proj=aea +ellps=GRS80 +lat_1=900
-expect failure errno lat_larger_than_90
+expect failure errno invalid_op_illegal_arg_value
operation +proj=aea +ellps=GRS80 +lat_2=900
-expect failure errno lat_larger_than_90
+expect failure errno invalid_op_illegal_arg_value
operation +proj=aea +R=6400000 +lat_1=1 +lat_2=-1
-expect failure errno conic_lat_equal
+expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
operation +proj=aea +a=9999999 +b=.9 +lat_2=1
-------------------------------------------------------------------------
-expect failure errno invalid_eccentricity
+expect failure errno invalid_op_illegal_arg_value
===============================================================================
# Azimuthal Equidistant
@@ -126,7 +126,7 @@ roundtrip 100
# point opposite projection center is undefined
accept 180 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
-------------------------------------------------------------------------------
# Test equatorial aspect of the ellipsoidal azimuthal equidistant. Test data from
@@ -269,11 +269,11 @@ roundtrip 100
#point opposite of projection center is undefined
accept 0 -90
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
direction inverse
accept 0 5
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
accept 0 3.14159265359
expect 180 -90
@@ -302,7 +302,7 @@ roundtrip 100
#point opposite of projection center is undefined
accept 0 90
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
-------------------------------------------------------------------------------
@@ -385,7 +385,7 @@ expect 0 -1.3863
accept 0 90
expect 0 0
accept 0 -90
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
-------------------------------------------------------------------------------
@@ -399,7 +399,7 @@ expect 0 1.3863
accept 0 -90
expect 0 0
accept 0 90
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
-------------------------------------------------------------------------------
# Test oblique aspect
@@ -412,7 +412,7 @@ expect 0 0
accept 0 0
expect -0.7336 -0.5187
accept -45 -45
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
-------------------------------------------------------------------------------
# Test that coordinates on the opposing hemisphere are projected when using
@@ -446,7 +446,7 @@ expect 0.3821 0.4216
operation +proj=airy +R=1 +no_cut
-------------------------------------------------------------------------------
accept -180 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
===============================================================================
# Aitoff
@@ -1351,16 +1351,16 @@ operation +proj=eqdc +a=9999999 +b=.9 +lat_2=1
expect failure
operation +proj=eqdc +R=6400000 +lat_1=1 +lat_2=-1
-expect failure errno conic_lat_equal
+expect failure errno invalid_op_illegal_arg_value
operation +proj=eqdc +R=6400000 +lat_1=91
-expect failure errno lat_larger_than_90
+expect failure errno invalid_op_illegal_arg_value
operation +proj=eqdc +R=6400000 +lat_2=91
-expect failure errno lat_larger_than_90
+expect failure errno invalid_op_illegal_arg_value
operation +proj=eqdc +R=1 +lat_1=1e-9
-expect failure errno conic_lat_equal
+expect failure errno invalid_op_illegal_arg_value
===============================================================================
# Euler
@@ -1679,12 +1679,12 @@ expect -0.001790493 -0.000895247
-------------------------------------------------------------------------------
operation +proj=geos +R=1 +h=0
-------------------------------------------------------------------------------
-expect failure errno invalid_h
+expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
operation +proj=geos +R=1 +h=1e11
-------------------------------------------------------------------------------
-expect failure errno invalid_h
+expect failure errno invalid_op_illegal_arg_value
@@ -1780,7 +1780,7 @@ accept 80 80
expect 5.6713 32.6596
roundtrip 100
accept 0 90
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
# test that extreme northings are mapped to the sphere
direction inverse
@@ -1801,9 +1801,9 @@ accept 45 45
expect 0.7071 -0.7071
roundtrip 100
accept 0 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
accept 90 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
-------------------------------------------------------------------------------
# Test the southern polar aspect of the gnonomic projection
@@ -1818,9 +1818,9 @@ accept 45 -45
expect 0.7071 0.7071
roundtrip 100
accept 0 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
accept 90 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
-------------------------------------------------------------------------------
# Test the oblique aspect of the gnonomic projection
@@ -1838,7 +1838,7 @@ accept 0 90
expect 0 1
roundtrip 100
accept 0 -45
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
===============================================================================
# Goode Homolosine
@@ -1918,7 +1918,7 @@ expect 3450764.261536101 -175619.041820732
# For some reason, does not fail on MacOSX
#accept 60 -45
-#expect failure errno tolerance_condition
+#expect failure errno coord_transfm_outside_projection_domain
direction inverse
accept -1800000.000000000 2600000.000000000
@@ -1988,7 +1988,7 @@ expect -0.001790493 -0.000895247
operation +proj=hammer +a=6400000 +W=1
-------------------------------------------------------------------------------
accept -180 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
===============================================================================
# Hatano Asymmetrical Equal Area
@@ -2502,7 +2502,7 @@ expect 24.833333333333 59.757598563058
-------------------------------------------------------------------------------
operation +proj=krovak +lat_0=-90
-------------------------------------------------------------------------------
-expect failure errno invalid_arg
+expect failure errno invalid_op_illegal_arg_value
===============================================================================
# Laborde
@@ -2536,7 +2536,7 @@ expect 0.498202283 1.999095641
-------------------------------------------------------------------------------
operation +proj=labrd +ellps=GRS80 +lat_0=0
accept 0 0
-expect failure errno lat_0_is_zero
+expect failure errno invalid_op_illegal_arg_value
===============================================================================
# Lambert Azimuthal Equal Area
@@ -2557,7 +2557,7 @@ accept -2 -1
expect -222602.471450095 -110589.827224409
accept 180 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
direction inverse
accept 200 100
@@ -2583,7 +2583,7 @@ accept -2 -1
expect -223365.281370125 -111716.668072916
accept 180 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
direction inverse
accept 200 100
@@ -2619,7 +2619,7 @@ roundtrip 100
# error when waaay outside the sphere
direction inverse
accept 0 10
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
-------------------------------------------------------------------------------
# Test oblique aspect of the ellipsoidal form
@@ -2662,7 +2662,7 @@ expect 0 0.7654
accept 0 45
expect 0 1.8478
accept 0 90
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
tolerance 0.1 mm
accept 45 45
@@ -2683,7 +2683,7 @@ expect 0 4889334.8030
accept 0 45
expect 0 11766619.5307
accept 0 90
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
tolerance 10 cm
accept 45 45
@@ -2709,7 +2709,7 @@ expect 0 -0.7654
accept 0 -45
expect 0 -1.8478
accept 0 -90
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
tolerance 0.1 mm
accept 45 45
@@ -2730,7 +2730,7 @@ expect 0 -4889334.8030
accept 0 -45
expect 0 -11766619.5307
accept 0 -90
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
tolerance 10 cm
accept 45 45
@@ -2740,7 +2740,7 @@ roundtrip 100
# Test error in projection setup
-------------------------------------------------------------------------------
operation +proj=laea +ellps=GRS80 +lat_0=91
-expect failure errno lat_larger_than_90
+expect failure errno invalid_op_illegal_arg_value
===============================================================================
# Lagrange
@@ -2782,22 +2782,22 @@ expect 0.10 0.0
-------------------------------------------------------------------------------
operation +proj=lagrng +R=1 +W=-1
-------------------------------------------------------------------------------
-expect failure errno w_or_m_zero_or_less
+expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
operation +proj=lagrng +R=1 +lat_1=90.00001
-------------------------------------------------------------------------------
-expect failure errno lat_larger_than_90
+expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
operation +proj=lagrng +R=1 +W=0.5
-------------------------------------------------------------------------------
accept 90 0 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
direction inverse
accept 2 0 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
-------------------------------------------------------------------------------
operation +proj=lagrng +R=1
@@ -2966,7 +2966,7 @@ expect 1 2
-------------------------------------------------------------------------------
operation +proj=lcc +a=9999999 +b=.9 +lat_2=1
-------------------------------------------------------------------------------
-expect failure errno invalid_eccentricity
+expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
# This case is incredible. ossfuzz has found the exact value of lat_1 that
@@ -2975,42 +2975,42 @@ operation +proj=lcc +lat_1=2D32 +lat_2=0 +a=6378137 +b=0.2
-------------------------------------------------------------------------------
expect failure
# For some reason fails on MacOSX with a different error
-# errno invalid_eccentricity
+# errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
operation +proj=lcc +ellps=GRS80 +lat_1=0 +lat_2=90
-------------------------------------------------------------------------------
-expect failure errno lat_1_or_2_zero_or_90
+expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
operation +proj=lcc +ellps=GRS80 +lat_1=90 +lat_2=0
-------------------------------------------------------------------------------
-expect failure errno lat_1_or_2_zero_or_90
+expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
operation +proj=lcc +ellps=GRS80 +lat_1=90 +lat_2=90
-------------------------------------------------------------------------------
-expect failure errno lat_1_or_2_zero_or_90
+expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
operation +proj=lcc +ellps=sphere +lat_1=0 +lat_2=90
-------------------------------------------------------------------------------
-expect failure errno lat_1_or_2_zero_or_90
+expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
operation +proj=lcc +ellps=sphere +lat_1=90 +lat_2=0
-------------------------------------------------------------------------------
-expect failure errno lat_1_or_2_zero_or_90
+expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
operation +proj=lcc +ellps=sphere +lat_1=91
-------------------------------------------------------------------------------
-expect failure errno lat_larger_than_90
+expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
operation +proj=lcc +ellps=sphere +lat_2=91
-------------------------------------------------------------------------------
-expect failure errno lat_larger_than_90
+expect failure errno invalid_op_illegal_arg_value
===============================================================================
# Lambert Conformal Conic Alternative
@@ -3187,7 +3187,7 @@ operation +proj=lsat +path=1 +lsat=5 +ellps=sphere
-------------------------------------------------------------------------------
direction inverse
accept 0 1e10
-expect failure errno invalid_x_or_y
+expect failure errno coord_transfm_outside_projection_domain
===============================================================================
# McBryde-Thomas Flat-Polar Sine (No. 1)
@@ -3930,13 +3930,13 @@ accept 45 45
expect 0.4555 -0.4555
roundtrip 100
accept 0 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
direction inverse
accept 0 0
expect 0 90
accept 0 2 # projected coordinate is outside the sphere
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
-------------------------------------------------------------------------------
# Test south polar aspect
@@ -3950,7 +3950,7 @@ accept -45 -45
expect -0.4555 0.4555
roundtrip 100
accept 0 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
-------------------------------------------------------------------------------
operation +proj=nsper +R=1 +h=3 +lat_0=45
@@ -3970,12 +3970,12 @@ roundtrip 100
-------------------------------------------------------------------------------
operation +proj=nsper +R=1 +h=0
-------------------------------------------------------------------------------
-expect failure errno invalid_h
+expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
operation +proj=nsper +R=1 +h=1e11
-------------------------------------------------------------------------------
-expect failure errno invalid_h
+expect failure errno invalid_op_illegal_arg_value
===============================================================================
@@ -4042,7 +4042,7 @@ expect -65.862385599 51.830295078
-------------------------------------------------------------------------------
operation +proj=ob_tran +R=6400000 +o_proj +o_proj=ob_tran
-------------------------------------------------------------------------------
-expect failure errno pjd_err_failed_to_find_proj
+expect failure errno invalid_op_missing_arg
===============================================================================
# Oblique Cylindrical Equal Area
@@ -4241,7 +4241,7 @@ operation +proj=omerc +R=1 +lat_0=1 +lat_1=2 +no_rot
-------------------------------------------------------------------------------
direction inverse
accept 0 1e200
-expect failure errno invalid_x_or_y
+expect failure errno coord_transfm_outside_projection_domain
@@ -4263,28 +4263,28 @@ expect -3569.825230822232 -5093592.310871849768
-------------------------------------------------------------------------------
operation +proj=omerc +R=1 +alpha=0 +lat_0=90
-------------------------------------------------------------------------------
-expect failure errno lat_0_or_alpha_eq_90
+expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
operation +proj=omerc +lat_1=0.1 +a=6400000 +b=1
-------------------------------------------------------------------------------
# Disabled since fails on i386. Not so important. Edge condition found by ossfuzz
-#expect failure errno invalid_eccentricity
+#expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
operation +proj=omerc +lat_1=0.8 +a=6400000 +b=.4
-------------------------------------------------------------------------------
-expect failure errno invalid_eccentricity
+expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
operation +proj=omerc +lat_1=91
-------------------------------------------------------------------------------
-expect failure errno lat_larger_than_90
+expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
operation +proj=omerc +lat_2=91
-------------------------------------------------------------------------------
-expect failure errno lat_larger_than_90
+expect failure errno invalid_op_illegal_arg_value
===============================================================================
@@ -4356,11 +4356,11 @@ accept 90 90
expect 0 1
roundtrip 100
accept 120 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
direction inverse
accept 2 2
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
-------------------------------------------------------------------------------
@@ -4390,11 +4390,11 @@ accept 170 60
expect 0.0868 0.9799
roundtrip 100
accept 140 20
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
direction inverse
accept 2 2
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
-------------------------------------------------------------------------------
@@ -4419,13 +4419,13 @@ accept 90 0
expect 1 0
roundtrip 100
accept 180 -90
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
accept 0 -45
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
direction inverse
accept 2 2
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
-------------------------------------------------------------------------------
# Test the south polar aspect of the Orthographic projection.
@@ -4449,13 +4449,13 @@ accept 90 0
expect 1 0
roundtrip 100
accept 180 90
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
accept 0 45
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
direction inverse
accept 2 2
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
# Put a point a tiny tiny bit outside the radius of the sphere.
# Since we are right at the numerical limit of floating point representation
@@ -4496,7 +4496,7 @@ expect -6378137 18504.1253
# Slightly outside
direction inverse
accept -6378137.001 18504.1253
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
# On boundary of visibility domain
direction forward
@@ -4507,7 +4507,7 @@ expect 0 -6343601.0991
# Just on it, but fails to converge. This test might be fragile
direction inverse
accept 0 -6343601.099075031466782093
-expect failure errno non_convergent
+expect failure errno coord_transfm_outside_projection_domain
# Slightly inside
direction inverse
@@ -4559,11 +4559,11 @@ roundtrip 1
# Point not visible from the projection plane
accept 90.00001 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
# Point not visible from the projection plane
accept -90.00001 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
# Consistent with WGS84 semi-major axis
accept 90 0
@@ -4586,17 +4586,17 @@ roundtrip 1
# Point not visible from the projection plane
direction inverse
accept 0 6356752.3143
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
# Point not visible from the projection plane
direction inverse
accept 1000 6356752.314
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
# Point not visible from the projection plane
direction inverse
accept 6378137.0001 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
-------------------------------------------------------------------------------
# North pole tests
@@ -4617,7 +4617,7 @@ roundtrip 1
# Point not visible from the projection plane
accept 0 -0.0000001
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
# Consistent with WGS84 semi-major axis
accept 0 0
@@ -4627,7 +4627,7 @@ roundtrip 1
# Point not visible from the projection plane
direction inverse
accept 0 -6378137.1
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
-------------------------------------------------------------------------------
# South pole tests
@@ -4644,7 +4644,7 @@ roundtrip 1
# Point not visible from the projection plane
accept 0 0.0000001
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
# Consistent with WGS84 semi-major axis
accept 0 0
@@ -4654,7 +4654,7 @@ roundtrip 1
# Point not visible from the projection plane
direction inverse
accept 0 6378137.1
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
===============================================================================
@@ -5209,7 +5209,7 @@ accept 0.000000000000 -8654720.000000000000
expect 0 -90
accept 17250000 100000
-expect failure errno lat_or_lon_exceed_limit
+expect failure errno coord_transfm_outside_projection_domain
===============================================================================
@@ -5486,7 +5486,7 @@ expect -223407.810259507 111737.938996443
accept -2 -1
expect -223407.810259507 -111737.938996443
accept 180 0
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
direction inverse
accept 200 100
@@ -5978,7 +5978,7 @@ operation +proj=tmerc +R=1
-------------------------------------------------------------------------------
direction inverse
accept -1e200 0
-expect failure errno invalid_x_or_y
+expect failure errno coord_transfm_outside_projection_domain
===============================================================================
@@ -6137,10 +6137,10 @@ operation +proj=tobmerc +ellps=sphere
# Test expected failure at the poles:
-------------------------------------------------------------------------------
accept 0 90
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
accept 0 -90
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
===============================================================================
@@ -6287,7 +6287,8 @@ expect -45.001432287 64.914588378
-------------------------------------------------------------------------------
operation +proj=ups +a=6400000
-------------------------------------------------------------------------------
-expect failure errno ellipsoid_use_required
+# ups not possible on sphere
+expect failure errno invalid_op_illegal_arg_value
===============================================================================
# Urmaev V
@@ -6309,7 +6310,7 @@ accept -2 -1
expect -223393.638433964 -111696.818785117
operation +proj=urm5 +a=6400000 +n=1 +alpha=90
-expect failure errno lat_0_or_alpha_eq_90
+expect failure errno invalid_op_illegal_arg_value
===============================================================================
# Urmaev Flat-Polar Sinusoidal
@@ -6385,7 +6386,8 @@ expect 687071.43911000 6210141.32675053 0.00000000 2000.0000
-------------------------------------------------------------------------------
operation +proj=utm +a=6400000 +zone=30
-------------------------------------------------------------------------------
-expect failure errno ellipsoid_use_required
+# utm not possible on sphere
+expect failure errno invalid_op_illegal_arg_value
===============================================================================
# van der Grinten (I)
@@ -6421,7 +6423,7 @@ operation +proj=vandg +R=1
-------------------------------------------------------------------------------
direction inverse
accept 0 -1e100
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
===============================================================================
@@ -6901,18 +6903,18 @@ roundtrip 1
# missing X_0,Y_0,Z_0 or lon_0,lat_0
operation +proj=topocentric +ellps=WGS84
-expect failure errno missing_args
+expect failure errno invalid_op_missing_arg
# missing Z_0
operation +proj=topocentric +ellps=WGS84 +X_0=0 +Y_0=0
-expect failure errno missing_args
+expect failure errno invalid_op_missing_arg
# missing lat_0
operation +proj=topocentric +ellps=WGS84 +lon_0=0
-expect failure errno missing_args
+expect failure errno invalid_op_missing_arg
# X_0 and lon_0 are mutually exclusive
operation +proj=topocentric +ellps=WGS84 +X_0=0 +lon_0=0
-expect failure errno mutually_exclusive_args
+expect failure errno invalid_op_mutually_exclusive_args
</gie-strict>
diff --git a/test/gie/defmodel.gie b/test/gie/defmodel.gie
index 94dd5784..95264c82 100644
--- a/test/gie/defmodel.gie
+++ b/test/gie/defmodel.gie
@@ -8,15 +8,15 @@ Test +proj=defmodel
# Missing +model
operation +proj=defmodel
-expect failure errno no_args
+expect failure errno invalid_op_missing_arg
# +model doesn't point to an existing file
operation +proj=defmodel +model=i_do_not_exist
-expect failure errno invalid_arg
+expect failure errno invalid_op_file_not_found_or_invalid
# Not a JSON file
operation +proj=defmodel +model=proj.ini
-expect failure errno invalid_arg
+expect failure errno invalid_op_file_not_found_or_invalid
# Horizontal deformation with horizontal unit = degree
operation +proj=defmodel +model=tests/simple_model_degree_horizontal.json
diff --git a/test/gie/deformation.gie b/test/gie/deformation.gie
index cda2e5ac..086c1ebe 100644
--- a/test/gie/deformation.gie
+++ b/test/gie/deformation.gie
@@ -47,7 +47,6 @@ operation +proj=deformation +xy_grids=alaska +z_grids=egm96_15.gtx \
+ellps=GRS80 +dt=16.0 # 2016.0 - 2000.0
-------------------------------------------------------------------------------
tolerance 0.1 mm
-ignore pjd_err_failed_to_load_grid
accept -3004295.5882503074 -1093474.1690603832 5500477.1338251457
expect -3004295.7000 -1093474.2097 5500477.3397
roundtrip 5
@@ -55,9 +54,9 @@ roundtrip 5
# Test that errors are reported for coordinates outside the grid.
# Here we test 120W 40N which is well outside the alaska grid.
accept -2446353.8001 -4237209.0750 4077985.572
-expect failure errno grid_area
+expect failure errno coord_transfm_outside_grid
accept -2446353.8001 -4237209.0750 4077985.572
-expect failure errno grid_area
+expect failure errno coord_transfm_outside_grid
-------------------------------------------------------------------------------
@@ -68,34 +67,32 @@ operation +proj=deformation \
-------------------------------------------------------------------------------
tolerance 0.1 mm
direction inverse
-ignore pjd_err_failed_to_load_grid
accept -3004295.5882503074 -1093474.1690603832 5500477.1338251457 2000.0
expect -3004295.7000 -1093474.2097 5500477.3397 2000.0
roundtrip 5
-------------------------------------------------------------------------------
operation proj=deformation xy_grids=alaska +dt=1.0 ellps=GRS80
-expect failure pjd_err_no_args
+expect failure errno invalid_op_missing_arg
operation proj=deformation z_grids=egm96_15.gtx +dt=1.0 ellps=GRS80
-expect failure pjd_err_no_args
+expect failure errno invalid_op_missing_arg
operation proj=deformation xy_grids=nonexisting z_grids=egm96_15.gtx \
+dt=1.0 ellps=GRS80
-expect failure pjd_err_failed_to_load_grid
+expect failure errno invalid_op_file_not_found_or_invalid
operation proj=deformation xy_grids=alaska z_grids=nonexisting \
+dt=1.0 ellps=GRS80
-expect failure pjd_err_failed_to_load_grid
+expect failure errno invalid_op_file_not_found_or_invalid
operation proj=deformation xy_grids=alaska z_grids=nonexisting ellps=GRS80
-expect failure pjd_err_missing_args
+expect failure errno invalid_op_file_not_found_or_invalid
-------------------------------------------------------------------------------
operation +proj=vgridshift +grids=egm96_15.gtx +t_epoch=2010.0 +t_final=2018.0
-------------------------------------------------------------------------------
tolerance 0.1 mm
-ignore pjd_err_failed_to_load_grid
accept 12 56 0.0 2000.0
expect 12 56 -36.9960 2000.0
@@ -118,7 +115,6 @@ roundtrip 100
operation +proj=vgridshift +grids=egm96_15.gtx +t_epoch=2010.0 +t_final=now
-------------------------------------------------------------------------------
tolerance 0.1 mm
-ignore pjd_err_failed_to_load_grid
accept 12 56 0.0 2000.0
expect 12 56 -36.9960 2000.0
@@ -137,7 +133,6 @@ roundtrip 100
operation +proj=hgridshift +grids=alaska +t_epoch=2010.0 +t_final=2018.0
-------------------------------------------------------------------------------
tolerance 0.1 mm
-ignore pjd_err_failed_to_load_grid
accept -147.0 64.0 0.0 2000.0
expect -147.0023233121 63.9995792119 0.0 2000.0
@@ -155,7 +150,6 @@ roundtrip 100
operation +proj=hgridshift +grids=alaska +t_epoch=2010.0 +t_final=now
-------------------------------------------------------------------------------
tolerance 0.1 mm
-ignore pjd_err_failed_to_load_grid
accept -147.0 64.0 0.0 2000.0
expect -147.0023233121 63.9995792119 0.0 2000.0
diff --git a/test/gie/ellipsoid.gie b/test/gie/ellipsoid.gie
index 5e0049f7..ea0e326a 100644
--- a/test/gie/ellipsoid.gie
+++ b/test/gie/ellipsoid.gie
@@ -53,22 +53,22 @@ expect 1335833.8895192828 7326837.7148738774
# Then try to fail deliberately
-------------------------------------------------------------------------------
operation proj=merc ellps=GRS80000000000
-expect failure errno unknown_ellp_param
+expect failure errno invalid_op_illegal_arg_value
operation proj=merc +a=-1
-expect failure errno major_axis_not_given
+expect failure errno invalid_op_illegal_arg_value
operation proj=merc
accept 0 0
expect 0 0
-operation proj=merc +es=-1
-expect failure errno major_axis_not_given
+operation proj=merc +a=1 +es=-1
+expect failure errno invalid_op_illegal_arg_value
operation proj=merc +R=0
-expect failure errno major_axis_not_given
+expect failure errno invalid_op_illegal_arg_value
operation +proj=merc +R_a +a=2 +f=2
-expect failure errno major_axis_not_given
+expect failure errno invalid_op_illegal_arg_value
operation
expect failure
@@ -117,8 +117,6 @@ expect 1338073.2696101593 7374207.4801437631
-------------------------------------------------------------------------------
operation proj=merc a=1E77 R_lat_a=90 b=1
-# errno invalid_eccentricity on x86_64
-# errno pjd_err_ref_rad_larger_than_90 on i386
expect failure
-------------------------------------------------------------------------------
@@ -136,25 +134,25 @@ expect -1.56904 0
# Shape parameters
-------------------------------------------------------------------------------
operation proj=utm zone=32 ellps=GRS80 rf=0
-expect failure errno rev_flattening_is_zero
+expect failure errno invalid_op_illegal_arg_value
operation proj=utm zone=32 ellps=GRS80 e=-0.5
-expect failure errno invalid_eccentricity
+expect failure errno invalid_op_illegal_arg_value
operation proj=utm zone=32 ellps=GRS80 e=1
-expect failure errno invalid_eccentricity
+expect failure errno invalid_op_illegal_arg_value
operation proj=utm zone=32 ellps=GRS80 es=1
-expect failure errno invalid_eccentricity
+expect failure errno invalid_op_illegal_arg_value
operation proj=utm zone=32 a=1 es=1.1
-expect failure errno invalid_eccentricity
+expect failure errno invalid_op_illegal_arg_value
operation proj=utm zone=32 ellps=GRS80 b=0
-expect failure errno invalid_eccentricity
+expect failure errno invalid_op_illegal_arg_value
operation proj=utm zone=32 ellps=GRS80 f=1
-expect failure errno invalid_eccentricity
+expect failure errno invalid_op_illegal_arg_value
operation proj=utm zone=32 ellps=GRS80 b=6000000
accept 12 55
diff --git a/test/gie/geotiff_grids.gie b/test/gie/geotiff_grids.gie
index b71ed774..7e03d20a 100644
--- a/test/gie/geotiff_grids.gie
+++ b/test/gie/geotiff_grids.gie
@@ -151,13 +151,13 @@ expect 4.05 52.1 10
-------------------------------------------------------------------------------
operation +proj=vgridshift +grids=tests/test_vgrid_invalid_channel_type.tif +multiplier=1
-------------------------------------------------------------------------------
-expect failure errno failed_to_load_grid
+expect failure errno invalid_op_file_not_found_or_invalid
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
operation +proj=vgridshift +grids=tests/test_vgrid_unsupported_byte.tif +multiplier=1
-------------------------------------------------------------------------------
-expect failure errno failed_to_load_grid
+expect failure errno invalid_op_file_not_found_or_invalid
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
@@ -181,7 +181,7 @@ accept 179.8 54.5 0
expect 179.8 54.5 -0.7011
accept 179.799 54.5 0
-expect failure errno grid_area
+expect failure errno coord_transfm_outside_grid
accept 180.1833333 54.5 0
expect -179.8166667 54.5 -3.1933
@@ -190,10 +190,10 @@ accept -179.8166667 54.5 0
expect -179.8166667 54.5 -3.1933
accept 180.184 54.5 0
-expect failure errno grid_area
+expect failure errno coord_transfm_outside_grid
accept -179.816 54.5 0
-expect failure errno grid_area
+expect failure errno coord_transfm_outside_grid
-------------------------------------------------------------------------------
operation +proj=hgridshift +grids=tests/test_hgrid.tif
@@ -327,7 +327,7 @@ accept -45.0 22.5 5
-------------------------------------------------------------------------------
operation +proj=hgridshift +grids=tests/test_vgrid.tif
-------------------------------------------------------------------------------
-expect failure errno failed_to_load_grid
+expect failure errno invalid_op_file_not_found_or_invalid
-------------------------------------------------------------------------------
diff --git a/test/gie/guyou.gie b/test/gie/guyou.gie
index f311c173..2ed2ab49 100644
--- a/test/gie/guyou.gie
+++ b/test/gie/guyou.gie
@@ -9,31 +9,31 @@ operation +proj=guyou +R=6370997
tolerance 1 mm
------------------------------------------------------------
accept -179.2338274749 -90.7265739758
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -169.3015609686 -90.0683270041
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -159.4420546811 -89.5695551279
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.0045856345 -89.3536369188
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.7153960960 -88.6283945950
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.2286632319 -88.1551228787
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.6286953558 -87.5083524092
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.3328522812 -86.7510648640
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.1598524965 -86.5788079857
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.3858632536 -85.7390309668
expect -671252.534 -11805089.168
@@ -90,61 +90,61 @@ accept 80.2085188693 -77.6809008485
expect 1936586.409 -11469925.164
accept 90.8009658259 -76.9680414794
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.6742326194 -76.5942100817
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.5209403479 -75.7585741711
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.5896919383 -74.7649093703
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.7851397036 -73.8582467239
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.7197125638 -72.9106110624
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.4163065521 -72.4059990981
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.4383759680 -71.9757412863
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.5708534042 -71.9525642223
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.2751947006 -71.5923171899
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.7095201992 -79.9687467646
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.0436424710 -79.2424043855
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.2911675882 -78.8917009107
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.2815042820 -78.0224816760
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.5027225646 -77.9987560452
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.2026665027 -77.1138023157
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.6161746714 -76.2954327600
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.9384914753 -75.7674050764
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.2183181307 -75.3730011624
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.2190150125 -74.7701795551
expect -2454071.146 -11777557.324
@@ -201,61 +201,61 @@ accept 80.8997122704 -66.2858473379
expect 3898590.190 -11120572.688
accept 90.1834036836 -65.9440561722
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.1984006355 -65.8229326488
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.0486236854 -65.7960345782
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.0510835725 -65.5190096678
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.0896340570 -64.7428784330
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.3678752942 -64.2229928140
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.9150615805 -63.6990548356
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.7280406636 -63.2384418688
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.9183869916 -62.3774990742
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.5619551786 -61.8063907044
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.5943789042 -69.9992085183
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.2134281484 -69.9776667645
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.4518981501 -69.3934026425
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.3420413989 -68.4537518490
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.1131932532 -67.9826718761
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.7785737569 -67.0804523760
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.8160590971 -66.1963102135
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.4603476745 -65.8550220266
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.0748524068 -64.9756976432
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.9206313411 -64.7601702734
expect -4268828.098 -11805632.912
@@ -312,61 +312,61 @@ accept 80.0904535261 -56.6354279372
expect 5822685.735 -10504356.087
accept 90.6634211024 -56.5251359813
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.1452342443 -55.8401169432
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.6864799856 -55.5116401637
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.3347823427 -55.2601958124
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.5134926951 -55.0238926067
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.3265242174 -54.4313834318
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.3685976599 -54.1552793246
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.9436711470 -53.1842316256
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.4034003030 -52.8621841373
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.0812683568 -52.6818511960
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.2224188803 -59.7295306861
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.4132895133 -59.2803345438
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.2336212919 -58.3674875157
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.6086565801 -57.6885943847
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.4537382278 -57.2767531329
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.8015642819 -57.0799116685
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.7728590554 -56.2047588377
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.7735055519 -55.4019628150
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.4371631073 -55.2867551270
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.8854290226 -55.2220077227
expect -6418775.726 -11794916.199
@@ -423,61 +423,61 @@ accept 80.4369996020 -46.9794332723
expect 8182405.160 -9269149.720
accept 90.9151039880 -46.9029866463
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.4373534616 -46.3943619602
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.2842129880 -46.0308507793
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.6486866778 -45.8054277747
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.9364857762 -44.8554259969
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.6165699073 -43.9676693909
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.9528142413 -43.4405627423
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.5641245537 -42.8137396224
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.0938980656 -42.4864250646
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.3769971687 -41.5989802375
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.6808058361 -49.7903016746
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.7237623059 -49.1268921477
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.4102418582 -48.8849591656
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.2254953136 -48.1844242863
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.6041758915 -48.1179744801
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.3754143228 -47.1336832541
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.9746970079 -46.6736994965
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.7581919902 -46.0366124472
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.3823846098 -45.2381613350
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.0277852820 -44.5174266340
expect -11094288.600 -10444365.724
@@ -534,61 +534,61 @@ accept 80.3791490145 -38.1923095026
expect 9574134.022 -7007709.059
accept 90.5297378114 -37.5687159826
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.5373276614 -37.4573903187
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.0551604465 -36.8785291472
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.5920897044 -36.3504262236
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.1692367892 -36.3071095311
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.0034604349 -35.8053875550
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.9162515055 -35.0369229256
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.4006102901 -34.7824559736
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.8020614665 -34.6367632672
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.1238278697 -34.5735242626
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.3392011550 -39.0089519711
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.9896135260 -38.7758352491
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.9464206150 -38.3643075290
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.8580885141 -38.2565849818
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.0005407033 -37.8175552179
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.9744744916 -36.9749101428
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.4953757022 -36.8251466679
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.8732055905 -36.2644266473
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.2563126423 -35.6283177384
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.2720021301 -34.8337636531
expect -11652944.582 -6432012.406
@@ -645,61 +645,61 @@ accept 80.2959404087 -25.8737294352
expect 10093881.725 -4297066.952
accept 90.1903848581 -25.5035070096
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.5725497895 -24.6749860350
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.0757522922 -23.8621044004
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.4910038636 -23.3154304481
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.4609905705 -22.3944602016
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.6308884892 -22.1941484220
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.0358167607 -21.7789499055
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.5878069076 -21.7481812197
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.4050593367 -20.8432353205
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.6001699300 -20.8118177919
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.3361000782 -29.8463222037
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.8999068245 -28.9429338477
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.7592377898 -28.1615925042
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.9913638701 -28.0372332017
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.2301202473 -27.0565876723
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.1268966632 -26.9865340393
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.2460222852 -26.3197565889
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.2062914741 -26.1682287226
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.9045914125 -25.7799438486
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.4037956256 -25.6991927518
expect -11705355.483 -4359448.179
@@ -756,61 +756,61 @@ accept 80.3956836685 -17.4271102390
expect 10234009.562 -2784279.451
accept 90.6808556357 -16.9481935094
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.3669156655 -16.2433923188
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.3790328662 -15.6932515137
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.0882522480 -15.6441029970
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.9326190128 -15.1072978015
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.4297399110 -14.7647959439
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.6670621082 -14.1800360544
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.3083279810 -13.5438931052
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.8801051896 -12.6909069291
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.9127621133 -11.7358777998
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.9634704329 -19.2242789077
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.1616383718 -18.5021923570
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.5989242161 -17.7569846767
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.7658699571 -17.6838689314
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.2283007229 -17.1203530837
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.9856069274 -16.5121558117
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.7066160149 -15.8271303941
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.0808307002 -15.7236132624
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.7051569128 -15.2351555878
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.3984343202 -14.2830109769
expect -11714485.527 -2294583.435
@@ -867,61 +867,61 @@ accept 80.1896127919 -6.1835665729
expect 10268415.013 -962009.778
accept 90.2901075635 -5.6342271039
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.1017071129 -4.7732910406
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.6453720127 -4.6247740358
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.7065181706 -4.2131506322
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.0549243427 -3.6680122287
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.9588650575 -3.4693258990
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.3128054514 -2.8622073994
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.6250791828 -2.1132082532
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.1249865639 -1.7779699685
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.4636820369 -1.0447468723
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.0903238876 -9.3809572676
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.8021514554 -8.8200596604
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.6897632216 -8.8151211116
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.3642571872 -7.9578518334
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.1869613409 -7.1376473645
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.8103143949 -6.6533639455
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.0042762894 -6.5424897944
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.3222469320 -6.2626405858
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.2447484897 -5.4322064514
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.6583934020 -4.8520491055
expect -11758391.270 -764820.107
@@ -978,61 +978,61 @@ accept 80.4040420231 2.1516254056
expect 10309233.052 333889.458
accept 90.0745563464 2.5008083079
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.1323994743 3.4798778581
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.7633392793 3.6524418056
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.4935453458 3.8138602324
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.1832453461 4.1827817395
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.6879708211 4.3228601350
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.2872780471 5.0096390922
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.4567844437 5.3289862640
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.1798195714 5.7690110660
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.6237066153 6.6873727446
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.1879408995 0.2925675717
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.8193242429 0.5456299185
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.6143094365 0.8491614798
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.1327424918 1.5360082778
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.9118046279 2.2304783506
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.0707848713 3.1774300866
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.0155367869 3.7108516861
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.7138958240 4.2367325538
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.7626123411 4.9489248449
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.0617378460 5.0261998535
expect -11664192.229 792317.110
@@ -1089,61 +1089,61 @@ accept 80.6785108917 11.6138802990
expect 10322728.590 1826238.813
accept 90.9684446145 11.7088334392
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.8216260873 12.6522648050
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.9341322494 12.8091489452
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.9598573820 12.9840580805
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.1838852888 13.9674113487
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.0163435591 14.2583869011
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.3440941987 15.1977215509
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.6373902313 15.9779535702
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.7489315029 16.0224553269
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.4315909707 16.2341190017
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.9613846400 10.9181102314
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.2464750707 11.2011582425
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.3961353214 12.0814824633
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.9176675016 12.1332225594
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.0300120770 12.7448426145
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.1479377942 13.2115900349
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.6509465671 13.5121287506
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.3485953585 13.9838806488
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.8025484668 14.3000196702
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.6183447418 14.3419323455
expect -11750225.007 2304558.947
@@ -1200,61 +1200,61 @@ accept 80.2433369822 23.0164275848
expect 10137749.549 3763259.969
accept 90.9377687408 23.1511733038
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.5407405945 23.7761284488
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.0059145808 24.0087396721
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.0839708022 24.8505061022
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.5684827033 25.5457759639
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.2735017629 25.7841586919
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.4960718541 26.4511385776
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.5086557650 26.5248940712
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.1010951379 26.6437577891
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.4667032708 27.5171288037
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.2332673731 20.5208357556
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.9852102849 20.6884242583
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.0918834805 20.7807287727
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.3554284700 21.5195488802
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.0517203599 22.3228377599
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.7889045882 22.9579802676
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.2864956877 23.1541372478
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.1249371549 23.9554652672
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.7886236408 24.2156608317
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.8158531726 24.4254617574
expect -11779801.464 4109615.321
@@ -1311,61 +1311,61 @@ accept 80.8754092571 33.4499285913
expect 9965465.329 5886025.407
accept 90.9417476435 34.2241428842
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.8763555867 34.9730810876
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.3824336404 35.8924849218
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.3907138338 36.0772654252
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.2213236652 36.3411661168
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.6643127929 37.0777875387
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.5696707234 38.0028546554
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.7330142926 38.8399381962
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.7575452122 39.6058463190
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.9074447347 39.7506383769
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.8967233384 30.5573004598
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.4186924041 30.7925389719
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.3550554816 31.7173298465
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.3340973772 32.5661389704
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.8793305042 33.1451975000
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.0718020283 34.1077930148
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.3765659597 34.6652275838
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.7130644703 34.6829381126
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.5574458139 35.6024191831
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.7509673047 36.5904991465
expect -11753853.356 6923417.921
@@ -1422,61 +1422,61 @@ accept 80.5212319721 43.4298814980
expect 8945156.756 8415826.102
accept 90.6029060873 44.3367368198
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.2968163089 44.7347899226
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.5453757907 45.2325884903
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.7132187645 46.1810408682
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.6036848279 46.5953112427
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.8567165951 47.1100600825
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.2452206431 47.5590007593
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.4264735249 47.6243197261
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.1158223427 47.9911994181
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.2100320112 48.9423016681
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.5621188253 40.3822966969
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.0785389235 40.7397870392
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.9453288766 41.0637989828
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.0072837113 41.2595851413
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.3677527689 41.6743754043
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.1116359654 41.9054883189
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.2367048985 42.7084205060
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.9662473469 42.7707453425
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.5437449083 43.0239640060
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.4757325990 43.2756199739
expect -11568961.170 9589089.555
@@ -1533,61 +1533,61 @@ accept 80.7661690288 51.9879378395
expect 6957594.499 10145750.592
accept 90.2760527960 52.6279152662
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.4470132582 53.2519801847
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.1282829759 53.4607562483
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.5033443580 53.9989335755
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.6561885293 54.6823982531
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.8127091472 54.7255186711
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.0054753699 55.4459165788
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.8312787949 56.2470115579
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.4614439985 57.0241073917
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.7047485406 57.6022388310
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.1586219943 50.1365490236
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.1490260788 50.5023613434
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.9535088204 50.9035428509
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.0803324654 51.7753015653
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.7669273536 52.0799612604
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.3599142098 52.6974765371
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.6940989810 52.7976100393
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.7805542206 53.6394720461
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.9951721199 54.3490528856
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.4965032257 55.2735286995
expect -6404341.484 11736182.738
@@ -1644,61 +1644,61 @@ accept 80.0566574740 65.2466871256
expect 4076741.126 11011949.460
accept 90.0598623933 65.7380193724
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.2499385302 65.8274446207
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.0091445253 66.5841928232
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.1938557094 67.3045114589
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.1756983494 67.6825233842
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.0774508004 68.5260112188
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.3642244888 69.0087889372
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.0390197585 69.5064813197
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.9882511230 69.9663419458
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.7855662108 70.7558001565
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.8630282894 60.2684905661
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.8774561096 60.7063957678
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.1639611249 61.1269337981
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.0814548820 61.9063878006
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.0476545160 62.7911475081
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.8276916999 62.8515546512
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.9464541970 63.7277849393
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.6864148265 63.9317823343
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.4184495170 64.2249537529
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.6146334566 64.3967878406
expect -4340586.273 11779220.401
@@ -1755,61 +1755,61 @@ accept 80.5645741906 73.7542661119
expect 2585249.402 11363593.076
accept 90.6177784757 74.6865930919
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.2695381559 74.9397012116
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.3724185381 75.3340827987
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.0440856622 75.6509550283
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.4765915697 75.8794035471
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.8273607225 76.0863350217
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.7446122566 76.4130503173
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.9066279973 77.2046671411
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.7039755420 77.5254695021
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.7301487821 78.3643690894
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.8424303971 70.7640164273
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.3071682617 71.3534426809
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.9256766432 72.0788134529
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.4389257633 72.9048071827
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.4466193836 73.7144086150
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.4240513471 74.3140345936
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.2324314226 75.1789245938
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.4080456874 75.9740320316
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.9624349535 76.7254677659
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.8454838458 77.0914030368
expect -2065538.883 11806583.302
@@ -1866,61 +1866,61 @@ accept 80.6482540792 83.6156947131
expect 994412.198 11647508.801
accept 90.5789951029 84.1124942551
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 100.9443622402 84.2131541284
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 110.5781783058 84.7127066970
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 120.6025664533 85.5661224284
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 130.0976840056 86.3318417998
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 140.6428111911 86.3329325553
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 150.5251209004 86.5841388479
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 160.4225603060 86.8828039057
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 170.2581319411 87.4171568183
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept 180.2641439484 88.1608036446
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -179.8401984185 80.4164439367
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.6918872432 81.0641431423
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.9211815920 81.7949103274
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.6075138921 82.1028453149
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -139.7372920424 82.6385276754
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -129.7998353504 83.1090136759
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -119.2572393635 83.4744235117
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -109.3246360912 84.2608342272
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -99.9601976700 84.4677069243
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -89.7505869053 85.0897168462
expect -774050.983 11808922.435
@@ -1956,166 +1956,166 @@ accept 10.6007672189 89.4603893825
expect 15609.535 11728897.894
accept 20.8972133561 90.3008662748
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 30.3236847010 90.9360697392
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 40.5211596030 91.7425546179
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 50.9530657025 92.7167872262
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 60.2966089164 93.5518747322
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 70.7058277145 93.9478756274
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 80.2842419408 94.5029189079
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 90.7046514943 94.5870657217
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 100.5757828394 94.7544968060
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 110.0784957493 95.6326996288
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 120.4420696450 95.7426558832
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 130.0586467430 96.7026620164
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 140.4982918026 97.2453640881
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 150.5137836610 97.2825819689
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 160.8117951323 97.8473653755
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 170.3402740510 98.3587698302
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 180.9378053935 98.8743871260
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -179.1153600127 89.6136396944
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -169.2261536485 89.9072554901
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -159.1164133392 89.9075872145
-expect failure errno -20
+expect failure errno coord_transfm_outside_projection_domain
accept -149.3960866375 90.6652890542
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -139.1720109722 91.2726639403
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -129.0729383513 91.6124307897
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -119.9896731679 92.3534538297
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -109.8793121665 92.7446796075
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -99.4084806305 92.8846710223
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -89.0674703286 93.0281709121
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -79.1149414160 93.4632295476
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -69.5261517902 94.2811379653
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -59.0417407292 95.2403005497
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -49.3488539326 95.3977809221
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -39.5548627592 96.1026759897
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -29.0476034815 96.4820442045
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -19.8278954645 96.7461121139
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -9.5488366916 97.4860281314
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 0.2307496667 97.5054708483
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 10.6032378382 97.7247157965
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 20.8959156966 98.0573474237
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 30.7104889319 98.5114024172
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 40.1762654017 98.8114138429
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 50.8420835837 99.5737438963
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 60.4391516649 99.6023781174
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 70.3833096116 99.8129052911
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 80.6796681432 100.7784977140
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 90.8893235311 100.9639616716
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 100.8499388037 101.2529844461
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 110.5488903609 101.9706798836
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 120.1208651509 102.2817021553
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 130.1003249085 102.6010355936
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 140.8624898562 102.6311753718
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 150.3852952852 103.0749738073
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 160.7214099599 103.8391207142
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 170.6439119665 104.6357199780
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 180.2173889904 105.2754168153
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
------------------------------------------------------------
------------------------------------------------------------
diff --git a/test/gie/more_builtins.gie b/test/gie/more_builtins.gie
index 41d0ac52..67635642 100644
--- a/test/gie/more_builtins.gie
+++ b/test/gie/more_builtins.gie
@@ -75,11 +75,11 @@ roundtrip 1
-------------------------------------------------------------------------------
# No arguments
operation proj=molodensky a=6378160 rf=298.25
-expect failure errno no_args
+expect failure errno invalid_op_missing_arg
# Missing arguments
operation proj=molodensky a=6378160 rf=298.25 dx=0
-expect failure errno missing_arg
+expect failure errno invalid_op_missing_arg
-------------------------------------------------------------------------------
@@ -267,11 +267,11 @@ roundtrip 100 1 nm
-------------------------------------------------------------------------------
# Fail on purpose: +grids parameter is mandatory
operation proj=vgridshift
-expect failure errno no_args
+expect failure errno invalid_op_missing_arg
# Fail on purpose: open non-existing grid
operation proj=vgridshift grids=nonexistinggrid.gtx
-expect failure errno failed_to_load_grid
+expect failure errno invalid_op_file_not_found_or_invalid
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
@@ -298,11 +298,11 @@ expect 2.250704350387 46.500051597273
-------------------------------------------------------------------------------
# Fail on purpose: open non-existing grid:
operation proj=hgridshift grids=@nonexistinggrid.gsb,anothernonexistinggrid.gsb
-expect failure errno failed_to_load_grid
+expect failure errno invalid_op_file_not_found_or_invalid
# Fail on purpose: +grids parameter is mandatory:
operation proj=hgridshift
-expect failure errno no_args
+expect failure errno invalid_op_missing_arg
-------------------------------------------------------------------------------
@@ -434,27 +434,27 @@ expect 3513638.1999 778956.4533 5248216.4535 2008.75
-------------------------------------------------------------------------------
# A rotational term implies an explicit convention to be specified
operation proj=helmert rx=1
-expect failure errno missing_arg
+expect failure errno invalid_op_missing_arg
operation proj=helmert rx=1 convention=foo
-expect failure errno invalid_arg
+expect failure errno invalid_op_illegal_arg_value
operation proj=helmert rx=1 convention=1
-expect failure errno invalid_arg
+expect failure errno invalid_op_illegal_arg_value
# towgs84 in helmert context should always be position_vector
operation proj=helmert towgs84=1,2,3,4,5,6,7 convention=coordinate_frame
-expect failure errno invalid_arg
+expect failure errno invalid_op_illegal_arg_value
# Transpose no longer accepted
operation proj=helmert transpose
-expect failure errno invalid_arg
+expect failure errno invalid_op_illegal_arg_value
# Use of 2D Helmert interface with 3D Helmert setup
operation +proj=ob_tran +o_proj=helmert +o_lat_p=0
direction inverse
accept 0 0
-expect failure errno 22
+expect failure errno no_inverse_op
-------------------------------------------------------------------------------
# Molodensky-Badekas from IOGP Guidance 7.2, Transformation from La Canoa to REGVEN
@@ -477,7 +477,7 @@ expect 2550138.45 -5749799.87 1054530.82
# Missing convention
operation proj=molobadekas
-expect failure errno missing_arg
+expect failure errno invalid_op_missing_arg
-------------------------------------------------------------------------------
@@ -513,14 +513,14 @@ roundtrip 1
# some less used options
-------------------------------------------------------------------------------
operation proj=utm ellps=GRS80 zone=32 to_meter=0
-expect failure errno unit_factor_less_than_0
+expect failure errno invalid_op_illegal_arg_value
operation proj=utm ellps=GRS80 zone=32 to_meter=10
accept 12 55
expect 69187.5632 609890.7825
operation proj=utm ellps=GRS80 zone=32 to_meter=1/0
-expect failure errno unit_factor_less_than_0
+expect failure errno invalid_op_illegal_arg_value
operation proj=utm ellps=GRS80 zone=32 to_meter=2.0/0.2
accept 12 55
@@ -791,7 +791,7 @@ expect 25 25 25 25
# Test invalid lat_0
operation +proj=aeqd +R=1 +lat_0=91
-expect failure errno lat_larger_than_90
+expect failure errno invalid_op_illegal_arg_value
-------------------------------------------------------------------------------
# cart
diff --git a/test/gie/peirce_q.gie b/test/gie/peirce_q.gie
index 3706e15a..6e3e5aa8 100644
--- a/test/gie/peirce_q.gie
+++ b/test/gie/peirce_q.gie
@@ -9,10 +9,10 @@ operation +proj=peirce_q +R=6370997
tolerance 1 mm
------------------------------------------------------------
accept -179.6126302052 -90.2440064745
-expect failure errno lat_or_lon_exceed_limit
+expect failure errno coord_transfm_invalid_coord
accept -169.8486692749 -89.5742075028
-expect failure errno tolerance_condition
+expect failure errno coord_transfm_outside_projection_domain
accept 0.8029310185 0.0770204080
expect 126271.599 -11800190.331
@@ -1026,159 +1026,159 @@ accept 30.5303411995 89.7622494101
expect 13429.693 -22771.512
accept 40.0593735791 90.6542378643
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 50.0020623503 91.1469954761
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 60.8522213793 91.6903429214
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 70.7535252886 92.4836618501
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 80.1051275124 92.9389937571
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 90.4124853570 93.5341249190
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 100.7024119502 93.5550590372
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 110.8115837786 93.7909664255
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 120.6013207533 93.8492870154
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 130.7349056594 94.3767135242
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 140.9588399299 94.8671896725
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 150.0262851842 95.3534968784
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 160.4280397748 95.5380581127
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 170.7651411492 95.6370520364
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 180.0448345846 96.2732937318
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -179.8257499571 89.6174371357
expect -129.372 42538.994
accept -169.2875892301 90.5843674190
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -159.8023916584 91.1545744228
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -149.1639625275 92.0870993705
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -139.8013904331 92.8786158281
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -129.1637359401 92.9919538772
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -119.8393027005 93.1739711428
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -109.3406602631 94.1639584700
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -99.0695417625 95.1551429476
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -89.0610247556 95.6178466298
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -79.4516859556 96.0205106534
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -69.8082104896 96.1879870093
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -59.8296737152 96.7698954045
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -49.8769972300 97.2097042960
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -39.9274760034 97.5295561660
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -29.8470989427 97.6781116960
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -19.4625703588 98.0419802761
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept -9.0210837473 98.0868081244
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 0.9799321756 98.5464017880
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 10.0429624590 98.7459055217
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 20.2792585617 99.0223555196
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 30.0602725080 100.0053623620
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 40.2383571525 100.9390147017
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 50.7977119707 101.0770157329
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 60.1464549470 101.4743886273
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 70.3854313326 101.6912083253
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 80.4259639014 102.1177916319
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 90.8059360471 102.5951916979
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 100.0616865688 102.7748252495
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 110.4583416539 103.6248728355
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 120.9751205255 103.7983620507
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 130.7919815186 104.0148850515
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 140.6325380833 104.1792511999
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 150.5737064232 105.0050682525
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 160.8571448065 105.0125232729
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 170.6832502669 105.0174505020
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
accept 180.7137917600 105.8174218935
-expect failure errno -14
+expect failure errno coord_transfm_invalid_coord
</gie-strict>
diff --git a/test/gie/tinshift.gie b/test/gie/tinshift.gie
index dff62693..f16c16bb 100644
--- a/test/gie/tinshift.gie
+++ b/test/gie/tinshift.gie
@@ -8,15 +8,15 @@ Test +proj=tinshift
# Missing +file
operation +proj=tinshift
-expect failure errno no_args
+expect failure errno invalid_op_missing_arg
# +file doesn't point to an existing file
operation +proj=tinshift +file=i_do_not_exist
-expect failure errno invalid_arg
+expect failure errno invalid_op_file_not_found_or_invalid
# Not a JSON file
operation +proj=tinshift +file=proj.ini
-expect failure errno invalid_arg
+expect failure errno invalid_op_file_not_found_or_invalid
# Tests on a file without explicit CRS
diff --git a/test/unit/gie_self_tests.cpp b/test/unit/gie_self_tests.cpp
index f9252137..70e67dcc 100644
--- a/test/unit/gie_self_tests.cpp
+++ b/test/unit/gie_self_tests.cpp
@@ -48,7 +48,6 @@ TEST(gie, cart_selftest) {
PJ_COORD a, b, obs[2];
PJ_COORD coord[2];
- int err;
size_t n, sz;
double dist, h, t;
const char *const args[3] = {"proj=utm", "zone=32", "ellps=GRS80"};
@@ -89,16 +88,6 @@ TEST(gie, cart_selftest) {
/* Clear any previous error */
proj_errno_reset(P);
- /* Invalid projection */
- a = proj_trans(P, static_cast<PJ_DIRECTION>(42), a);
- ASSERT_EQ(a.lpz.lam, HUGE_VAL);
-
- err = proj_errno(P);
- ASSERT_NE(err, 0);
-
- /* Clear error again */
- proj_errno_reset(P);
-
/* Clean up */
proj_destroy(P);
diff --git a/test/unit/proj_errno_string_test.cpp b/test/unit/proj_errno_string_test.cpp
index a592b31f..d58c5e3f 100644
--- a/test/unit/proj_errno_string_test.cpp
+++ b/test/unit/proj_errno_string_test.cpp
@@ -35,37 +35,26 @@
namespace {
-TEST(ProjErrnoStringTest, NoError) { EXPECT_EQ(0, proj_errno_string(0)); }
+TEST(ProjErrnoStringTest, NoError) { EXPECT_EQ(nullptr, proj_errno_string(0)); }
TEST(ProjErrnoStringTest, ProjErrnos) {
- EXPECT_STREQ("no arguments in initialization list", proj_errno_string(-1));
- EXPECT_STREQ("invalid projection system error (-1000)",
- proj_errno_string(-1000));
- EXPECT_STREQ("invalid projection system error (-9999)",
- proj_errno_string(-9999));
- // for errnos < -9999, -9999 is always returned
- const int min = std::numeric_limits<int>::min();
- EXPECT_STREQ("invalid projection system error (-9999)",
- proj_errno_string(min));
- EXPECT_STREQ("invalid projection system error (-9999)",
- proj_errno_string(-10000));
+ EXPECT_STREQ("Unknown error (code -1)", proj_errno_string(-1));
+ EXPECT_STREQ("Invalid PROJ string syntax",
+ proj_errno_string(PROJ_ERR_INVALID_OP_WRONG_SYNTAX));
+ EXPECT_STREQ(
+ "Unspecified error related to coordinate operation initialization",
+ proj_errno_string(PROJ_ERR_INVALID_OP));
+ EXPECT_STREQ("Unspecified error related to coordinate transformation",
+ proj_errno_string(PROJ_ERR_COORD_TRANSFM));
}
-TEST(ProjErrnoStringTest, SystemErrnos) {
- const int max = std::numeric_limits<int>::max();
-
-#ifdef HAVE_STRERROR
- EXPECT_STREQ(strerror(5), proj_errno_string(5));
- EXPECT_STREQ(strerror(9999), proj_errno_string(9999));
- EXPECT_STREQ(strerror(10000), proj_errno_string(10000));
- EXPECT_STREQ(strerror(max), proj_errno_string(max));
-#else
- EXPECT_STREQ("no system list, errno: 5\n", proj_errno_string(5));
- EXPECT_STREQ("no system list, errno: 9999\n", proj_errno_string(9999));
- // for errnos > 9999, 9999 is always returned
- EXPECT_STREQ("no system list, errno: 9999\n", proj_errno_string(10000));
- EXPECT_STREQ("no system list, errno: 9999\n", proj_errno_string(max));
-#endif
+TEST(ProjErrnoStringTest, proj_context_errno_string) {
+ EXPECT_STREQ("Unknown error (code -1)",
+ proj_context_errno_string(nullptr, -1));
+ PJ_CONTEXT *ctx = proj_context_create();
+ EXPECT_STREQ("Unknown error (code -999)",
+ proj_context_errno_string(ctx, -999));
+ proj_context_destroy(ctx);
}
} // namespace