00001
00002 #include "sic_error.h"
00003
00004 #include <stdio.h>
00005 #include <errno.h>
00006 #include <stdlib.h>
00007 #include <string.h>
00008 #ifndef WIN32
00009 #include <unistd.h>
00010 #else
00011 #include "win32.h"
00012 #endif
00013 #include "sic_comm.h"
00014
00015 #include "gag_trace.h"
00016
00022 void sic_perror( const char *s)
00023 {
00024 #ifndef WIN32
00025 char *message = errno ? strerror( errno) : "unknown error";
00026 #else
00027 LPTSTR message;
00028
00029 errno = GetLastError( );
00030
00031 FormatMessage(
00032 FORMAT_MESSAGE_ALLOCATE_BUFFER |
00033 FORMAT_MESSAGE_FROM_SYSTEM |
00034 FORMAT_MESSAGE_IGNORE_INSERTS,
00035 NULL,
00036 errno,
00037 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
00038 (LPTSTR) &message,
00039 0, NULL );
00040 #endif
00041 gag_trace( "<error> %s: %s (%d)", s, message, errno);
00042 errno = 0;
00043 fprintf( stderr, "Error (pid %d), %s: %s\n", sic_get_current_task_id( ), s, message);
00044 #ifdef WIN32
00045 LocalFree( message);
00046 #endif
00047 sic_do_exit( 1);
00048 }
00049
00055 void sic_pwarning( const char *s)
00056 {
00057 char *message = errno ? strerror( errno) : "unknown error";
00058 gag_trace( "<warning> %s: %s (%d)", s, message, errno);
00059 errno = 0;
00060 fprintf( stderr, "Warning (pid %d), %s: %s\n", sic_get_current_task_id( ), s, message);
00061 }
00062