sg_get_error, sg_get_error_arg, sg_get_error_errno, sg_str_error, sg_get_error_details, sg_strperror — get last error status


#include <statgrab.h>
sg_error fsfuncsg_get_error(); 
const char *fsfuncsg_get_error_arg(); 
int fsfuncsg_get_error_errno(); 
sg_error fsfuncsg_get_error_details(err_details); 
sg_error_details *err_details;
const char *fsfuncsg_str_error(code); 
sg_error code;
char *fsfuncsg_strperror(buf,  
char **buf;
const sg_error_details * const err_details;


There are four functions to get information about the last occurred error: sg_get_error, sg_get_error_arg, sg_get_error_errno and sg_get_error_details. The remaining functions are intended to improve the machine-human-interface (e.g. the error log or a message box): sg_str_error delivers a human readable error name and sg_strperror prepares a full blown error message for printing.

The error argument (sg_get_error_arg) is stored thread local and is reused every time an error occures. If a later usage is intended, duplicating it is a suitable strategy. Same for the error_arg of sg_error_details delivered by sg_get_error_details.

When someone calls the function sg_get_error_details with a NULL pointer, the last error is overridden with a new one describing that sg_get_error_details is called with invalid arguments. Please be careful.

The function sg_strperror is allowed to be called with or without (err_details is NULL) collected error details. In the latter case, the last occurred error of this thread is used to prepare the error message. Be aware, the the buffer pointer must be non-NULL (points to an existing char * lvalue), but the char * lvalue it points to, must be NULL. When invoked correctly, there are only two possible error conditions let sg_strperror fail: ENOMEM (out of memory) and EINVAL (invalid error code).