Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
statusMessageReporting.cc File Reference
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include "statusMessageReporting.h"
Include dependency graph for statusMessageReporting.cc:

Go to the source code of this file.

Macros

#define SMR_InitialMessageSize   1024
 
#define SMR_IncrementMessageSize   1024
 

Functions

static statusMessageReportsmr_reportNew (void)
 
static int smr_reportInitialize (statusMessageReport *report)
 
static void smr_reportRelease (statusMessageReport *report)
 
static int smr_setReport (statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, enum smr_status status, char const *fmt, va_list *args)
 
static int smr_setAllocationFailure (statusMessageReport *report, char const *file, int line, char const *function, char const *fmt, va_list *args)
 
int smr_setup (void)
 
int smr_cleanup (void)
 
int smr_registerLibrary (char const *libraryName)
 
int smr_numberOfRegisteredLibraries (void)
 
char const * smr_getRegisteredLibrariesName (int ID)
 
statusMessageReportingsmr_new (statusMessageReporting *smr, enum smr_status verbosity, int append)
 
int smr_initialize (statusMessageReporting *smr, enum smr_status verbosity, int append)
 
statusMessageReportingsmr_clone (statusMessageReporting *smr)
 
void smr_release (statusMessageReporting *smr)
 
voidsmr_free (statusMessageReporting **smr)
 
int smr_setReportInfo (statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt,...)
 
int smr_vsetReportInfo (statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt, va_list *args)
 
int smr_setReportWarning (statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt,...)
 
int smr_vsetReportWarning (statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt, va_list *args)
 
int smr_setReportError (statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt,...)
 
int smr_vsetReportError (statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt, va_list *args)
 
enum smr_status smr_highestStatus (statusMessageReporting *smr)
 
int smr_isOk (statusMessageReporting *smr)
 
int smr_isInfo (statusMessageReporting *smr)
 
int smr_isWarning (statusMessageReporting *smr)
 
int smr_isError (statusMessageReporting *smr)
 
int smr_isWarningOrError (statusMessageReporting *smr)
 
int smr_isReportOk (statusMessageReport *report)
 
int smr_isReportInfo (statusMessageReport *report)
 
int smr_isReportWarning (statusMessageReport *report)
 
int smr_isReportError (statusMessageReport *report)
 
int smr_isReportWarningOrError (statusMessageReport *report)
 
int smr_numberOfReports (statusMessageReporting *smr)
 
statusMessageReportsmr_firstReport (statusMessageReporting *smr)
 
statusMessageReportsmr_nextReport (statusMessageReport *report)
 
enum smr_status smr_getVerbosity (statusMessageReporting *smr)
 
int smr_getAppend (statusMessageReporting *smr)
 
int smr_getLibraryID (statusMessageReport *report)
 
int smr_getCode (statusMessageReport *report)
 
int smr_getLine (statusMessageReport *report)
 
char const * smr_getFile (statusMessageReport *report)
 
char const * smr_getFunction (statusMessageReport *report)
 
char const * smr_getMessage (statusMessageReport *report)
 
char * smr_copyMessage (statusMessageReport *report)
 
char * smr_copyFullMessage (statusMessageReport *report)
 
void smr_print (statusMessageReporting *smr, int clear)
 
void smr_write (statusMessageReporting *smr, FILE *f, int clear)
 
void smr_reportPrint (statusMessageReport *report)
 
void smr_reportWrite (statusMessageReport *report, FILE *f)
 
char const * smr_statusToString (enum smr_status status)
 
char * smr_allocateFormatMessage (char const *fmt,...)
 
char * smr_vallocateFormatMessage (char const *fmt, va_list *args)
 
voidsmr_malloc (statusMessageReporting *smr, size_t size, int zero, char const *forItem, char const *file, int line, char const *function)
 
voidsmr_realloc (statusMessageReporting *smr, void *pOld, size_t size, char const *forItem, char const *file, int line, char const *function)
 
voidsmr_freeMemory (void **p)
 
char * smr_allocateCopyString (statusMessageReporting *smr, char const *s, char const *forItem, char const *file, int line, char const *function)
 
char * smr_allocateCopyStringN (statusMessageReporting *smr, char const *s, size_t n, char const *forItem, char const *file, int line, char const *function)
 

Variables

static int smrIsSetup = 0
 
static char smr_mallocFailed [] = "statusMessageReporting could not allocate memory for message"
 
static char statusStringOk [] = "Ok"
 
static char statusStringInfo [] = "Info"
 
static char statusStringWarning [] = "Warning"
 
static char statusStringError [] = "Error"
 
static char statusStringInvalid [] = "Invalid"
 
static int numberOfRegisteredLibraries = 0
 
static char unknownLibrary [] = "unknownID"
 
static char tooManyLibrary [] = "tooManyIDs"
 
static char invalidLibrary [] = "invalidID"
 
static char errnoLibrary [] = "errnoID"
 
static char smrLibrary [] = "statusMessageReporting"
 
static char * registeredLibraries [smr_maximumNumberOfRegisteredLibraries]
 

Macro Definition Documentation

#define SMR_IncrementMessageSize   1024

Definition at line 18 of file statusMessageReporting.cc.

#define SMR_InitialMessageSize   1024

Definition at line 17 of file statusMessageReporting.cc.

Function Documentation

char* smr_allocateCopyString ( statusMessageReporting smr,
char const *  s,
char const *  forItem,
char const *  file,
int  line,
char const *  function 
)

Definition at line 652 of file statusMessageReporting.cc.

652  {
653 /*
654 * User must free returned string.
655 */
656  char *c = strdup( s );
657 
658  if( c == NULL ) smr_setReportError( smr, NULL, file, line, function, smr_smrID, -1, " smr_allocateCopyString: strdup failed for strlen( s ) = %z for variable %s",
659  strlen( s ), forItem );
660  return( c );
661 }
const XML_Char * s
Definition: expat.h:262
int smr_setReportError(statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt,...)
#define smr_smrID

Here is the call graph for this function:

Here is the caller graph for this function:

char* smr_allocateCopyStringN ( statusMessageReporting smr,
char const *  s,
size_t  n,
char const *  forItem,
char const *  file,
int  line,
char const *  function 
)

Definition at line 665 of file statusMessageReporting.cc.

665  {
666 /*
667 * User must free returned string.
668 */
669  size_t l = strlen( s );
670  char *c;
671 
672  if( l > n ) l = n;
673  if( ( c = (char *) smr_malloc( smr, l + 1, 0, forItem, file, line, function ) ) != NULL ) {
674  strncpy( c, s, n );
675  c[l] = 0;
676  }
677 /*
678  c = strndup( s, l ); # Not standard on enough systems.
679  if( c != NULL ) {
680  c[l] = 0; }
681  else {
682  smr_setReportError( smr, NULL, file, line, function, smr_smrID, -1, " smr_allocateCopyStringN: strndup failed for strlen( s ) = %z for variable %s",
683  strlen( s ), forItem );
684  }
685 */
686  return( c );
687 }
const XML_Char * s
Definition: expat.h:262
void * smr_malloc(statusMessageReporting *smr, size_t size, int zero, char const *forItem, char const *file, int line, char const *function)

Here is the call graph for this function:

char* smr_allocateFormatMessage ( char const *  fmt,
  ... 
)

Definition at line 568 of file statusMessageReporting.cc.

568  {
569 
570  char *s;
571  va_list args;
572 
573  va_start( args, fmt );
574  s = smr_vallocateFormatMessage( fmt, &args );
575  va_end( args );
576  return( s );
577 }
const XML_Char * s
Definition: expat.h:262
char * smr_vallocateFormatMessage(char const *fmt, va_list *args)

Here is the call graph for this function:

Here is the caller graph for this function:

int smr_cleanup ( void  )

Definition at line 64 of file statusMessageReporting.cc.

64  {
65 
66  int i;
67 
68  if( smrIsSetup == 0 ) return( 0 );
69  for( i = smr_smrID + 1; i < numberOfRegisteredLibraries; ++i ) smr_freeMemory( (void **) &(registeredLibraries[i]) );
70  numberOfRegisteredLibraries = 0;
71  smrIsSetup = 0;
72 
73  return( 0 );
74 }
static char * registeredLibraries[smr_maximumNumberOfRegisteredLibraries]
void * smr_freeMemory(void **p)
static int numberOfRegisteredLibraries
static int smrIsSetup
#define smr_smrID

Here is the call graph for this function:

Definition at line 131 of file statusMessageReporting.cc.

131  {
132 
133  if( smr == NULL ) return( NULL );
134  return( smr_new( NULL, smr->verbosity, smr->append ) );
135 }
statusMessageReporting * smr_new(statusMessageReporting *smr, enum smr_status verbosity, int append)

Here is the call graph for this function:

char* smr_copyFullMessage ( statusMessageReport report)

Definition at line 514 of file statusMessageReporting.cc.

514  {
515 
516  if( report == NULL ) return( NULL );
517  if( report->status == smr_status_Ok ) return( NULL );
518  return( smr_allocateFormatMessage( "%s\nAt line %d of %s in function %s", report->message, report->line, report->fileName, report->function ) );
519 }
char * smr_allocateFormatMessage(char const *fmt,...)
char fileName[smr_maximumFileNameSize+1]
char function[smr_maximumFileNameSize+1]

Here is the call graph for this function:

char* smr_copyMessage ( statusMessageReport report)

Definition at line 505 of file statusMessageReporting.cc.

505  {
506 
507  if( report == NULL ) return( NULL );
508  if( report->status == smr_status_Ok ) return( NULL );
509  return( smr_allocateFormatMessage( report->message ) );
510 }
char * smr_allocateFormatMessage(char const *fmt,...)

Here is the call graph for this function:

statusMessageReport* smr_firstReport ( statusMessageReporting smr)

Definition at line 424 of file statusMessageReporting.cc.

424  {
425 
426  if( smr == NULL ) return( NULL );
427  if( smr->report.status == smr_status_Ok ) return( NULL );
428  return( &(smr->report) );
429 }
statusMessageReport report

Here is the caller graph for this function:

void* smr_free ( statusMessageReporting **  smr)

Definition at line 154 of file statusMessageReporting.cc.

154  {
155 
156  if( smr == NULL ) return( NULL );
157  if( *smr != NULL ) {
158  smr_release( *smr );
159  smr_freeMemory( (void **) smr );
160  }
161  return( *smr );
162 }
void smr_release(statusMessageReporting *smr)
void * smr_freeMemory(void **p)

Here is the call graph for this function:

void* smr_freeMemory ( void **  p)

Definition at line 640 of file statusMessageReporting.cc.

640  {
641 
642  if( p == NULL ) return( NULL );
643  if( *p != NULL ) {
644  free( *p );
645  *p = NULL;
646  }
647  return( *p );
648 }
const char * p
Definition: xmltok.h:285
int smr_getAppend ( statusMessageReporting smr)

Definition at line 449 of file statusMessageReporting.cc.

449  {
450 
451  if( smr == NULL ) return( 0 );
452  return( smr->append );
453 }
int smr_getCode ( statusMessageReport report)

Definition at line 465 of file statusMessageReporting.cc.

465  {
466 
467  if( report == NULL ) return( -1 );
468  return( report->code );
469 }
char const* smr_getFile ( statusMessageReport report)

Definition at line 481 of file statusMessageReporting.cc.

481  {
482 
483  if( report == NULL ) return( NULL );
484  return( report->fileName );
485 }
char fileName[smr_maximumFileNameSize+1]
char const* smr_getFunction ( statusMessageReport report)

Definition at line 489 of file statusMessageReporting.cc.

489  {
490 
491  if( report == NULL ) return( NULL );
492  return( report->function );
493 }
char function[smr_maximumFileNameSize+1]
int smr_getLibraryID ( statusMessageReport report)

Definition at line 457 of file statusMessageReporting.cc.

457  {
458 
459  if( report == NULL ) return( 0 );
460  return( report->libraryID );
461 }
int smr_getLine ( statusMessageReport report)

Definition at line 473 of file statusMessageReporting.cc.

473  {
474 
475  if( report == NULL ) return( -1 );
476  return( report->line );
477 }
char const* smr_getMessage ( statusMessageReport report)

Definition at line 497 of file statusMessageReporting.cc.

497  {
498 
499  if( report == NULL ) return( NULL );
500  return( report->message );
501 }
char const* smr_getRegisteredLibrariesName ( int  ID)

Definition at line 101 of file statusMessageReporting.cc.

101  {
102 
103  if( ( ID < 0 ) || ( ID >= smr_maximumNumberOfRegisteredLibraries ) ) return( NULL );
104  return( registeredLibraries[ID] );
105 }
static char * registeredLibraries[smr_maximumNumberOfRegisteredLibraries]
#define smr_maximumNumberOfRegisteredLibraries
enum smr_status smr_getVerbosity ( statusMessageReporting smr)

Definition at line 441 of file statusMessageReporting.cc.

441  {
442 
443  if( smr == NULL ) return( smr_status_Ok );
444  return( smr->verbosity );
445 }
enum smr_status smr_highestStatus ( statusMessageReporting smr)

Definition at line 322 of file statusMessageReporting.cc.

322  {
323 
324  enum smr_status status = smr_status_Ok;
325  statusMessageReport *report;
326 
327  if( smr == NULL ) return( smr_status_Ok );
328  for( report = smr_firstReport( smr ); report != NULL; report = smr_nextReport( report ) ) if( report->status > status ) status = report->status;
329  return( status );
330 }
statusMessageReport * smr_firstReport(statusMessageReporting *smr)
statusMessageReport * smr_nextReport(statusMessageReport *report)

Here is the call graph for this function:

Here is the caller graph for this function:

int smr_initialize ( statusMessageReporting smr,
enum smr_status  verbosity,
int  append 
)

Definition at line 120 of file statusMessageReporting.cc.

120  {
121 
122  if( smr == NULL ) return( 0 );
123  smr->verbosity = verbosity;
124  smr->append = append;
125  smr_reportInitialize( &(smr->report) );
126  return( 0 );
127 }
statusMessageReport report
static int smr_reportInitialize(statusMessageReport *report)

Here is the call graph for this function:

Here is the caller graph for this function:

int smr_isError ( statusMessageReporting smr)

Definition at line 355 of file statusMessageReporting.cc.

355  {
356 
357  return( smr_highestStatus( smr ) == smr_status_Error );
358 }
enum smr_status smr_highestStatus(statusMessageReporting *smr)

Here is the call graph for this function:

int smr_isInfo ( statusMessageReporting smr)

Definition at line 341 of file statusMessageReporting.cc.

341  {
342 
343  return( smr_highestStatus( smr ) == smr_status_Info );
344 }
enum smr_status smr_highestStatus(statusMessageReporting *smr)

Here is the call graph for this function:

int smr_isOk ( statusMessageReporting smr)

Definition at line 334 of file statusMessageReporting.cc.

334  {
335 
336  return( smr_highestStatus( smr ) == smr_status_Ok );
337 }
enum smr_status smr_highestStatus(statusMessageReporting *smr)

Here is the call graph for this function:

Here is the caller graph for this function:

int smr_isReportError ( statusMessageReport report)

Definition at line 395 of file statusMessageReporting.cc.

395  {
396 
397  if( report == NULL ) return( 0 );
398  return( report->status == smr_status_Error );
399 }
int smr_isReportInfo ( statusMessageReport report)

Definition at line 379 of file statusMessageReporting.cc.

379  {
380 
381  if( report == NULL ) return( 0 );
382  return( report->status == smr_status_Info );
383 }
int smr_isReportOk ( statusMessageReport report)

Definition at line 371 of file statusMessageReporting.cc.

371  {
372 
373  if( report == NULL ) return( 0 );
374  return( report->status == smr_status_Ok );
375 }
int smr_isReportWarning ( statusMessageReport report)

Definition at line 387 of file statusMessageReporting.cc.

387  {
388 
389  if( report == NULL ) return( 0 );
390  return( report->status == smr_status_Warning );
391 }
int smr_isReportWarningOrError ( statusMessageReport report)

Definition at line 403 of file statusMessageReporting.cc.

403  {
404 
405  if( report == NULL ) return( 0 );
406  return( ( report->status == smr_status_Warning ) || ( report->status == smr_status_Error ) );
407 }
int smr_isWarning ( statusMessageReporting smr)

Definition at line 348 of file statusMessageReporting.cc.

348  {
349 
350  return( smr_highestStatus( smr ) == smr_status_Warning );
351 }
enum smr_status smr_highestStatus(statusMessageReporting *smr)

Here is the call graph for this function:

int smr_isWarningOrError ( statusMessageReporting smr)

Definition at line 362 of file statusMessageReporting.cc.

362  {
363 
364  enum smr_status status = smr_highestStatus( smr );
365 
366  return( ( status == smr_status_Warning ) || ( status == smr_status_Error ) );
367 }
enum smr_status smr_highestStatus(statusMessageReporting *smr)

Here is the call graph for this function:

void* smr_malloc ( statusMessageReporting smr,
size_t  size,
int  zero,
char const *  forItem,
char const *  file,
int  line,
char const *  function 
)

Definition at line 611 of file statusMessageReporting.cc.

611  {
612 
613  void *p = smr_realloc( smr, NULL, size, forItem, file, line, function );
614  size_t i;
615  char *c;
616  long long *l;
617 
618  if( ( p != NULL ) && zero ) {
619  for( i = 0, l = (long long *) p; i < size / sizeof( long long ); i++, l++ ) *l = 0;
620  for( i *= sizeof( long long ), c = (char *) l; i < size; i++, c++ ) *c = 0;
621  }
622 
623  return( p );
624 }
const char * p
Definition: xmltok.h:285
void * smr_realloc(statusMessageReporting *smr, void *pOld, size_t size, char const *forItem, char const *file, int line, char const *function)

Here is the call graph for this function:

Here is the caller graph for this function:

statusMessageReporting* smr_new ( statusMessageReporting smr,
enum smr_status  verbosity,
int  append 
)

Definition at line 109 of file statusMessageReporting.cc.

109  {
110 
111  statusMessageReporting *new_SMR;
112 
113  if( ( new_SMR = (statusMessageReporting *) smr_malloc2( smr, sizeof( statusMessageReporting ), 0, "new_SMR" ) ) == NULL ) return( NULL );
114  smr_initialize( new_SMR, verbosity, append );
115  return( new_SMR );
116 }
#define smr_malloc2(smr, size, zero, forItem)
int smr_initialize(statusMessageReporting *smr, enum smr_status verbosity, int append)

Here is the call graph for this function:

Here is the caller graph for this function:

statusMessageReport* smr_nextReport ( statusMessageReport report)

Definition at line 433 of file statusMessageReporting.cc.

433  {
434 
435  if( report == NULL ) return( NULL );
436  return( report->next );
437 }
struct statusMessageReport * next

Here is the caller graph for this function:

int smr_numberOfRegisteredLibraries ( void  )

Definition at line 94 of file statusMessageReporting.cc.

94  {
95 
97 }
static int numberOfRegisteredLibraries
int smr_numberOfReports ( statusMessageReporting smr)

Definition at line 411 of file statusMessageReporting.cc.

411  {
412 
413  int n = 0;
414  statusMessageReport *report;
415 
416  if( smr == NULL ) return( 0 );
417  if( smr->report.status == smr_status_Ok ) return( 0 );
418  for( report = smr_firstReport( smr ); report != NULL; report = smr_nextReport( report ) ) ++n;
419  return( n );
420 }
statusMessageReport * smr_firstReport(statusMessageReporting *smr)
statusMessageReport report
statusMessageReport * smr_nextReport(statusMessageReport *report)

Here is the call graph for this function:

void smr_print ( statusMessageReporting smr,
int  clear 
)

Definition at line 523 of file statusMessageReporting.cc.

523  {
524 
525  smr_write( smr, stdout, clear );
526 }
void smr_write(statusMessageReporting *smr, FILE *f, int clear)

Here is the call graph for this function:

Here is the caller graph for this function:

void* smr_realloc ( statusMessageReporting smr,
void pOld,
size_t  size,
char const *  forItem,
char const *  file,
int  line,
char const *  function 
)

Definition at line 628 of file statusMessageReporting.cc.

628  {
629 
630  void *p = realloc( pOld, size );
631 
632  if( ( p == NULL ) && ( smr != NULL ) ) {
633  smr_setReportError( smr, NULL, file, line, function, smr_smrID, -1, " smr_realloc: failed to realloc size = %z for variable %s\n", size, forItem );
634  }
635  return( p );
636 }
const char * p
Definition: xmltok.h:285
int smr_setReportError(statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt,...)
#define smr_smrID

Here is the call graph for this function:

Here is the caller graph for this function:

int smr_registerLibrary ( char const *  libraryName)

Definition at line 78 of file statusMessageReporting.cc.

78  {
79 
80  int i;
81 
82  if( smrIsSetup == 0 ) return( -1 );
84  for( i = 0; i < numberOfRegisteredLibraries; ++i ) { /* Check if name is already registered. */
85  if( strcmp( libraryName, registeredLibraries[i] ) == 0 ) return( i );
86  }
87  if( ( registeredLibraries[numberOfRegisteredLibraries] = strdup( libraryName ) ) == NULL ) return( -2 );
89  return( numberOfRegisteredLibraries - 1 );
90 }
static char * registeredLibraries[smr_maximumNumberOfRegisteredLibraries]
#define smr_tooManyIDs
static int numberOfRegisteredLibraries
static int smrIsSetup
#define smr_maximumNumberOfRegisteredLibraries
void smr_release ( statusMessageReporting smr)

Definition at line 139 of file statusMessageReporting.cc.

139  {
140 
141  statusMessageReport *current, *next, *first = smr_firstReport( smr );
142 
143  if( smr == NULL ) return;
144  for( current = first; current != NULL; current = next ) {
145  next = smr_nextReport( current );
146  smr_reportRelease( current );
147  if( current != first ) smr_freeMemory( (void **) &current );
148  }
149  smr_initialize( smr, smr->verbosity, smr->append );
150 }
statusMessageReport * smr_firstReport(statusMessageReporting *smr)
void * smr_freeMemory(void **p)
int smr_initialize(statusMessageReporting *smr, enum smr_status verbosity, int append)
statusMessageReport * smr_nextReport(statusMessageReport *report)
static void smr_reportRelease(statusMessageReport *report)

Here is the call graph for this function:

Here is the caller graph for this function:

static int smr_reportInitialize ( statusMessageReport report)
static

Definition at line 177 of file statusMessageReporting.cc.

177  {
178 
179  report->next = NULL;
180  report->status = smr_status_Ok;
181  report->libraryID = smr_unknownID;
182  report->code = smr_codeNULL;
183  report->line = -1;
184  report->fileName[0] = 0;
185  report->function[0] = 0;
186  report->message = NULL;
187  return( 0 );
188 }
#define smr_codeNULL
#define smr_unknownID
char fileName[smr_maximumFileNameSize+1]
struct statusMessageReport * next
char function[smr_maximumFileNameSize+1]

Here is the caller graph for this function:

static statusMessageReport * smr_reportNew ( void  )
static

Definition at line 166 of file statusMessageReporting.cc.

166  {
167 
168  statusMessageReport *report;
169 
170  if( ( report = (statusMessageReport *) smr_malloc2( NULL, sizeof( statusMessageReport ), 0, "report" ) ) == NULL ) return( NULL );
171  smr_reportInitialize( report );
172  return( report );
173 }
#define smr_malloc2(smr, size, zero, forItem)
static int smr_reportInitialize(statusMessageReport *report)

Here is the call graph for this function:

Here is the caller graph for this function:

void smr_reportPrint ( statusMessageReport report)

Definition at line 541 of file statusMessageReporting.cc.

541  {
542 
543  smr_reportWrite( report, stderr );
544 }
void smr_reportWrite(statusMessageReport *report, FILE *f)

Here is the call graph for this function:

static void smr_reportRelease ( statusMessageReport report)
static

Definition at line 192 of file statusMessageReporting.cc.

192  {
193 
194  if( report->message != NULL ) {
195  if( report->message != smr_mallocFailed ) smr_freeMemory( (void **) &(report->message) );
196  }
197  smr_reportInitialize( report );
198 }
static char smr_mallocFailed[]
static int smr_reportInitialize(statusMessageReport *report)
void * smr_freeMemory(void **p)

Here is the call graph for this function:

Here is the caller graph for this function:

void smr_reportWrite ( statusMessageReport report,
FILE *  f 
)

Definition at line 548 of file statusMessageReporting.cc.

548  {
549 
550  if( report->message != NULL ) fprintf( f, "%s\nAt line %d of %s in function %s\n", report->message, report->line, report->fileName, report->function );
551 }
char fileName[smr_maximumFileNameSize+1]
char function[smr_maximumFileNameSize+1]

Here is the caller graph for this function:

static int smr_setAllocationFailure ( statusMessageReport report,
char const *  file,
int  line,
char const *  function,
char const *  fmt,
va_list *  args 
)
static

Definition at line 247 of file statusMessageReporting.cc.

247  {
248 
249  vfprintf( stderr, fmt, *args );
250  va_end( *args );
251  fprintf( stderr, "\nAt line %d of %s in function %s\n", line, file, function );
252  if( report != NULL ) {
253  report->status = smr_status_Error;
254  report->message = (char *) smr_mallocFailed;
255  return( 1 );
256  }
257  return( -1 );
258 }
static char smr_mallocFailed[]

Here is the caller graph for this function:

static int smr_setReport ( statusMessageReporting smr,
void userInterface,
char const *  file,
int  line,
char const *  function,
int  libraryID,
int  code,
enum smr_status  status,
char const *  fmt,
va_list *  args 
)
static

Definition at line 202 of file statusMessageReporting.cc.

203  {
204 
205  char *userMsg;
206  statusMessageReport *report, *next;
207 
208  if( smr == NULL ) return( 0 );
209  if( (int) status < (int) smr->verbosity ) return( 0 );
210  if( status == smr_status_Ok ) return( 0 );
211  if( ( smr->report.status != smr_status_Ok ) && smr->append ) {
212  if( ( report = smr_reportNew( ) ) == NULL ) return( smr_setAllocationFailure( NULL, file, line, function, fmt, args ) );
213  for( next = smr_firstReport( smr ); next->next != NULL; next = next->next ) ;
214  next->next = report; }
215  else {
216  if( status <= smr->report.status ) return( 0 );
217  smr_release( smr );
218  report = &(smr->report);
219  }
220  report->status = status;
221  if( ( libraryID < 0 ) || ( libraryID >= numberOfRegisteredLibraries ) ) libraryID = smr_invalidID;
222  report->libraryID = libraryID;
223  report->code = code;
224  report->line = line;
225  if( file != NULL ) strncpy( report->fileName, file, smr_maximumFileNameSize );
226  report->fileName[smr_maximumFileNameSize] = 0;
227  if( function != NULL ) strncpy( report->function, function, smr_maximumFileNameSize );
228  report->function[smr_maximumFileNameSize] = 0;
229 
230  if( ( report->message = smr_vallocateFormatMessage( fmt, args ) ) == NULL ) return( smr_setAllocationFailure( report, file, line, function, fmt, args ) );
231  if( userInterface != NULL ) {
232  if( ( userMsg = (*(smr_userInterface *) userInterface)( (void *) userInterface ) ) != NULL ) {
233  int userSize = (int) strlen( userMsg );
234  if( ( report->message = (char *) smr_realloc2( NULL, report->message, strlen( report->message ) + userSize + 2, "report->message" ) ) == NULL ) {
235  free( userMsg );
236  return( smr_setAllocationFailure( report, file, line, function, fmt, args ) );
237  }
238  strcat( report->message, userMsg );
239  free( userMsg );
240  }
241  }
242  return( 0 );
243 }
void smr_release(statusMessageReporting *smr)
char *(* smr_userInterface)(void *userData)
statusMessageReport * smr_firstReport(statusMessageReporting *smr)
statusMessageReport report
#define smr_invalidID
typedef int(XMLCALL *XML_NotStandaloneHandler)(void *userData)
char fileName[smr_maximumFileNameSize+1]
static int smr_setAllocationFailure(statusMessageReport *report, char const *file, int line, char const *function, char const *fmt, va_list *args)
Definition: inftrees.h:24
char * smr_vallocateFormatMessage(char const *fmt, va_list *args)
struct statusMessageReport * next
static statusMessageReport * smr_reportNew(void)
static int numberOfRegisteredLibraries
char function[smr_maximumFileNameSize+1]
#define smr_realloc2(smr, old, size, forItem)
#define smr_maximumFileNameSize

Here is the call graph for this function:

Here is the caller graph for this function:

int smr_setReportError ( statusMessageReporting smr,
void userInterface,
char const *  file,
int  line,
char const *  function,
int  libraryID,
int  code,
char const *  fmt,
  ... 
)

Definition at line 302 of file statusMessageReporting.cc.

302  {
303 
304  int status;
305  va_list args;
306 
307  va_start( args, fmt );
308  status = smr_setReport( smr, userInterface, file, line, function, libraryID, code, smr_status_Error, fmt, &args );
309  va_end( args );
310  return( status );
311 }
static int smr_setReport(statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, enum smr_status status, char const *fmt, va_list *args)
Definition: inftrees.h:24

Here is the call graph for this function:

Here is the caller graph for this function:

int smr_setReportInfo ( statusMessageReporting smr,
void userInterface,
char const *  file,
int  line,
char const *  function,
int  libraryID,
int  code,
char const *  fmt,
  ... 
)

Definition at line 262 of file statusMessageReporting.cc.

262  {
263 
264  int status;
265  va_list args;
266 
267  va_start( args, fmt );
268  status = smr_setReport( smr, userInterface, file, line, function, libraryID, code, smr_status_Info, fmt, &args );
269  va_end( args );
270  return( status );
271 }
static int smr_setReport(statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, enum smr_status status, char const *fmt, va_list *args)
Definition: inftrees.h:24

Here is the call graph for this function:

int smr_setReportWarning ( statusMessageReporting smr,
void userInterface,
char const *  file,
int  line,
char const *  function,
int  libraryID,
int  code,
char const *  fmt,
  ... 
)

Definition at line 282 of file statusMessageReporting.cc.

282  {
283 
284  int status;
285  va_list args;
286 
287  va_start( args, fmt );
288  status = smr_setReport( smr, userInterface, file, line, function, libraryID, code, smr_status_Warning, fmt, &args );
289  va_end( args );
290  return( status );
291 }
static int smr_setReport(statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, enum smr_status status, char const *fmt, va_list *args)
Definition: inftrees.h:24

Here is the call graph for this function:

int smr_setup ( void  )

Definition at line 42 of file statusMessageReporting.cc.

42  {
43 
44  int i;
45 
46  if( smrIsSetup ) return( 0 );
47  smrIsSetup = 1;
48  for( i = 0; i < smr_maximumNumberOfRegisteredLibraries; ++i ) registeredLibraries[i] = NULL;
59  return( 1 );
60 }
static char * registeredLibraries[smr_maximumNumberOfRegisteredLibraries]
#define smr_tooManyIDs
static char unknownLibrary[]
#define smr_errnoID
#define smr_invalidID
static char tooManyLibrary[]
static char smrLibrary[]
static char invalidLibrary[]
#define smr_unknownID
static char errnoLibrary[]
static int numberOfRegisteredLibraries
static int smrIsSetup
#define smr_smrID
#define smr_maximumNumberOfRegisteredLibraries
char const* smr_statusToString ( enum smr_status  status)

Definition at line 555 of file statusMessageReporting.cc.

555  {
556 
557  switch( status ) {
558  case smr_status_Ok : return( statusStringOk );
559  case smr_status_Info : return( statusStringInfo );
560  case smr_status_Warning : return( statusStringWarning );
561  case smr_status_Error : return( statusStringError );
562  }
563  return( statusStringInvalid );
564 }
static char statusStringWarning[]
static char statusStringError[]
static char statusStringInvalid[]
static char statusStringInfo[]
static char statusStringOk[]
char* smr_vallocateFormatMessage ( char const *  fmt,
va_list *  args 
)

Definition at line 581 of file statusMessageReporting.cc.

581  {
582 
583  int n, size = SMR_InitialMessageSize;
584  char buffer[SMR_InitialMessageSize], *message = buffer;
585  va_list args_;
586 
587  while( 1 ) {
588  va_copy( args_, *args );
589  n = vsnprintf( message, size, fmt, args_ );
590  va_end( args_ );
591  if( ( n > -1 ) && ( n < size ) ) break;
592  if( n > -1 ) { /* glibc 2.1 */
593  size = n + 3; }
594  else { /* glibc 2.0 */
595  size += SMR_IncrementMessageSize;
596  }
597  if( message == buffer ) message = NULL;
598  if( ( message = (char *) realloc( message, size ) ) == NULL ) return( NULL );
599  } // Loop checking, 11.06.2015, T. Koi
600  if( message == buffer ) {
601  if( ( message = (char *) malloc( n + 1 ) ) == NULL ) return( NULL );
602  strcpy( message, buffer ); }
603  else {
604  if( ( message = (char *) realloc( message, n + 1 ) ) == NULL ) return( NULL );
605  }
606  return( message );
607 }
#define SMR_IncrementMessageSize
#define buffer
Definition: xmlparse.cc:628
#define SMR_InitialMessageSize

Here is the caller graph for this function:

int smr_vsetReportError ( statusMessageReporting smr,
void userInterface,
char const *  file,
int  line,
char const *  function,
int  libraryID,
int  code,
char const *  fmt,
va_list *  args 
)

Definition at line 315 of file statusMessageReporting.cc.

315  {
316 
317  return( smr_setReport( smr, userInterface, file, line, function, libraryID, code, smr_status_Error, fmt, args ) );
318 }
static int smr_setReport(statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, enum smr_status status, char const *fmt, va_list *args)
Definition: inftrees.h:24

Here is the call graph for this function:

Here is the caller graph for this function:

int smr_vsetReportInfo ( statusMessageReporting smr,
void userInterface,
char const *  file,
int  line,
char const *  function,
int  libraryID,
int  code,
char const *  fmt,
va_list *  args 
)

Definition at line 275 of file statusMessageReporting.cc.

275  {
276 
277  return( smr_setReport( smr, userInterface, file, line, function, libraryID, code, smr_status_Info, fmt, args ) );
278 }
static int smr_setReport(statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, enum smr_status status, char const *fmt, va_list *args)
Definition: inftrees.h:24

Here is the call graph for this function:

int smr_vsetReportWarning ( statusMessageReporting smr,
void userInterface,
char const *  file,
int  line,
char const *  function,
int  libraryID,
int  code,
char const *  fmt,
va_list *  args 
)

Definition at line 295 of file statusMessageReporting.cc.

295  {
296 
297  return( smr_setReport( smr, userInterface, file, line, function, libraryID, code, smr_status_Warning, fmt, args ) );
298 }
static int smr_setReport(statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, enum smr_status status, char const *fmt, va_list *args)
Definition: inftrees.h:24

Here is the call graph for this function:

void smr_write ( statusMessageReporting smr,
FILE *  f,
int  clear 
)

Definition at line 530 of file statusMessageReporting.cc.

530  {
531 
532  statusMessageReport *report;
533 
534  if( smr == NULL ) return;
535  for( report = smr_firstReport( smr ); report != NULL; report = smr_nextReport( report ) ) smr_reportWrite( report, f );
536  if( clear ) smr_release( smr );
537 }
void smr_release(statusMessageReporting *smr)
statusMessageReport * smr_firstReport(statusMessageReporting *smr)
statusMessageReport * smr_nextReport(statusMessageReport *report)
void smr_reportWrite(statusMessageReport *report, FILE *f)

Here is the call graph for this function:

Here is the caller graph for this function:

Variable Documentation

char errnoLibrary[] = "errnoID"
static

Definition at line 29 of file statusMessageReporting.cc.

char invalidLibrary[] = "invalidID"
static

Definition at line 28 of file statusMessageReporting.cc.

int numberOfRegisteredLibraries = 0
static

Definition at line 25 of file statusMessageReporting.cc.

char* registeredLibraries[smr_maximumNumberOfRegisteredLibraries]
static

Definition at line 31 of file statusMessageReporting.cc.

char smr_mallocFailed[] = "statusMessageReporting could not allocate memory for message"
static

Definition at line 21 of file statusMessageReporting.cc.

int smrIsSetup = 0
static

Definition at line 20 of file statusMessageReporting.cc.

char smrLibrary[] = "statusMessageReporting"
static

Definition at line 30 of file statusMessageReporting.cc.

char statusStringError[] = "Error"
static

Definition at line 23 of file statusMessageReporting.cc.

char statusStringInfo[] = "Info"
static

Definition at line 22 of file statusMessageReporting.cc.

char statusStringInvalid[] = "Invalid"
static

Definition at line 23 of file statusMessageReporting.cc.

char statusStringOk[] = "Ok"
static

Definition at line 22 of file statusMessageReporting.cc.

char statusStringWarning[] = "Warning"
static

Definition at line 23 of file statusMessageReporting.cc.

char tooManyLibrary[] = "tooManyIDs"
static

Definition at line 27 of file statusMessageReporting.cc.

char unknownLibrary[] = "unknownID"
static

Definition at line 26 of file statusMessageReporting.cc.