41 #include "statusMessageReporting.h"
43 #if defined __cplusplus
48 static const char smr_mallocFailed[] =
"statusMessageReporting could not allocate memory for message";
51 static int smr_setMessage( statusMessageReporting *smr,
void *userInterface,
const char *file,
int line,
int code,
52 enum smr_status status,
const char *fmt, va_list *args );
59 smr->status = smr_status_Ok;
60 smr->packageName[0] = 0;
71 if( smr->message != NULL ) {
72 if( smr->message != smr_mallocFailed ) free( smr->message );
79 int smr_setMessageInfo( statusMessageReporting *smr,
void *userInterface,
const char *file,
int line,
int code,
const char *fmt, ... ) {
84 va_start( args, fmt );
85 status =
smr_setMessage( smr, userInterface, file, line, code, smr_status_Info, fmt, &args );
92 int smr_vsetMessageInfo( statusMessageReporting *smr,
void *userInterface,
const char *file,
int line,
int code,
const char *fmt, va_list *args ) {
94 int status =
smr_setMessage( smr, userInterface, file, line, code, smr_status_Info, fmt, args );
100 int smr_setMessageError( statusMessageReporting *smr,
void *userInterface,
const char *file,
int line,
int code,
const char *fmt, ... ) {
105 va_start( args, fmt );
106 status =
smr_setMessage( smr, userInterface, file, line, code, smr_status_Error, fmt, &args );
113 int smr_vsetMessageError( statusMessageReporting *smr,
void *userInterface,
const char *file,
int line,
int code,
const char *fmt, va_list *args ) {
115 int status =
smr_setMessage( smr, userInterface, file, line, code, smr_status_Error, fmt, args );
126 va_start( args, fmt );
137 char *message = NULL;
141 if( ( message = (
char *) realloc( message, size ) ) == NULL )
return( NULL );
145 #elif defined __IBMCPP__
146 va_copy( args_, *args );
148 __va_copy( args_, *args );
150 n = vsnprintf( message, size, fmt, args_ );
152 if( ( n > -1 ) && ( n < size ) )
break;
164 static int smr_setMessage( statusMessageReporting *smr,
void *userInterface,
const char *file,
int line,
int code,
165 enum smr_status status,
const char *fmt, va_list *args ) {
167 char *userMsg = NULL;
170 if( smr == NULL )
return( 0 );
172 smr->status = status;
173 if( file != NULL ) strncpy( smr->packageName, file, smr_maximumPackageNameSize );
174 smr->packageName[smr_maximumPackageNameSize-1] = 0;
179 if( userInterface != NULL ) {
180 if( ( userSize = (*(smr_userInterface *) userInterface)( (
void *) userInterface, NULL ) ) > 0 ) {
182 if( (smr->message = (
char*) realloc(smr->message, strlen( smr->message ) + userSize + 2)) == NULL )
return(
smr_setAllocationFailure( smr, fmt, args ) );
183 strcat( smr->message,
"\n" );
184 userSize = (*(smr_userInterface *) userInterface)( (
void *) userInterface, &userMsg );
187 strcat( smr->message, userMsg );
199 vfprintf( stderr, fmt, *args );
200 fprintf( stderr,
"\nAt line %d of %s\n", smr->line, smr->packageName );
201 smr->status = smr_status_Fatal;
202 smr->message = (
char *) smr_mallocFailed;
210 if( smr == NULL )
return( 1 );
211 return( smr->status == smr_status_Ok );
218 if( smr == NULL )
return( 1 );
219 return( smr->status == smr_status_Info );
226 if( smr == NULL )
return( 1 );
227 return( ( smr->status == smr_status_Error ) || ( smr->status == smr_status_Fatal ) );
234 if( smr == NULL )
return( 1 );
235 return( smr->status == smr_status_Fatal );
242 return( smr->message );
249 return(
smr_getFullMessage2(
"%s\nAt line %d of %s", smr->message, smr->line, smr->packageName ) );
259 va_start( args, fmt );
267 void smr_print( statusMessageReporting *smr, FILE *f,
int clear ) {
269 if( smr->message != NULL ) fprintf( f,
"%s\nAt line %d of %s\n", smr->message, smr->line, smr->packageName );
273 #if defined __cplusplus
char * smr_allocateFormatMessage(const char *fmt,...)
static int smr_setMessage(statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, enum smr_status status, const char *fmt, va_list *args)
int smr_setMessageError(statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt,...)
int smr_isError(statusMessageReporting *smr)
int smr_vsetMessageInfo(statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt, va_list *args)
int smr_isFatal(statusMessageReporting *smr)
int smr_isOk(statusMessageReporting *smr)
static int smr_setAllocationFailure(statusMessageReporting *smr, const char *fmt, va_list *args)
void smr_print(statusMessageReporting *smr, FILE *f, int clear)
int smr_isInfo(statusMessageReporting *smr)
char * smr_getFullMessage(statusMessageReporting *smr)
static const char smr_mallocFailed[]
const char * smr_getMessage(statusMessageReporting *smr)
int smr_initialize(statusMessageReporting *smr)
int smr_setMessageInfo(statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt,...)
int smr_release(statusMessageReporting *smr)
static char * smr_getFullMessage2(char const *fmt,...)
int smr_vsetMessageError(statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt, va_list *args)
char * smr_vallocateFormatMessage(const char *fmt, va_list *args)