74 lines
1.7 KiB
C
74 lines
1.7 KiB
C
//-----------------------------------------------------------------------------
|
|
//
|
|
// errormanager.c
|
|
//
|
|
// Purpose: Provides a simple interface for managing runtime error messages.
|
|
//
|
|
// Date: 08/25/2017
|
|
//
|
|
// Author: Michael E. Tryby
|
|
// US EPA - ORD/NRMRL
|
|
//-----------------------------------------------------------------------------
|
|
#include "errormanager.h"
|
|
|
|
error_handle_t* new_errormanager(void (*p_error_message)(int, char*, int))
|
|
//
|
|
// Purpose: Constructs a new error handle.
|
|
//
|
|
{
|
|
error_handle_t* error_handle;
|
|
error_handle = (error_handle_t*)calloc(1, sizeof(error_handle_t));
|
|
|
|
if (error_handle != NULL)
|
|
error_handle->p_msg_lookup = p_error_message;
|
|
|
|
return error_handle;
|
|
}
|
|
|
|
void dst_errormanager(error_handle_t* error_handle)
|
|
//
|
|
// Purpose: Destroys the error handle.
|
|
//
|
|
{
|
|
free(error_handle);
|
|
}
|
|
|
|
int set_error(error_handle_t* error_handle, int errorcode)
|
|
//
|
|
// Purpose: Sets an error code in the handle.
|
|
//
|
|
{
|
|
// If the error code is 0 no action is taken and 0 is returned.
|
|
// This is a feature not a bug.
|
|
if (errorcode)
|
|
error_handle->error_status = errorcode;
|
|
|
|
return errorcode;
|
|
}
|
|
|
|
char* check_error(error_handle_t* error_handle)
|
|
//
|
|
// Purpose: Returns the error message or NULL.
|
|
//
|
|
// Note: Caller must free memory allocated by check_error
|
|
//
|
|
{
|
|
char* temp = NULL;
|
|
|
|
if (error_handle->error_status != 0) {
|
|
temp = (char*) calloc(ERR_MAXMSG, sizeof(char));
|
|
|
|
if (temp)
|
|
error_handle->p_msg_lookup(error_handle->error_status, temp, ERR_MAXMSG);
|
|
}
|
|
return temp;
|
|
}
|
|
|
|
void clear_error(error_handle_t* error_handle)
|
|
//
|
|
// Purpose: Clears the error from the handle.
|
|
//
|
|
{
|
|
error_handle->error_status = 0;
|
|
}
|