summaryrefslogtreecommitdiff
path: root/packages/gdbint
diff options
context:
space:
mode:
authorpierre <pierre@3ad0048d-3df7-0310-abae-a5850022a9f2>2012-01-19 14:01:47 +0000
committerpierre <pierre@3ad0048d-3df7-0310-abae-a5850022a9f2>2012-01-19 14:01:47 +0000
commit6c6bbf7f8f24d2e142201f7f6a6e195ff9c27d20 (patch)
treed045b228d17e3c90ef883ad12fb5dd228e45c5ed /packages/gdbint
parent748db5be0c392c69f8cad2d808c19129469f60d9 (diff)
downloadfpc-6c6bbf7f8f24d2e142201f7f6a6e195ff9c27d20.tar.gz
* Try to fix go32v2 problems related to DJGPP code using C free on _environ ppchar by reallcating with malloc
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20111 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/gdbint')
-rw-r--r--packages/gdbint/src/gdbint.pp33
1 files changed, 32 insertions, 1 deletions
diff --git a/packages/gdbint/src/gdbint.pp b/packages/gdbint/src/gdbint.pp
index 41f55a4dd9..09b1e358d4 100644
--- a/packages/gdbint/src/gdbint.pp
+++ b/packages/gdbint/src/gdbint.pp
@@ -855,8 +855,11 @@ type
jmp_buf = dpmi_jmp_buf;
pjmp_buf = pdpmi_jmp_buf;
+
function setjmp(var rec : jmp_buf) : longint;cdecl;external;
+ function malloc(size : longint) : pointer;cdecl;external;
+
procedure longjmp(var rec : jmp_buf;return_value : longint);cdecl;external;
procedure reload_fs;assembler;
@@ -3102,6 +3105,32 @@ var
c_environ : ppchar;external name '_environ';
c_argc : longint;external name '___crt0_argc';
c_argv : ppchar;external name '___crt0_argv';
+
+ procedure ReallocateEnvironUsingCMalloc;
+
+ var
+ neededsize , count : longint;
+ penv : pchar;
+ newenv : ppchar;
+ begin
+ if not assigned(c_environ) then
+ neededsize:=0
+ else
+ begin
+ count:=0;
+ penv:=c_environ^;
+ while assigned(penv) do
+ begin
+ inc(count);
+ inc(penv,sizeof(pchar));
+ end;
+ neededsize:=count*sizeof(pchar);
+ end;
+ newenv:=malloc(neededsize);
+ system.move(c_environ,newenv,neededsize);
+ c_environ:=newenv;
+ end;
+
{$endif def go32v2}
var
current_directory : pchar; cvar; external;
@@ -3140,7 +3169,9 @@ var
save_gdb_stderr : pui_file;
begin
{$ifdef go32v2}
- c_environ:=system.envp;
+ { c_environ:=system.envp; }
+ { DJGPP libC presupposes the c_enivron was malloc'ated }
+ ReallocateEnvironUsingCMalloc;
c_argc:=system.argc;
c_argv:=system.argv;
{$endif def go32v2}