3 * Iter Vehemens ad Necem (IVAN)
4 * Copyright (C) Timo Kiviluoto
5 * Released under the GNU General
8 * See LICENSING which should be included
9 * along with this file for more details
20 #define set_new_handler std::set_new_handler
26 /* Shouldn't be initialized here! */
27 cchar
*globalerrorhandler::BugMsg
= "\n\nPlease don't send your bug reports, i cannot into coding!\n";
29 void (*globalerrorhandler::OldNewHandler
) () = 0;
32 void globalerrorhandler::Install () {
33 static truth AlreadyInstalled
= false;
34 if (!AlreadyInstalled
) {
35 AlreadyInstalled
= true;
36 OldNewHandler
= set_new_handler(NewHandler
);
37 atexit(globalerrorhandler::DeInstall
);
42 void globalerrorhandler::DeInstall () {
43 set_new_handler(OldNewHandler
);
47 void globalerrorhandler::Abort (cchar
*Format
, ...) {
49 char *bufptr
= Buffer
;
50 int bufsz
= (int)sizeof(Buffer
)-1;
58 n
= vsnprintf(bufptr
, bufsz
, Format
, ap
);
60 if (n
> -1 && n
< bufsz
) break;
61 if (n
< -1) n
= bufsz
+4096;
62 np
= (char *)realloc((bufptr
== Buffer
? NULL
: bufptr
), n
+1);
63 if (np
== NULL
) exit(4); //FIXME
66 fprintf(stderr
, "%s%s", bufptr
, BugMsg
);
69 festring mydir
= inputfile::GetMyDir();
70 mydir
<< "/" << "crash.log";
71 FILE *fo
= fopen(mydir
.CStr(), "a");
74 fprintf(fo
, "============================================================\n%s\n", bufptr
);
82 void globalerrorhandler::NewHandler () {
83 const cchar
*Msg
= "Fatal Error: Memory depleted.\nGet more RAM and hard disk space.";
84 std::cout
<< Msg
<< std::endl
;