summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpierre <pierre@3ad0048d-3df7-0310-abae-a5850022a9f2>2012-03-21 16:13:16 +0000
committerpierre <pierre@3ad0048d-3df7-0310-abae-a5850022a9f2>2012-03-21 16:13:16 +0000
commit749e9f333ea079a370d25a6dc0fe75e4d9b9056a (patch)
treeb0b56467cb043a8f18c8fae510c121dd593225ae
parent99dfd961c65eb86656d46d9a89648ccd0e431b38 (diff)
downloadfpc-749e9f333ea079a370d25a6dc0fe75e4d9b9056a.tar.gz
Merge rev 20111
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/fixes_2_6_0@20556 3ad0048d-3df7-0310-abae-a5850022a9f2
-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 6898efbf68..7ffdc84164 100644
--- a/packages/gdbint/src/gdbint.pp
+++ b/packages/gdbint/src/gdbint.pp
@@ -815,8 +815,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;
@@ -2973,6 +2976,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;
@@ -2992,7 +3021,9 @@ var
{$endif not GDB_INIT_HAS_ARGV0}
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}