rt((expr)) #else #define SVN_ERR_ASSERT(expr) \ do { \ if (!(expr)) \ SVN_ERR(svn_error__malfunction(TRUE, __FILE__, __LINE__, #expr)); \ } while (0) #endif /** Similar to SVN_ERR_ASSERT(), but without the option of returning * an error to the calling function. * * If possible you should use SVN_ERR_ASSERT() instead. * * @since New in 1.6. */ #define SVN_ERR_ASSERT_NO_RETURN(expr) \ do { \ if (!(expr)) { \ svn_error__malfunction(FALSE, __FILE__, __LINE__, #expr); \ abort(); \ } \ } while (0) /** Report a "Not implemented" malfunction. Internal use only. */ #define SVN__NOT_IMPLEMENTED() \ return svn_error__malfunction(TRUE, __FILE__, __LINE__, "Not implemented.") /** A helper function for the macros that report malfunctions. Handle a * malfunction by calling the current "malfunction handler" which may have * been specified by a call to svn_error_set_malfunction_handler() or else * is the default handler as specified in that function's documentation. * * Pass all of the parameters to the handler. The error occurred in the * source file @a file at line @a line, and was an assertion failure of the * expression @a expr, or, if @a expr is null, an unconditional error. * * If @a can_return is true, the handler can return an error object * that is returned by the caller. If @a can_return is false the * method should never return. (The caller will call abort()) * * @since New in 1.6. */ svn_error_t * svn_error__malfunction(svn_boolean_t can_return, const char *file, int line, const char *expr); /** A type of function that handles an assertion failure or other internal * malfunction detected within the Subversion libraries. * * The error occurred in the source file @a file at line @a line, and was an * assertion failure of the expression @a expr, or, if @a expr is null, an * unconditional error. * * If @a can_return is false a function of this type must never return. * * If @a can_return is true a function of this type must do one of: * - Return an error object describing the error, using an error code in * the category SVN_ERR_MALFUNC_CATEGORY_START. * - Never return. * * The function may alter its behaviour according to compile-time * and run-time and even interactive conditions. * * @see SVN_ERROR_IN_CATEGORY() * * @since New in 1.6. */ typedef svn_error_t *(*svn_error_malfunction_handler_t) (svn_boolean_t can_return, const char *file, int line, const char *expr); /** Cause subsequent malfunctions to be handled by @a func. * Return the handler that was previously in effect. * * @a func may not be null. * * @note The default handler is svn_error_abort_on_malfunction(). * * @note This function must be called in a single-threaded context. * * @since New in 1.6. */ svn_error_malfunction_handler_t svn_error_set_malfunction_handler(svn_error_malfunction_handler_t func); /** Return the malfunction handler that is currently in effect. * @since New in 1.9. */ svn_error_malfunction_handler_t svn_error_get_malfunction_handler(void); /** Handle a malfunction by returning an error object that describes it. * * When @a can_return is false, abort() * * This function implements @c svn_error_malfunction_handler_t. * * @since New in 1.6. */ svn_error_t * svn_error_raise_on_malfunction(svn_boolean_t can_return, const char *file, int line, const char *expr); /** Handle a malfunction by printing a message to stderr and aborting. * * This function implements @c svn_error_malfunction_handler_t. * * @since New in 1.6. */ svn_error_t * svn_error_abort_on_malfunction(svn_boolean_t can_return, const char *file, int line, const char *expr); /** @} */ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* SVN_ERROR_H */