From d07080d260075f2c00ec9a3752dbeda4f67ce439 Mon Sep 17 00:00:00 2001 From: Josh Meredith <joshmeredith2008@gmail.com> Date: Tue, 8 Aug 2023 18:58:39 +1000 Subject: [PATCH] JS: Implement missing C functions `rename`, `realpath`, and `getcwd` (#23806) --- libraries/base/jsbits/base.js | 53 +++++++++++++++++++++++++ testsuite/tests/ghc-api/downsweep/all.T | 1 - testsuite/tests/rename/prog006/all.T | 2 +- 3 files changed, 54 insertions(+), 2 deletions(-) diff --git a/libraries/base/jsbits/base.js b/libraries/base/jsbits/base.js index 3cd79fde2851..f654432fccdc 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 2ceacef4ec82..1096159c2c6a 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 5b2c16105de2..3a956d702a8b 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, []) -- GitLab