Loading...
Searching...
No Matches
Malfunctions and assertions

Internal malfunctions and assertions. More...

## Macros

#define | SVN_ERR_MALFUNCTION()
| Report that an internal malfunction has occurred, and possibly terminate the program.
#define | SVN_ERR_MALFUNCTION_NO_RETURN()
| Similar to SVN_ERR_MALFUNCTION(), but without the option of returning an error to the calling function.
#define | SVN_ERR_ASSERT_E(expr, err)
| Like SVN_ERR_ASSERT(), but append ERR to the returned error chain.
#define | SVN_ERR_ASSERT(expr)
| Check that a condition is true: if not, report an error and possibly terminate the program.
#define | SVN_ERR_ASSERT_NO_RETURN(expr)
| Similar to SVN_ERR_ASSERT(), but without the option of returning an error to the calling function.
#define | SVN__NOT_IMPLEMENTED() return svn_error__malfunction(TRUE, __FILE__, __LINE__, "Not implemented.")
| Report a "Not implemented" malfunction.

## Typedefs

typedef svn_error_t *(* | svn_error_malfunction_handler_t) (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.

## Functions

svn_error_t * | svn_error__malfunction (svn_boolean_t can_return, const char *file, int line, const char *expr)
| A helper function for the macros that report malfunctions.
svn_error_malfunction_handler_t | svn_error_set_malfunction_handler (svn_error_malfunction_handler_t func)
| Cause subsequent malfunctions to be handled by func.
svn_error_malfunction_handler_t | svn_error_get_malfunction_handler (void)
| Return the malfunction handler that is currently in effect.
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 returning an error object that describes it.
svn_error_t * | svn_error_abort_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.

## Detailed Description

Internal malfunctions and assertions.

## Macro Definition Documentation

## SVN__NOT_IMPLEMENTED

#define SVN__NOT_IMPLEMENTED | ( |  | ) | return svn_error__malfunction(TRUE, __FILE__, __LINE__, "Not implemented.")

Report a "Not implemented" malfunction.

Internal use only.

Definition at line 603 of file svn_error.h.

## SVN_ERR_ASSERT

#define SVN_ERR_ASSERT | ( |  | expr | ) |

Value:
do { \
if (!(expr)) \
SVN_ERR(svn_error__malfunction(TRUE, __FILE__, __LINE__, #expr)); \
} while (0)
svn_error__malfunction
svn_error_t * svn_error__malfunction(svn_boolean_t can_return, const char *file, int line, const char *expr)
A helper function for the macros that report malfunctions.
TRUE
#define TRUE
uhh... true
Definition svn_types.h:145

Check that a condition is true: if not, report an error and possibly terminate the program.

If the Boolean expression expr is true, do nothing. Otherwise, act as determined by 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. If the malfunction handler returns, then cause the function using this macro to return the error object that it generated.

Note
  The intended use of this macro is to check a condition that cannot possibly be false unless there is a bug in the program.
  The condition to be checked should not be computationally expensive if it is reached often, as, unlike traditional "assert" statements, the evaluation of this expression is not compiled out in release-mode builds.

Since
  New in 1.6.

See also
  SVN_ERR_ASSERT_E()

Definition at line 580 of file svn_error.h.

## SVN_ERR_ASSERT_E

#define SVN_ERR_ASSERT_E | ( |  | expr,
|  |  | err
| ) |  |

Value:
do { \
if (!(expr)) { \
return svn_error_compose_create( \
svn_error__malfunction(TRUE, __FILE__, __LINE__, #expr), \
(err)); \
} \
} while (0)
svn_error_compose_create
svn_error_t * svn_error_compose_create(svn_error_t *err1, svn_error_t *err2)
Compose two errors, returning the composition as a brand new error and consuming the original errors.

Like SVN_ERR_ASSERT(), but append ERR to the returned error chain.

If EXPR is false, return a malfunction error whose chain includes ERR. If EXPR is true, do nothing. (In particular, this does not clear ERR.)

Types: (svn_boolean_t expr, svn_error_t *err)

Since
  New in 1.8.

Definition at line 544 of file svn_error.h.

## SVN_ERR_ASSERT_NO_RETURN

#define SVN_ERR_ASSERT_NO_RETURN | ( |  | expr | ) |

Value:
do { \
if (!(expr)) { \
svn_error__malfunction(FALSE, __FILE__, __LINE__, #expr); \
abort(); \
} \
} while (0)
FALSE
#define FALSE
uhh... false
Definition svn_types.h:150

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.

Definition at line 594 of file svn_error.h.

## SVN_ERR_MALFUNCTION

#define SVN_ERR_MALFUNCTION | ( |  | ) |

Value:
do { \
return svn_error_trace(svn_error__malfunction( \
TRUE, __FILE__, __LINE__, NULL)); \
} while (0)
svn_error_trace
#define svn_error_trace(expr)
A macro for wrapping an error in a source-location trace message.
Definition svn_error.h:373

Report that an internal malfunction has occurred, and possibly terminate the program.

Act as determined by 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. If the malfunction handler returns, then cause the function using this macro to return the error object that it generated.

Note
  The intended use of this macro is where execution reaches a point that cannot possibly be reached unless there is a bug in the program.

Since
  New in 1.6.

Definition at line 511 of file svn_error.h.

## SVN_ERR_MALFUNCTION_NO_RETURN

#define SVN_ERR_MALFUNCTION_NO_RETURN | ( |  | ) |

Value:
do { \
svn_error__malfunction(FALSE, __FILE__, __LINE__, NULL); \
abort(); \
} while (1)

Similar to SVN_ERR_MALFUNCTION(), but without the option of returning an error to the calling function.

If possible you should use SVN_ERR_MALFUNCTION() instead.

Since
  New in 1.6.

Definition at line 524 of file svn_error.h.

## Typedef Documentation

## svn_error_malfunction_handler_t

typedef svn_error_t *(* svn_error_malfunction_handler_t) (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 file at line line, and was an assertion failure of the expression expr, or, if expr is null, an unconditional error.

If can_return is false a function of this type must never return.

If 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 also
  SVN_ERROR_IN_CATEGORY()

Since
  New in 1.6.

Definition at line 648 of file svn_error.h.

## Function Documentation

## svn_error__malfunction()

svn_error_t * svn_error__malfunction | ( | svn_boolean_t | can_return,
|  | const char * | file,
|  | int | line,
|  | const char * | expr
| ) |  |

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 file at line line, and was an assertion failure of the expression expr, or, if expr is null, an unconditional error.

If can_return is true, the handler can return an error object that is returned by the caller. If can_return is false the method should never return. (The caller will call abort())

Since
  New in 1.6.

## svn_error_abort_on_malfunction()

svn_error_t * svn_error_abort_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 `svn_error_malfunction_handler_t`.

Since
  New in 1.6.

## svn_error_get_malfunction_handler()

svn_error_malfunction_handler_t svn_error_get_malfunction_handler | ( | void |  | ) |

Return the malfunction handler that is currently in effect.

Since
  New in 1.9.

## svn_error_raise_on_malfunction()

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 returning an error object that describes it.

When can_return is false, abort()

This function implements `svn_error_malfunction_handler_t`.

Since
  New in 1.6.

## svn_error_set_malfunction_handler()

svn_error_malfunction_handler_t svn_error_set_malfunction_handler | ( | svn_error_malfunction_handler_t | func | ) |

Cause subsequent malfunctions to be handled by func.

Return the handler that was previously in effect.

func may not be null.

Note
  The default handler is svn_error_abort_on_malfunction().
  This function must be called in a single-threaded context.

Since
  New in 1.6.