The Error interface provides error handling in the form of a stack.
The FUNC_ENTER()
macro clears the error stack whenever
an interface function is entered.
When an error is detected, an entry is pushed onto the stack.
As the functions unwind, additional entries are pushed onto the stack.
The API function will return some indication that an error occurred and
the application can print the error stack.
Certain API functions in the H5E package, such as H5Eprint()
,
do not clear the error stack. Otherwise, any function which
does not have an underscore immediately after the package name
will clear the error stack. For instance, H5Fopen()
clears the error stack while H5F_open()
does not.
An error stack has a fixed maximum size. If this size is exceeded then the stack will be truncated and only the inner-most functions will have entries on the stack. This is expected to be a rare condition.
Each thread has its own error stack, but since multi-threading has not been added to the library yet, this package maintains a single error stack. The error stack is statically allocated to reduce the complexity of handling errors within the H5E package.
H5Eset_auto
(H5E_auto_t func
,
void *client_data
)
H5Eset_auto
turns on or off automatic printing of
errors. When turned on (non-null func
pointer),
any API function which returns an error indication will
first call func
, passing it client_data
as an argument.
When the library is first initialized the auto printing function
is set to H5Eprint()
(cast appropriately) and
client_data
is the standard error stream pointer,
stderr
.
Automatic stack traversal is always in the
H5E_WALK_DOWNWARD
direction.
func
client_data
H5Eget_auto
(H5E_auto_t * func
,
void **client_data
)
H5Eget_auto
returns the current settings for the
automatic error stack traversal function, func
,
and its data, client_data
. Either (or both)
arguments may be null in which case the value is not returned.
func
client_data
H5Eclear
(void
)
H5Eclear
clears the error stack for the current thread.
The stack is also cleared whenever an API function is called,
with certain exceptions (for instance, H5Eprint()
).
H5Eclear
can fail if there are problems initializing
the library.
H5Eprint
(FILE * stream
)
H5Eprint
prints the error stack on the specified
stream, stream
.
Even if the error stack is empty, a one-line message will be printed:
HDF5-DIAG: Error detected in thread 0.
H5Eprint
is a convenience function for
H5Ewalk()
with a function that prints error messages.
Users are encouraged to write there own more specific error handlers.
stream
H5Ewalk
(H5E_direction_t direction
,
H5E_walk_t func
,
void * client_data
)
H5Ewalk
walks the error stack for the current thread
and calls the specified function for each error along the way.
direction
determines whether the stack is walked
from the inside out or the outside in.
A value of H5E_WALK_UPWARD
means begin with the
most specific error and end at the API;
a value of H5E_WALK_DOWNWARD
means to start at the
API and end at the inner-most function where the error was first
detected.
func
will be called for each error in the error stack.
Its arguments will include an index number (beginning at zero
regardless of stack traversal direction), an error stack entry,
and the client_data
pointer passed to
H5E_print
.
H5Ewalk
can fail if there are problems initializing
the library.
direction
func
client_data
func
.
H5Ewalk_cb
(int n
,
H5E_error_t *err_desc
,
void *client_data
)
H5Ewalk_cb
is a default error stack traversal callback
function that prints error messages to the specified output stream.
It is not meant to be called directly but rather as an
argument to the H5Ewalk()
function.
This function is called also by H5Eprint()
.
Application writers are encouraged to use this function as a
model for their own error stack walking functions.
n
is a counter for how many times this function
has been called for this particular traversal of the stack.
It always begins at zero for the first error on the stack
(either the top or bottom error, or even both, depending on
the traversal direction and the size of the stack).
err_desc
is an error description. It contains all the
information about a particular error.
client_data
is the same pointer that was passed as the
client_data
argument of H5Ewalk()
.
It is expected to be a file pointer (or stderr if null).
n
err_desc
*client_data
H5Eget_major
(H5E_major_t n
)
H5Eget_major
returns a
constant character string that describes the error.
n
H5Eget_minor
(H5E_minor_t n
)
H5Eget_minor
returns a
constant character string that describes the error.
n