Mercurial > projects > ddmd
diff dmd/Util.d @ 14:2cc604139636
Implemented Linux support for ddmd. Some parts are a bit hacky to just "get it working", that said, druntime and phobos compile, and unittests pass.
author | Robert Clipsham <robert@octarineparrot.com> |
---|---|
date | Sun, 04 Apr 2010 02:06:32 +0100 |
parents | 7427ded8caf7 |
children | 5c9b78899f5d |
line wrap: on
line diff
--- a/dmd/Util.d Wed Mar 31 16:29:36 2010 +0400 +++ b/dmd/Util.d Sun Apr 04 02:06:32 2010 +0100 @@ -13,19 +13,23 @@ import std.process : getenv; import std.c.string; import std.stdio : writef, writefln, write; -import std.c.process : spawnl, spawnlp; +version (Windows) +{ + import std.c.process : spawnl, spawnlp; +} import core.stdc.stdlib; import core.stdc.ctype; import core.stdc.stdarg; import core.stdc.stdio; +version (Bug4054) import core.memory; extern(C) int putenv(char*); //version = LOG; -version (Windows) { -} else { - import core.sys.posix.stdlib : putenv; +version (POSIX) +{ + import dmd.Gnuc; } enum MAX_PATH = 256; /// @@ -272,7 +276,12 @@ if (l <= tmp.sizeof) p = tmp.ptr; else + { + version (Bug4054) + p = cast(char*)GC.malloc(l); + else p = cast(char*)alloca(l); + } l--; memcpy(p, &line[k + 1], l); p[l] = 0; @@ -784,8 +793,8 @@ ///delete lnkfilename; } return status; -} else if (XXX) {/// linux || __APPLE__ || __FreeBSD__ || __sun&&__SVR4 - assert(false); +} else version (POSIX) {/// linux || __APPLE__ || __FreeBSD__ || __sun&&__SVR4 + assert(false, "Unimplemented"); /+ pid_t childpid; int i; @@ -1004,6 +1013,9 @@ case 2: envname[0] = '%'; break; default: break; /// } + version (Bug4054) + q = cast(char*) GC.malloc(envname.sizeof + len + 1); + else q = cast(char*) alloca(envname.sizeof + len + 1); sprintf(q, "%s=%s", envname.ptr + 1, args); status = putenv(q); @@ -1086,4 +1098,4 @@ static assert(false); } } -} \ No newline at end of file +}