29#ifndef CLIPM_PRIV_ERROR_H
30#define CLIPM_PRIV_ERROR_H
44#define _CLIPM_ERROR_SET_WHERE_() \
46 if (CLIPM_ERROR_IS_SET()) \
51 _msg = cpl_error_get_message(); \
53 while (_msg[_n] != '\0' && _msg[_n] != ':') \
55 while (_msg[_n] == ':' || _msg[_n] == ' ') \
57 cpl_error_set_message( __func__, \
58 cpl_error_get_code(), \
60 clipm_error_is_set_where = 1; \
64#define _CLIPM_ERROR_SET_MSG_(code, object, msg) \
66 char _clipm_error_msg[256]; \
67 _clipm_priv_error_sprint_messages( _clipm_error_msg, \
71 cpl_error_set_message( __func__, \
73 "%s", _clipm_error_msg); \
74 clipm_error_is_set_where = 1; \
168 int clipm_error_catch_call_flag, \
169 clipm_error_is_set_where = 0; \
170 cpl_errorstate clipm_error_trystate; \
172 clipm_error_trystate = cpl_errorstate_get(); \
187 goto _CLIPM_CATCH_LABEL_; \
188 _CLIPM_CATCH_LABEL_: \
190 if ((clipm_error_catch_call_flag = (CLIPM_ERROR_IS_SET()))) \
192 if (!clipm_error_is_set_where) \
193 _CLIPM_ERROR_SET_WHERE_(); \
196 if (clipm_error_catch_call_flag)
209#define CLIPM_ERROR_GET_NEW_SINCE_TRY(void) \
210 (CLIPM_ERROR_IS_NONE() ? CPL_ERROR_NONE : cpl_error_get_code())
221#define CLIPM_ERROR_RECOVER_TRYSTATE(void) \
223 cpl_errorstate_set(clipm_error_trystate); \
224 clipm_error_is_set_where = 0; \
236#define CLIPM_ERROR_SET(code) \
238 CLIPM_TRY_ASSERT(code != CPL_ERROR_NONE); \
239 cpl_error_set(__func__, code); \
240 clipm_error_is_set_where = 1; \
252#define CLIPM_ERROR_SET_MSG(code, object, msg) \
254 CLIPM_TRY_ASSERT(code != CPL_ERROR_NONE); \
255 _CLIPM_ERROR_SET_MSG_(code, object, msg); \
268#define CLIPM_ERROR_SET_MSG_IF_CODE(code, object, msg) \
270 CLIPM_TRY_ASSERT(code != CPL_ERROR_NONE); \
271 if (CLIPM_ERROR_GET_NEW_SINCE_TRY() == code) \
272 _CLIPM_ERROR_SET_MSG_(code, object, msg); \
286#define CLIPM_ERROR_IS_SET(void) \
287 (!cpl_errorstate_is_equal(clipm_error_trystate))
300#define CLIPM_ERROR_IS_NONE(void) \
301 (cpl_errorstate_is_equal(clipm_error_trystate))
317#define CLIPM_TRY_CHECK(condition, code, object, msg) \
321 CLIPM_ERROR_SET_MSG( (code), (object), (msg)); \
338#define CLIPM_TRY_CHECK_AUTOMSG(condition, code) \
342 CLIPM_ERROR_SET_MSG( (code), "!("#condition")", ""); \
357#define CLIPM_TRY_CHECK_ERROR_STATE(void) \
359 if (CLIPM_ERROR_IS_SET()) \
361 if (!clipm_error_is_set_where) \
362 _CLIPM_ERROR_SET_WHERE_(); \
377#define CLIPM_TRY_ASSERT(condition) \
381 _CLIPM_ERROR_SET_MSG_( CLIPM_ERROR_UNEXPECTED, \
383 _CLIPM_MSG_ERR_UNEXPECTED); \
398#define CLIPM_TRY_ASSERT_ERROR_STATE(void) \
400 if (CLIPM_ERROR_IS_SET()) \
402 _CLIPM_ERROR_SET_MSG_( CLIPM_ERROR_UNEXPECTED, \
404 _CLIPM_MSG_ERR_UNEXPECTED); \
418#define CLIPM_TRY_EXIT_WITH_ERROR(code) \
420 CLIPM_ERROR_SET((code)); \
435#define CLIPM_TRY_EXIT_WITH_ERROR_MSG(code, object, msg) \
437 CLIPM_ERROR_SET_MSG((code), (object), (msg)); \
456#define CLIPM_TRY_EXIT_IFN(condition) \
460 CLIPM_TRY_ASSERT(CLIPM_ERROR_IS_SET()); \
461 if (!clipm_error_is_set_where) \
462 _CLIPM_ERROR_SET_WHERE_(); \
477#define CLIPM_TRY_EXIT(void) \
478 goto _CLIPM_CATCH_LABEL_
const char CLIPM_MSG_ERR_2ROWXY[]
Location matrix must contain 2 rows.
Definition clipm_priv_error.c:25
_clipm_error_code_
Extension to CPL error codes.
Definition clipm_priv_error.h:497
@ CLIPM_ERROR_UNEXPECTED
Definition clipm_priv_error.h:498
enum _clipm_error_code_ clipm_error_code
Extension to CPL error codes.
const char CLIPM_MSG_ERR_DIFFTYPES[]
Location matrices differ in size.
Definition clipm_priv_error.c:29
const char _CLIPM_MSG_ERR_HANDLING[]
Internal error handling bug.
Definition clipm_priv_error.c:22
const char CLIPM_MSG_ERR_DIFFSIZES[]
Location matrices differ in size.
Definition clipm_priv_error.c:27
const char _CLIPM_MSG_ERR_UNEXPECTED[]
Internal error.
Definition clipm_priv_error.c:19
void _clipm_priv_error_sprint_messages(char *outstr, const char *msg1, const char *msg2, size_t maxlen)
Definition clipm_priv_error.c:51