diff --git a/libraries/base/jsbits/base.js b/libraries/base/jsbits/base.js index 3cd79fde2851d6bfdb4cb5be97827d9265a4a61d..f654432fccdcddf3b8d56a287e574663b305dbd0 100644 --- a/libraries/base/jsbits/base.js +++ b/libraries/base/jsbits/base.js @@ -280,6 +280,59 @@ function h$rmdir(file, file_off) { h$unsupported(-1); } +function h$rename(old_path, old_path_off, new_path, new_path_off) { + TRACE_IO("rename") +#ifndef GHCJS_BROWSER + if (h$isNode()) { + try { + fs.renameSync(h$decodeUtf8z(old_path, old_path_off), h$decodeUtf8z(new_path, new_path_off)); + return 0; + } catch(e) { + h$setErrno(e); + return -1; + } + } else +#endif + h$unsupported(-1); +} + +function h$getcwd(buf, off, buf_size) { + TRACE_IO("getcwd") +#ifndef GHCJS_BROWSER + if (h$isNode()) { + try { + var cwd = h$encodeUtf8(process.cwd()); + h$copyMutableByteArray(cwd, 0, buf, off, cwd.len); + RETURN_UBX_TUP2(cwd, 0); + } catch (e) { + h$setErrno(e); + return -1; + } + } else +#endif + h$unsupported(-1); +} + +function h$realpath(path,off,resolved,resolved_off) { + TRACE_IO("realpath") +#ifndef GHCJS_BROWSER + if (h$isNode()) { + try { + var rp = h$encodeUtf8(fs.realpathSync(h$decodeUtf8z(path,off))); + if (resolved !== null) { + h$copyMutableByteArray(rp, 0, resolved, resolved_off, Math.min(resolved.len - resolved_off, rp.len)); + RETURN_UBX_TUP2(resolved, resolved_off); + } + RETURN_UBX_TUP2(rp, 0); + } catch (e) { + h$setErrno(e); + return -1; + } + } else +#endif + h$unsupported(-1); +} + function h$base_open(file, file_off, how, mode, c) { return h$open(file,file_off,how,mode,c); } diff --git a/testsuite/tests/ghc-api/downsweep/all.T b/testsuite/tests/ghc-api/downsweep/all.T index 2ceacef4ec82dc25bec89d575e4146bd218abf71..1096159c2c6a591261b140e10f48f6fb8e871103 100644 --- a/testsuite/tests/ghc-api/downsweep/all.T +++ b/testsuite/tests/ghc-api/downsweep/all.T @@ -7,7 +7,6 @@ test('PartialDownsweep', test('OldModLocation', [ extra_run_opts('"' + config.libdir + '"') - , js_broken(22362) , when(opsys('mingw32'), expect_broken(16772)) ], compile_and_run, diff --git a/testsuite/tests/rename/prog006/all.T b/testsuite/tests/rename/prog006/all.T index 5b2c16105de2cc43bc0c27a1c26c004910aa9000..3a956d702a8b25d0c9f488305a6fc60e8bc19159 100644 --- a/testsuite/tests/rename/prog006/all.T +++ b/testsuite/tests/rename/prog006/all.T @@ -1 +1 @@ -test('rn.prog006', [extra_files(['A.hs', 'B/', 'Main.hs', 'pwd.hs']), js_broken(22261)], makefile_test, []) +test('rn.prog006', [extra_files(['A.hs', 'B/', 'Main.hs', 'pwd.hs'])], makefile_test, [])