PreviousNext

Error Handling

The example.c program includes the header file example.h for error handling of XDS and XOM function calls. The example.h program contains two error handling functions: CHECK_DS_CALL for handling XDS API errors, and CHECK_OM_CALL for handling XOM API errors. Note that CHECK_DS_CALL and CHECK_OM_CALL are created specifically for example.c and are not part of the XDS or XOM APIs. They are included to demonstrate a possible method for error handling.

XDS and XOM API functions return a status code. In example.c, error contains the status code for XDS API functions. If the call is successful, the function returns DS_SUCCESS. Otherwise, one of the error codes described in XDS Class Definitions is returned.

The return_code variable contains the status code for XOM API functions. If the call is successful, the function returns OM_SUCCESS. Otherwise, one of the error codes described in XOM Service Interface is returned.

The contents of example.h are as follows:

/*

* define some convenient exit codes

*/

#define EXIT_FAILURE 1

#define EXIT_SUCCESS 0

/*

* declare an error handling function and

* an error checking macro for DS

*/

void handle_ds_error(DS_status error);

#define CHECK_DS_CALL(function_call)

error = (function_call);

if (error != DS_SUCCESS)

handle_ds_error(error);

/*

* declare an error handling function and

* an error checking macro for OM

*/

void handle_om_error(OM_return_code return_code);

#define CHECK_OM_CALL(function_call)

return_code = (function_call);

if (return_code != OM_SUCCESS)

handle_om_error(return_code);

/*

* the error handling code

*

* NOTE: any errors arising in these functions are ignored.

*/

void handle_ds_error(DS_status error)

{

(void) fprintf(stderr, "DS error has occurred\n");

(void) om_delete((OM_object) error);

/* At this point, the error has been reported and storage cleaned up,

* so the handler could return to the main program now for it to take

* recovery action. But we choose the simple option ...

*/

exit(EXIT_FAILURE);

}

void handle_om_error(OM_return_code return_code)

{

(void) fprintf(stderr, "OM error %d has occurred\n", return_code);

/* At this point, the error has been reported and storage cleaned up,

* so the handler could return to the main program now for it to take

* recovery action. But we choose the simple option ...

*/

exit(EXIT_FAILURE);

}