6 ErrorHandler::ErrorHandler()
12 void ErrorHandler::Clean()
22 void ErrorHandler::MemoryError()
29 void ErrorHandler::OpenError(const char *FileName)
32 OpenErrorMsg(FileName);
38 void ErrorHandler::CloseError(const char *FileName)
43 ErrMsg(NULL,St(MErrFClose),FileName);
47 #if !defined(SILENT) || defined(RARDLL)
53 void ErrorHandler::ReadError(const char *FileName)
56 ReadErrorMsg(NULL,FileName);
58 #if !defined(SILENT) || defined(RARDLL)
64 bool ErrorHandler::AskRepeatRead(const char *FileName)
66 #if !defined(SILENT) && !defined(SFX_MODULE) && !defined(_WIN_CE)
70 Log(NULL,St(MErrRead),FileName);
71 return(Ask(St(MRetryAbort))==1);
78 void ErrorHandler::WriteError(const char *ArcName,const char *FileName)
81 WriteErrorMsg(ArcName,FileName);
83 #if !defined(SILENT) || defined(RARDLL)
90 void ErrorHandler::WriteErrorFAT(const char *FileName)
92 #if !defined(SILENT) && !defined(SFX_MODULE)
94 ErrMsg(NULL,St(MNTFSRequired),FileName);
96 #if !defined(SILENT) && !defined(SFX_MODULE) || defined(RARDLL)
103 bool ErrorHandler::AskRepeatWrite(const char *FileName)
105 #if !defined(SILENT) && !defined(_WIN_CE)
109 Log(NULL,St(MErrWrite),FileName);
110 return(Ask(St(MRetryAbort))==1);
117 void ErrorHandler::SeekError(const char *FileName)
122 ErrMsg(NULL,St(MErrSeek),FileName);
126 #if !defined(SILENT) || defined(RARDLL)
132 void ErrorHandler::MemoryErrorMsg()
135 ErrMsg(NULL,St(MErrOutMem));
140 void ErrorHandler::OpenErrorMsg(const char *FileName)
142 OpenErrorMsg(NULL,FileName);
146 void ErrorHandler::OpenErrorMsg(const char *ArcName,const char *FileName)
149 Log(ArcName && *ArcName ? ArcName:NULL,St(MCannotOpen),FileName);
156 void ErrorHandler::CreateErrorMsg(const char *FileName)
158 CreateErrorMsg(NULL,FileName);
162 void ErrorHandler::CreateErrorMsg(const char *ArcName,const char *FileName)
165 Log(ArcName && *ArcName ? ArcName:NULL,St(MCannotCreate),FileName);
167 #if defined(_WIN_32) && !defined(_WIN_CE) && !defined(SFX_MODULE) && defined(MAXPATH)
168 if (GetLastError()==ERROR_PATH_NOT_FOUND)
170 int NameLength=strlen(FileName);
171 if (!IsFullPath(FileName))
174 GetCurrentDirectory(sizeof(CurDir),CurDir);
175 NameLength+=strlen(CurDir)+1;
177 if (NameLength>MAXPATH)
179 Log(ArcName && *ArcName ? ArcName:NULL,St(MMaxPathLimit),MAXPATH);
188 void ErrorHandler::ReadErrorMsg(const char *ArcName,const char *FileName)
191 ErrMsg(ArcName,St(MErrRead),FileName);
197 void ErrorHandler::WriteErrorMsg(const char *ArcName,const char *FileName)
200 ErrMsg(ArcName,St(MErrWrite),FileName);
206 void ErrorHandler::Exit(int ExitCode)
216 void ErrorHandler::ErrMsg(const char *ArcName,const char *fmt,...)
218 safebuf char Msg[NM+1024];
220 va_start(argptr,fmt);
221 vsprintf(Msg,fmt,argptr);
230 Log(ArcName,"\n%s",Msg);
231 mprintf("\n%s\n",St(MProgAborted));
237 void ErrorHandler::SetErrorCode(int Code)
243 if (ExitCode==SUCCESS)
247 if (ExitCode==SUCCESS || ExitCode==WARNING)
248 ExitCode=FATAL_ERROR;
258 #if !defined(GUI) && !defined(_SFX_RTL_)
260 BOOL __stdcall ProcessSignal(DWORD SigType)
265 void _stdfunction ProcessSignal(int SigType)
268 #if defined(_WIN_32) && !defined(TARGET_POSIX)
269 if (SigType==CTRL_LOGOFF_EVENT)
274 for (int I=0;!File::RemoveCreated() && I<3;I++)
280 #if defined(USE_RC) && !defined(SFX_MODULE) && !defined(_WIN_CE)
283 #if !defined(TARGET_POSIX)
293 void ErrorHandler::SetSignalHandlers(bool Enable)
296 #if !defined(GUI) && !defined(_SFX_RTL_)
298 SetConsoleCtrlHandler(Enable ? ProcessSignal:NULL,TRUE);
300 signal(SIGINT,Enable ? ProcessSignal:SIG_IGN);
301 signal(SIGTERM,Enable ? ProcessSignal:SIG_IGN);
307 void ErrorHandler::Throw(int Code)
309 if (Code==USER_BREAK && !EnableBreak)
311 ErrHandler.SetErrorCode(Code);
312 #ifdef ALLOW_EXCEPTIONS
315 File::RemoveCreated();
316 #if !defined(_XBMC) && !defined(TARGET_POSIX)
323 void ErrorHandler::SysErrMsg()
325 #if defined(_WIN_32) && !defined(SFX_MODULE) && !defined(SILENT)
326 #define STRCHR strchr
328 ERRCHAR *lpMsgBuf=NULL;
329 int ErrType=GetLastError();
330 if (ErrType!=0 && FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
331 NULL,ErrType,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
332 (LPTSTR)&lpMsgBuf,0,NULL))
334 ERRCHAR *CurMsg=lpMsgBuf;
337 while (*CurMsg=='\r' || *CurMsg=='\n')
341 ERRCHAR *EndMsg=STRCHR(CurMsg,'\r');
343 EndMsg=STRCHR(CurMsg,'\n');
349 Log(NULL,"\n%s",CurMsg);
353 LocalFree( lpMsgBuf );