diff options
author | pierre <pierre@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2012-03-21 16:13:16 +0000 |
---|---|---|
committer | pierre <pierre@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2012-03-21 16:13:16 +0000 |
commit | 749e9f333ea079a370d25a6dc0fe75e4d9b9056a (patch) | |
tree | b0b56467cb043a8f18c8fae510c121dd593225ae | |
parent | 99dfd961c65eb86656d46d9a89648ccd0e431b38 (diff) | |
download | fpc-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.pp | 33 |
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} |