Files
src/src/h5/errorhandling.c
T
gsell 69367a7713 src/h5/errorhandling.c
- "_err_handler" initialized with non-existing function
2007-12-17 12:35:13 +00:00

225 lines
3.3 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h> /* va_arg - System dependent ?! */
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <hdf5.h>
#include "H5PartTypes.h"
#include "H5Part.h"
#include "H5PartPrivate.h"
#include "H5PartErrors.h"
#include "H5.h"
h5part_error_handler _err_handler = H5_report_errorhandler;
h5part_int64_t _h5part_errno = H5PART_SUCCESS;
h5part_int64_t _debug = 0;
static char *__funcname = "NONE";
h5part_int64_t
H5_set_debuglevel (
h5part_int64_t level
) {
_debug = level;
return H5PART_SUCCESS;
}
h5part_int64_t
H5_get_debuglevel (
void
) {
return _debug;
}
h5part_int64_t
H5_set_errorhandler (
h5part_error_handler handler
) {
_err_handler = handler;
return H5PART_SUCCESS;
}
h5part_error_handler
H5_get_errorhandler (
void
) {
return _err_handler;
}
h5part_int64_t
H5_get_errno (
void
) {
return _h5part_errno;
}
/*!
\ingroup h5part_errhandle
This is the H5Part default error handler. If an error occures, an
error message will be printed and an error number will be returned.
\return value given in \c eno
*/
h5part_int64_t
H5_report_errorhandler (
const char *funcname,
const h5part_int64_t eno,
const char *fmt,
...
) {
_h5part_errno = eno;
if ( _debug > 0 ) {
va_list ap;
va_start ( ap, fmt );
H5_vprint_error ( fmt, ap );
va_end ( ap );
}
return _h5part_errno;
}
/*!
\ingroup h5part_errhandle
If an error occures, an error message will be printed and the
program exists with the error code given in \c eno.
*/
h5part_int64_t
H5_abort_errorhandler (
const char *funcname,
const h5part_int64_t eno,
const char *fmt,
...
) {
_h5part_errno = eno;
if ( _debug > 0 ) {
va_list ap;
va_start ( ap, fmt );
fprintf ( stderr, "%s: ", funcname );
vfprintf ( stderr, fmt, ap );
fprintf ( stderr, "\n" );
}
exit (-(int)_h5part_errno);
}
static void
_vprintf (
FILE* f,
const char *prefix,
const char *fmt,
va_list ap
) {
char *fmt2 = (char*)malloc( strlen ( prefix ) +strlen ( fmt ) + strlen ( __funcname ) + 16 );
if ( fmt2 == NULL ) return;
sprintf ( fmt2, "%s: %s: %s\n", prefix, __funcname, fmt );
vfprintf ( stderr, fmt2, ap );
free ( fmt2 );
}
void
H5_vprint_error (
const char *fmt,
va_list ap
) {
if ( _debug < 1 ) return;
_vprintf ( stderr, "E", fmt, ap );
}
void
H5_print_error (
const char *fmt,
...
) {
va_list ap;
va_start ( ap, fmt );
H5_vprint_error ( fmt, ap );
va_end ( ap );
}
void
H5_vprint_warn (
const char *fmt,
va_list ap
) {
if ( _debug < 2 ) return;
_vprintf ( stderr, "W", fmt, ap );
}
void
H5_print_warn (
const char *fmt,
...
) {
va_list ap;
va_start ( ap, fmt );
H5_vprint_warn ( fmt, ap );
va_end ( ap );
}
void
H5_vprint_info (
const char *fmt,
va_list ap
) {
if ( _debug < 3 ) return;
_vprintf ( stdout, "I", fmt, ap );
}
void
H5_print_info (
const char *fmt,
...
) {
va_list ap;
va_start ( ap, fmt );
H5_vprint_info ( fmt, ap );
va_end ( ap );
}
void
H5_vprint_debug (
const char *fmt,
va_list ap
) {
if ( _debug < 4 ) return;
_vprintf ( stdout, "D", fmt, ap );
}
void
H5_print_debug (
const char *fmt,
...
) {
va_list ap;
va_start ( ap, fmt );
H5_vprint_debug ( fmt, ap );
va_end ( ap );
}
void
H5_set_funcname (
char * const fname
) {
__funcname = fname;
}
const char *
H5_get_funcname (
void
) {
return __funcname;
}