31 #include <apr_errno.h>
32 #include <apr_pools.h>
34 #ifndef DOXYGEN_SHOULD_SKIP_THIS
35 #define APR_WANT_STDIO
49 #define SVN_ERR__TRACING
54 #define SVN_NO_ERROR 0
141 const char *message);
152 __attribute__ ((format(printf, 3, 4)));
166 __attribute__((format(printf, 2, 3)));
174 const
char *new_msg);
243 #if defined(SVN_ERR__TRACING)
246 svn_error__locate(
const char *file,
250 #define svn_error_create \
251 (svn_error__locate(__FILE__,__LINE__), (svn_error_create))
252 #define svn_error_createf \
253 (svn_error__locate(__FILE__,__LINE__), (svn_error_createf))
254 #define svn_error_wrap_apr \
255 (svn_error__locate(__FILE__,__LINE__), (svn_error_wrap_apr))
256 #define svn_error_quick_wrap \
257 (svn_error__locate(__FILE__,__LINE__), (svn_error_quick_wrap))
331 #define SVN_ERR(expr) \
333 svn_error_t *svn_err__temp = (expr); \
335 return svn_error_trace(svn_err__temp); \
347 #ifdef SVN_ERR__TRACING
349 svn_error__trace(
const char *file,
long line,
svn_error_t *err);
351 #define svn_error_trace(expr) svn_error__trace(__FILE__, __LINE__, (expr))
353 #define svn_error_trace(expr) (expr)
382 #define SVN_ERR_W(expr, wrap_msg) \
384 svn_error_t *svn_err__temp = (expr); \
386 return svn_error_quick_wrap(svn_err__temp, wrap_msg); \
395 #define SVN_INT_ERR(expr) \
397 svn_error_t *svn_err__temp = (expr); \
398 if (svn_err__temp) { \
399 svn_handle_error2(svn_err__temp, stderr, FALSE, "svn: "); \
400 svn_error_clear(svn_err__temp); \
401 return EXIT_FAILURE; } \
422 #define SVN_ERR_IS_LOCK_ERROR(err) \
423 (err->apr_err == SVN_ERR_FS_PATH_ALREADY_LOCKED || \
424 err->apr_err == SVN_ERR_FS_NOT_FOUND || \
425 err->apr_err == SVN_ERR_FS_OUT_OF_DATE || \
426 err->apr_err == SVN_ERR_FS_BAD_LOCK_TOKEN)
434 #define SVN_ERR_IS_UNLOCK_ERROR(err) \
435 (err->apr_err == SVN_ERR_FS_PATH_NOT_LOCKED || \
436 err->apr_err == SVN_ERR_FS_BAD_LOCK_TOKEN || \
437 err->apr_err == SVN_ERR_FS_LOCK_OWNER_MISMATCH || \
438 err->apr_err == SVN_ERR_FS_NO_SUCH_LOCK || \
439 err->apr_err == SVN_ERR_RA_NOT_LOCKED || \
440 err->apr_err == SVN_ERR_FS_LOCK_EXPIRED)
448 #define SVN_ERROR_IN_CATEGORY(apr_err, category) \
449 ((category) == ((apr_err) / SVN_ERR_CATEGORY_SIZE) * SVN_ERR_CATEGORY_SIZE)
475 #define SVN_ERR_MALFUNCTION() \
477 return svn_error_trace(svn_error__malfunction( \
478 TRUE, __FILE__, __LINE__, NULL)); \
488 #define SVN_ERR_MALFUNCTION_NO_RETURN() \
490 svn_error__malfunction(FALSE, __FILE__, __LINE__, NULL); \
503 #ifdef __clang_analyzer__
506 #define SVN_ERR_ASSERT_E(expr, err) assert((expr))
508 #define SVN_ERR_ASSERT_E(expr, err) \
511 return svn_error_compose_create( \
512 svn_error__malfunction(TRUE, __FILE__, __LINE__, #expr), \
540 #ifdef __clang_analyzer__
542 #define SVN_ERR_ASSERT(expr) assert((expr))
544 #define SVN_ERR_ASSERT(expr) \
547 SVN_ERR(svn_error__malfunction(TRUE, __FILE__, __LINE__, #expr)); \
558 #define SVN_ERR_ASSERT_NO_RETURN(expr) \
561 svn_error__malfunction(FALSE, __FILE__, __LINE__, #expr); \
567 #define SVN__NOT_IMPLEMENTED() \
568 return svn_error__malfunction(TRUE, __FILE__, __LINE__, "Not implemented.")
612 typedef svn_error_t *(*svn_error_malfunction_handler_t)