diff --git a/selfhost/cmd/ww/main.combined.ww b/selfhost/cmd/ww/main.combined.ww index a24f473c..0f37ea44 100644 --- a/selfhost/cmd/ww/main.combined.ww +++ b/selfhost/cmd/ww/main.combined.ww @@ -2724,8 +2724,9 @@ import rt; import strings; // All path/string scratch buffers go on the runtime page allocator. -// One page is plenty for any path we build. -def PATH_MAX: u64 = 4096u64; +// One page is plenty for any path we build. PATH_MAX lives in lib/os +// (os.PATH_MAX: i32 = 4096) — the duplicate u64 def was dropped to close +// the cgen #127 mod-mangle attribution bug consumer per rule-7. def CMD_MAX: u64 = 8192u64; // ---- C-string helpers -------------------------------------------------- @@ -2845,8 +2846,8 @@ fn selfdirinto(dst: *u8, dstsz: u64, argv0: *u8) void = { // Build "$dir/$name" (NUL-terminated) into a fresh page-sized buffer. fn joinpath(dir: *u8, name: *u8) *u8 = { - let buf: []u8 = alloc([], PATH_MAX)!; - buf.len = PATH_MAX: i32; + let buf: []u8 = alloc([], (os.PATH_MAX: u64))!; + buf.len = os.PATH_MAX; let off: u64 = cstrinto(buf.ptr, 0u64, dir); off = byteinto(buf.ptr, off, 47u8); off = cstrinto(buf.ptr, off, name); @@ -2856,8 +2857,8 @@ fn joinpath(dir: *u8, name: *u8) *u8 = { // Same, but the second component is a ww `str` literal. fn joinpathlit(dir: *u8, name: str) *u8 = { - let buf: []u8 = alloc([], PATH_MAX)!; - buf.len = PATH_MAX: i32; + let buf: []u8 = alloc([], (os.PATH_MAX: u64))!; + buf.len = os.PATH_MAX; let off: u64 = cstrinto(buf.ptr, 0u64, dir); off = byteinto(buf.ptr, off, 47u8); off = strinto(buf.ptr, off, name); @@ -2960,7 +2961,7 @@ fn importpathform(name: *u8, namelen: u64) *u8 = { // `foo/foo.ha` fallback; a module IS the directory). fn locatein(dir: *u8, dirlen: u64, pathform: *u8, pflen: u64, isdir: *i32) *u8 = { - let buf: []u8 = alloc([], PATH_MAX)!; + let buf: []u8 = alloc([], (os.PATH_MAX: u64))!; let off: u64 = 0u64; let i: u64 = 0u64; for (i < dirlen) { buf[off + i] = dir[i]; i += 1u64; }; @@ -2985,7 +2986,7 @@ fn locatein(dir: *u8, dirlen: u64, return buf.ptr; }; - let buf2: []u8 = alloc([], PATH_MAX)!; + let buf2: []u8 = alloc([], (os.PATH_MAX: u64))!; off = 0u64; i = 0u64; for (i < dirlen) { buf2[off + i] = dir[i]; i += 1u64; }; @@ -3430,8 +3431,8 @@ fn makestem(stem: *u8, src: *u8) void = { // Append a literal suffix to `stem` (which already lives in a buffer). fn appendlit(stem: *u8, suffix: str) *u8 = { - let buf: []u8 = alloc([], PATH_MAX)!; - buf.len = PATH_MAX: i32; + let buf: []u8 = alloc([], (os.PATH_MAX: u64))!; + buf.len = os.PATH_MAX; let off: u64 = cstrinto(buf.ptr, 0u64, stem); off = strinto(buf.ptr, off, suffix); cstrseal(buf.ptr, off); @@ -3467,8 +3468,8 @@ fn buildone(selfdir: *u8, src: *u8, entryisdir: i32, out: *u8, incs: *u8, lf: *l let l6: *u8 = joinpathlit(selfdir, "w6l_ww"); // Default lib search path: /../../lib - let dotdotlib: []u8 = alloc([], PATH_MAX)!; - dotdotlib.len = PATH_MAX: i32; + let dotdotlib: []u8 = alloc([], (os.PATH_MAX: u64))!; + dotdotlib.len = os.PATH_MAX; { let off: u64 = cstrinto(dotdotlib.ptr, 0u64, selfdir); off = strinto(dotdotlib.ptr, off, "/../../lib"); @@ -3481,8 +3482,8 @@ fn buildone(selfdir: *u8, src: *u8, entryisdir: i32, out: *u8, incs: *u8, lf: *l // convention assumes you're running from the module dir; our // wrappers don't cd, so dirname(src) stands in as the closest // analog. Source-dir wins ties over the system path (cc -I.). - let srcd: []u8 = alloc([], PATH_MAX)!; - srcd.len = PATH_MAX: i32; + let srcd: []u8 = alloc([], (os.PATH_MAX: u64))!; + srcd.len = os.PATH_MAX; if (entryisdir != 0) { let slen: u64 = cstrlen(src); let k: u64 = 0u64; @@ -3516,8 +3517,8 @@ fn buildone(selfdir: *u8, src: *u8, entryisdir: i32, out: *u8, incs: *u8, lf: *l }; // Compose searchpath: srcd + ':' + incs + ':' + dotdotlib. - let searchpath: []u8 = alloc([], PATH_MAX * 3u64)!; - searchpath.len = (PATH_MAX * 3u64): i32; + let searchpath: []u8 = alloc([], (os.PATH_MAX: u64) * 3u64)!; + searchpath.len = ((os.PATH_MAX: u64) * 3u64): i32; { let off: u64 = cstrinto(searchpath.ptr, 0u64, srcd.ptr); off = byteinto(searchpath.ptr, off, 58u8); // ':' @@ -3531,8 +3532,8 @@ fn buildone(selfdir: *u8, src: *u8, entryisdir: i32, out: *u8, incs: *u8, lf: *l // Stem for .s/.o/.combined.ww side files. Dir entry: /; // file entry: src stripped of .ww. - let stem: []u8 = alloc([], PATH_MAX)!; - stem.len = PATH_MAX: i32; + let stem: []u8 = alloc([], (os.PATH_MAX: u64))!; + stem.len = os.PATH_MAX; if (entryisdir != 0) { let dlen: u64 = cstrlen(srcd.ptr); let bo: u64 = basenameoff(srcd.ptr, dlen); @@ -3549,8 +3550,8 @@ fn buildone(selfdir: *u8, src: *u8, entryisdir: i32, out: *u8, incs: *u8, lf: *l let combined: *u8 = appendlit(stem.ptr, ".combined.ww"); // libwwrt.a path: /../lib/libwwrt.a - let libwwrt: []u8 = alloc([], PATH_MAX)!; - libwwrt.len = PATH_MAX: i32; + let libwwrt: []u8 = alloc([], (os.PATH_MAX: u64))!; + libwwrt.len = os.PATH_MAX; { let off: u64 = cstrinto(libwwrt.ptr, 0u64, selfdir); off = strinto(libwwrt.ptr, off, "/../lib/libwwrt.a"); @@ -3701,7 +3702,7 @@ fn arenadupcstr(src: *u8, plen: u64) *u8 = { // buildsearchpath — compose the colon-separated lookup path used by // resolvemodule's case (4). Order: "." : : /../../lib fn buildsearchpath(selfdir: *u8, incs: *u8) *u8 = { - let buf: []u8 = alloc([], PATH_MAX * 2u64)!; + let buf: []u8 = alloc([], (os.PATH_MAX: u64) * 2u64)!; let off: u64 = 0u64; buf[off] = 46u8; off += 1u64; // '.' if (incs != nil) { @@ -3776,8 +3777,8 @@ fn defaultoutpath(src: *u8) *u8 = { if (src[i] == 47u8) { start = i + 1u64; }; // '/' i += 1u64; }; - let out: []u8 = alloc([], PATH_MAX)!; - out.len = PATH_MAX: i32; + let out: []u8 = alloc([], (os.PATH_MAX: u64))!; + out.len = os.PATH_MAX; let off: u64 = 0u64; let j: u64 = start; for (j < n) { @@ -3801,8 +3802,8 @@ fn defaultoutpath(src: *u8) *u8 = { fn dobuild(selfdir: *u8, argv: **u8, argc: i32, start: i32) i32 = { let src: *u8 = nil; - let incs: []u8 = alloc([], PATH_MAX * 2u64)!; - incs.len = (PATH_MAX * 2u64): i32; + let incs: []u8 = alloc([], (os.PATH_MAX: u64) * 2u64)!; + incs.len = ((os.PATH_MAX: u64) * 2u64): i32; let incoff: u64 = 0u64; cstrseal(incs.ptr, 0u64); @@ -3901,8 +3902,8 @@ fn dobuild(selfdir: *u8, argv: **u8, argc: i32, start: i32) i32 = { rlen -= 1u64; }; let bo: u64 = basenameoff(resolved, rlen); - let outbuf: []u8 = alloc([], PATH_MAX)!; - outbuf.len = PATH_MAX: i32; + let outbuf: []u8 = alloc([], (os.PATH_MAX: u64))!; + outbuf.len = os.PATH_MAX; out = outbuf.ptr; let i: u64 = bo; let off: u64 = 0u64; @@ -3952,8 +3953,8 @@ fn makeruntmp(buf: *u8) void = { fn dorun(selfdir: *u8, argv: **u8, argc: i32, start: i32) i32 = { let src: *u8 = nil; let passstart: i32 = -1; // first argv idx to pass through to program - let incs: []u8 = alloc([], PATH_MAX * 2u64)!; - incs.len = (PATH_MAX * 2u64): i32; + let incs: []u8 = alloc([], (os.PATH_MAX: u64) * 2u64)!; + incs.len = ((os.PATH_MAX: u64) * 2u64): i32; let incoff: u64 = 0u64; cstrseal(incs.ptr, 0u64); @@ -4052,8 +4053,8 @@ fn dorun(selfdir: *u8, argv: **u8, argc: i32, start: i32) i32 = { return 1; }; - let tmp: []u8 = alloc([], PATH_MAX)!; - tmp.len = PATH_MAX: i32; + let tmp: []u8 = alloc([], (os.PATH_MAX: u64))!; + tmp.len = os.PATH_MAX; makeruntmp(tmp.ptr); let lf: lflags; lf.libdirs = libdirs.ptr; @@ -4091,8 +4092,8 @@ fn dorun(selfdir: *u8, argv: **u8, argc: i32, start: i32) i32 = { // report ok/FAIL per file, return 0 iff all pass. fn runsingletest(selfdir: *u8, src: *u8) i32 = { - let tmp: []u8 = alloc([], PATH_MAX)!; - tmp.len = PATH_MAX: i32; + let tmp: []u8 = alloc([], (os.PATH_MAX: u64))!; + tmp.len = os.PATH_MAX; makeruntmp(tmp.ptr); if (buildone(selfdir, src, 0, tmp.ptr, "\0".ptr, nil) != 0) { os.remove(pathstr(tmp.ptr)); @@ -4133,8 +4134,8 @@ fn rundirtests(selfdir: *u8, dir: *u8) i32 = { if (cstrendswithlit(name, "_test.ww")) { let nlen: u64 = cstrlen(name); // path = / - let path: []u8 = alloc([], PATH_MAX)!; - path.len = PATH_MAX: i32; + let path: []u8 = alloc([], (os.PATH_MAX: u64))!; + path.len = os.PATH_MAX; let poff: u64 = cstrinto(path.ptr, 0u64, dir); path[poff] = 47u8; poff += 1u64; let i: u64 = 0u64; @@ -4142,12 +4143,12 @@ fn rundirtests(selfdir: *u8, dir: *u8) i32 = { poff += nlen; cstrseal(path.ptr, poff); // incs = so test files can `use ` siblings - let tincs: []u8 = alloc([], PATH_MAX)!; - tincs.len = PATH_MAX: i32; + let tincs: []u8 = alloc([], (os.PATH_MAX: u64))!; + tincs.len = os.PATH_MAX; let ic: u64 = cstrinto(tincs.ptr, 0u64, dir); cstrseal(tincs.ptr, ic); - let tmp: []u8 = alloc([], PATH_MAX)!; - tmp.len = PATH_MAX: i32; + let tmp: []u8 = alloc([], (os.PATH_MAX: u64))!; + tmp.len = os.PATH_MAX; makeruntmp(tmp.ptr); let bres: i32 = buildone(selfdir, path.ptr, 0, tmp.ptr, tincs.ptr, nil); if (bres != 0) { @@ -4213,9 +4214,9 @@ export fn main(argc: i32, argv: **u8) i32 = { }; // selfdir = dirname(argv[0]) - let selfdir: []u8 = alloc([], PATH_MAX)!; - selfdir.len = PATH_MAX: i32; - selfdirinto(selfdir.ptr, PATH_MAX, argv[0]); + let selfdir: []u8 = alloc([], (os.PATH_MAX: u64))!; + selfdir.len = os.PATH_MAX; + selfdirinto(selfdir.ptr, (os.PATH_MAX: u64), argv[0]); if (argc < 2) { writeusage(2); diff --git a/selfhost/cmd/ww/main.ww b/selfhost/cmd/ww/main.ww index f9805843..c1404241 100644 --- a/selfhost/cmd/ww/main.ww +++ b/selfhost/cmd/ww/main.ww @@ -18,8 +18,9 @@ import rt; import strings; // All path/string scratch buffers go on the runtime page allocator. -// One page is plenty for any path we build. -def PATH_MAX: u64 = 4096u64; +// One page is plenty for any path we build. PATH_MAX lives in lib/os +// (os.PATH_MAX: i32 = 4096) — the duplicate u64 def was dropped to close +// the cgen #127 mod-mangle attribution bug consumer per rule-7. def CMD_MAX: u64 = 8192u64; // ---- C-string helpers -------------------------------------------------- @@ -139,8 +140,8 @@ fn selfdirinto(dst: *u8, dstsz: u64, argv0: *u8) void = { // Build "$dir/$name" (NUL-terminated) into a fresh page-sized buffer. fn joinpath(dir: *u8, name: *u8) *u8 = { - let buf: []u8 = alloc([], PATH_MAX)!; - buf.len = PATH_MAX: i32; + let buf: []u8 = alloc([], (os.PATH_MAX: u64))!; + buf.len = os.PATH_MAX; let off: u64 = cstrinto(buf.ptr, 0u64, dir); off = byteinto(buf.ptr, off, 47u8); off = cstrinto(buf.ptr, off, name); @@ -150,8 +151,8 @@ fn joinpath(dir: *u8, name: *u8) *u8 = { // Same, but the second component is a ww `str` literal. fn joinpathlit(dir: *u8, name: str) *u8 = { - let buf: []u8 = alloc([], PATH_MAX)!; - buf.len = PATH_MAX: i32; + let buf: []u8 = alloc([], (os.PATH_MAX: u64))!; + buf.len = os.PATH_MAX; let off: u64 = cstrinto(buf.ptr, 0u64, dir); off = byteinto(buf.ptr, off, 47u8); off = strinto(buf.ptr, off, name); @@ -254,7 +255,7 @@ fn importpathform(name: *u8, namelen: u64) *u8 = { // `foo/foo.ha` fallback; a module IS the directory). fn locatein(dir: *u8, dirlen: u64, pathform: *u8, pflen: u64, isdir: *i32) *u8 = { - let buf: []u8 = alloc([], PATH_MAX)!; + let buf: []u8 = alloc([], (os.PATH_MAX: u64))!; let off: u64 = 0u64; let i: u64 = 0u64; for (i < dirlen) { buf[off + i] = dir[i]; i += 1u64; }; @@ -279,7 +280,7 @@ fn locatein(dir: *u8, dirlen: u64, return buf.ptr; }; - let buf2: []u8 = alloc([], PATH_MAX)!; + let buf2: []u8 = alloc([], (os.PATH_MAX: u64))!; off = 0u64; i = 0u64; for (i < dirlen) { buf2[off + i] = dir[i]; i += 1u64; }; @@ -724,8 +725,8 @@ fn makestem(stem: *u8, src: *u8) void = { // Append a literal suffix to `stem` (which already lives in a buffer). fn appendlit(stem: *u8, suffix: str) *u8 = { - let buf: []u8 = alloc([], PATH_MAX)!; - buf.len = PATH_MAX: i32; + let buf: []u8 = alloc([], (os.PATH_MAX: u64))!; + buf.len = os.PATH_MAX; let off: u64 = cstrinto(buf.ptr, 0u64, stem); off = strinto(buf.ptr, off, suffix); cstrseal(buf.ptr, off); @@ -761,8 +762,8 @@ fn buildone(selfdir: *u8, src: *u8, entryisdir: i32, out: *u8, incs: *u8, lf: *l let l6: *u8 = joinpathlit(selfdir, "w6l_ww"); // Default lib search path: /../../lib - let dotdotlib: []u8 = alloc([], PATH_MAX)!; - dotdotlib.len = PATH_MAX: i32; + let dotdotlib: []u8 = alloc([], (os.PATH_MAX: u64))!; + dotdotlib.len = os.PATH_MAX; { let off: u64 = cstrinto(dotdotlib.ptr, 0u64, selfdir); off = strinto(dotdotlib.ptr, off, "/../../lib"); @@ -775,8 +776,8 @@ fn buildone(selfdir: *u8, src: *u8, entryisdir: i32, out: *u8, incs: *u8, lf: *l // convention assumes you're running from the module dir; our // wrappers don't cd, so dirname(src) stands in as the closest // analog. Source-dir wins ties over the system path (cc -I.). - let srcd: []u8 = alloc([], PATH_MAX)!; - srcd.len = PATH_MAX: i32; + let srcd: []u8 = alloc([], (os.PATH_MAX: u64))!; + srcd.len = os.PATH_MAX; if (entryisdir != 0) { let slen: u64 = cstrlen(src); let k: u64 = 0u64; @@ -810,8 +811,8 @@ fn buildone(selfdir: *u8, src: *u8, entryisdir: i32, out: *u8, incs: *u8, lf: *l }; // Compose searchpath: srcd + ':' + incs + ':' + dotdotlib. - let searchpath: []u8 = alloc([], PATH_MAX * 3u64)!; - searchpath.len = (PATH_MAX * 3u64): i32; + let searchpath: []u8 = alloc([], (os.PATH_MAX: u64) * 3u64)!; + searchpath.len = ((os.PATH_MAX: u64) * 3u64): i32; { let off: u64 = cstrinto(searchpath.ptr, 0u64, srcd.ptr); off = byteinto(searchpath.ptr, off, 58u8); // ':' @@ -825,8 +826,8 @@ fn buildone(selfdir: *u8, src: *u8, entryisdir: i32, out: *u8, incs: *u8, lf: *l // Stem for .s/.o/.combined.ww side files. Dir entry: /; // file entry: src stripped of .ww. - let stem: []u8 = alloc([], PATH_MAX)!; - stem.len = PATH_MAX: i32; + let stem: []u8 = alloc([], (os.PATH_MAX: u64))!; + stem.len = os.PATH_MAX; if (entryisdir != 0) { let dlen: u64 = cstrlen(srcd.ptr); let bo: u64 = basenameoff(srcd.ptr, dlen); @@ -843,8 +844,8 @@ fn buildone(selfdir: *u8, src: *u8, entryisdir: i32, out: *u8, incs: *u8, lf: *l let combined: *u8 = appendlit(stem.ptr, ".combined.ww"); // libwwrt.a path: /../lib/libwwrt.a - let libwwrt: []u8 = alloc([], PATH_MAX)!; - libwwrt.len = PATH_MAX: i32; + let libwwrt: []u8 = alloc([], (os.PATH_MAX: u64))!; + libwwrt.len = os.PATH_MAX; { let off: u64 = cstrinto(libwwrt.ptr, 0u64, selfdir); off = strinto(libwwrt.ptr, off, "/../lib/libwwrt.a"); @@ -995,7 +996,7 @@ fn arenadupcstr(src: *u8, plen: u64) *u8 = { // buildsearchpath — compose the colon-separated lookup path used by // resolvemodule's case (4). Order: "." : : /../../lib fn buildsearchpath(selfdir: *u8, incs: *u8) *u8 = { - let buf: []u8 = alloc([], PATH_MAX * 2u64)!; + let buf: []u8 = alloc([], (os.PATH_MAX: u64) * 2u64)!; let off: u64 = 0u64; buf[off] = 46u8; off += 1u64; // '.' if (incs != nil) { @@ -1070,8 +1071,8 @@ fn defaultoutpath(src: *u8) *u8 = { if (src[i] == 47u8) { start = i + 1u64; }; // '/' i += 1u64; }; - let out: []u8 = alloc([], PATH_MAX)!; - out.len = PATH_MAX: i32; + let out: []u8 = alloc([], (os.PATH_MAX: u64))!; + out.len = os.PATH_MAX; let off: u64 = 0u64; let j: u64 = start; for (j < n) { @@ -1095,8 +1096,8 @@ fn defaultoutpath(src: *u8) *u8 = { fn dobuild(selfdir: *u8, argv: **u8, argc: i32, start: i32) i32 = { let src: *u8 = nil; - let incs: []u8 = alloc([], PATH_MAX * 2u64)!; - incs.len = (PATH_MAX * 2u64): i32; + let incs: []u8 = alloc([], (os.PATH_MAX: u64) * 2u64)!; + incs.len = ((os.PATH_MAX: u64) * 2u64): i32; let incoff: u64 = 0u64; cstrseal(incs.ptr, 0u64); @@ -1195,8 +1196,8 @@ fn dobuild(selfdir: *u8, argv: **u8, argc: i32, start: i32) i32 = { rlen -= 1u64; }; let bo: u64 = basenameoff(resolved, rlen); - let outbuf: []u8 = alloc([], PATH_MAX)!; - outbuf.len = PATH_MAX: i32; + let outbuf: []u8 = alloc([], (os.PATH_MAX: u64))!; + outbuf.len = os.PATH_MAX; out = outbuf.ptr; let i: u64 = bo; let off: u64 = 0u64; @@ -1246,8 +1247,8 @@ fn makeruntmp(buf: *u8) void = { fn dorun(selfdir: *u8, argv: **u8, argc: i32, start: i32) i32 = { let src: *u8 = nil; let passstart: i32 = -1; // first argv idx to pass through to program - let incs: []u8 = alloc([], PATH_MAX * 2u64)!; - incs.len = (PATH_MAX * 2u64): i32; + let incs: []u8 = alloc([], (os.PATH_MAX: u64) * 2u64)!; + incs.len = ((os.PATH_MAX: u64) * 2u64): i32; let incoff: u64 = 0u64; cstrseal(incs.ptr, 0u64); @@ -1346,8 +1347,8 @@ fn dorun(selfdir: *u8, argv: **u8, argc: i32, start: i32) i32 = { return 1; }; - let tmp: []u8 = alloc([], PATH_MAX)!; - tmp.len = PATH_MAX: i32; + let tmp: []u8 = alloc([], (os.PATH_MAX: u64))!; + tmp.len = os.PATH_MAX; makeruntmp(tmp.ptr); let lf: lflags; lf.libdirs = libdirs.ptr; @@ -1385,8 +1386,8 @@ fn dorun(selfdir: *u8, argv: **u8, argc: i32, start: i32) i32 = { // report ok/FAIL per file, return 0 iff all pass. fn runsingletest(selfdir: *u8, src: *u8) i32 = { - let tmp: []u8 = alloc([], PATH_MAX)!; - tmp.len = PATH_MAX: i32; + let tmp: []u8 = alloc([], (os.PATH_MAX: u64))!; + tmp.len = os.PATH_MAX; makeruntmp(tmp.ptr); if (buildone(selfdir, src, 0, tmp.ptr, "\0".ptr, nil) != 0) { os.remove(pathstr(tmp.ptr)); @@ -1427,8 +1428,8 @@ fn rundirtests(selfdir: *u8, dir: *u8) i32 = { if (cstrendswithlit(name, "_test.ww")) { let nlen: u64 = cstrlen(name); // path = / - let path: []u8 = alloc([], PATH_MAX)!; - path.len = PATH_MAX: i32; + let path: []u8 = alloc([], (os.PATH_MAX: u64))!; + path.len = os.PATH_MAX; let poff: u64 = cstrinto(path.ptr, 0u64, dir); path[poff] = 47u8; poff += 1u64; let i: u64 = 0u64; @@ -1436,12 +1437,12 @@ fn rundirtests(selfdir: *u8, dir: *u8) i32 = { poff += nlen; cstrseal(path.ptr, poff); // incs = so test files can `use ` siblings - let tincs: []u8 = alloc([], PATH_MAX)!; - tincs.len = PATH_MAX: i32; + let tincs: []u8 = alloc([], (os.PATH_MAX: u64))!; + tincs.len = os.PATH_MAX; let ic: u64 = cstrinto(tincs.ptr, 0u64, dir); cstrseal(tincs.ptr, ic); - let tmp: []u8 = alloc([], PATH_MAX)!; - tmp.len = PATH_MAX: i32; + let tmp: []u8 = alloc([], (os.PATH_MAX: u64))!; + tmp.len = os.PATH_MAX; makeruntmp(tmp.ptr); let bres: i32 = buildone(selfdir, path.ptr, 0, tmp.ptr, tincs.ptr, nil); if (bres != 0) { @@ -1507,9 +1508,9 @@ export fn main(argc: i32, argv: **u8) i32 = { }; // selfdir = dirname(argv[0]) - let selfdir: []u8 = alloc([], PATH_MAX)!; - selfdir.len = PATH_MAX: i32; - selfdirinto(selfdir.ptr, PATH_MAX, argv[0]); + let selfdir: []u8 = alloc([], (os.PATH_MAX: u64))!; + selfdir.len = os.PATH_MAX; + selfdirinto(selfdir.ptr, (os.PATH_MAX: u64), argv[0]); if (argc < 2) { writeusage(2);