|
@@ -5,6 +5,7 @@ unit initc;
|
|
|
|
|
|
interface
|
|
|
|
|
|
+
|
|
|
{$LINKLIB cygwin}
|
|
|
{$linklib kernel32}
|
|
|
|
|
@@ -29,9 +30,20 @@ procedure do_global_dtors;cdecl;external;
|
|
|
but that one ends with _exit that is system dependent !! }
|
|
|
|
|
|
{ avoid loading of cygwin _exit code
|
|
|
- so that exit returns }
|
|
|
+ so that exit returns
|
|
|
+ apparently this is not enough anymore
|
|
|
+ use longjmp instead PM }
|
|
|
+var
|
|
|
+ entryjmpbuf,exitjmpbuf : jmp_buf;
|
|
|
+const
|
|
|
+ exitjmpbufset : boolean = false;
|
|
|
+
|
|
|
procedure _exit(status : longint);cdecl;
|
|
|
begin
|
|
|
+ if exitjmpbufset then
|
|
|
+ longjmp(exitjmpbuf,1)
|
|
|
+ else
|
|
|
+ RunError(status);
|
|
|
end;
|
|
|
|
|
|
procedure C_exit(status : longint);popstack;external name '_exit';
|
|
@@ -52,9 +64,17 @@ begin
|
|
|
stdHandle:=newHandle;
|
|
|
end;
|
|
|
|
|
|
+function entry : longint;
|
|
|
+begin
|
|
|
+ longjmp(entryjmpbuf,1);
|
|
|
+ entry:=0;
|
|
|
+end;
|
|
|
|
|
|
initialization
|
|
|
- cygwin_crt0(nil);
|
|
|
+ if setjmp(entryjmpbuf)=0 then
|
|
|
+ begin
|
|
|
+ cygwin_crt0(@entry);
|
|
|
+ end;
|
|
|
{ Reinitialize std handles that can be changed }
|
|
|
UpdateStdHandle(TextRec(Input),StdInputHandle,GetStdHandle(STD_INPUT_HANDLE));
|
|
|
UpdateStdHandle(TextRec(Output),StdOutputHandle,GetStdHandle(STD_OUTPUT_HANDLE));
|
|
@@ -64,17 +84,31 @@ initialization
|
|
|
finalization
|
|
|
{ should we pass exit code ?
|
|
|
its apparently only used by _exit so it doesn't matter PM }
|
|
|
- C_exit(0);
|
|
|
-
|
|
|
+if setjmp(exitjmpbuf)=0 then
|
|
|
+ begin
|
|
|
+ exitjmpbufset:=true;
|
|
|
+ { C_exit(errorcode);
|
|
|
+ this code does not work correctly anymore
|
|
|
+ C function _exit is not called at end of exit function
|
|
|
+ thus the code of exit does not return at all
|
|
|
+ disabled PM }
|
|
|
+ end;
|
|
|
end.
|
|
|
{
|
|
|
$Log$
|
|
|
- Revision 1.4 2001-04-23 18:24:45 peter
|
|
|
- * remove useless define (merged)
|
|
|
+ Revision 1.5 2001-09-22 11:15:31 peter
|
|
|
+ * merged v10 version for exit fixes
|
|
|
+
|
|
|
+ Revision 1.1.2.4 2001/09/19 15:23:39 pierre
|
|
|
+ * work for newer cygwin version
|
|
|
+
|
|
|
+ Revision 1.1.2.3 2001/04/23 01:15:44 carl
|
|
|
+ - removed unused and useless ifdef
|
|
|
+
|
|
|
+ Revision 1.1.2.2 2001/04/02 13:30:14 pierre
|
|
|
+ * Remove call to C exit procedure as it does not return anymore
|
|
|
|
|
|
- Revision 1.3 2000/12/30 17:48:36 peter
|
|
|
- * update std handles after initing c
|
|
|
+ Revision 1.1.2.1 2000/12/30 17:49:48 peter
|
|
|
+ * update std handles after initializing c
|
|
|
|
|
|
- Revision 1.2 2000/07/13 11:33:57 michael
|
|
|
- + removed logs
|
|
|
}
|