diff options
-rw-r--r-- | src/library_fs.js | 1 | ||||
-rw-r--r-- | tests/test_other.py | 21 |
2 files changed, 22 insertions, 0 deletions
diff --git a/src/library_fs.js b/src/library_fs.js index 5fc2c203..a392e72e 100644 --- a/src/library_fs.js +++ b/src/library_fs.js @@ -676,6 +676,7 @@ mergeInto(LibraryManager.library, { } catch (e) { throw new FS.ErrnoError(ERRNO_CODES.EBUSY); } + if (!old_dir || !new_dir) throw new FS.ErrnoError(ERRNO_CODES.ENOENT); // need to be part of the same mount if (old_dir.mount !== new_dir.mount) { throw new FS.ErrnoError(ERRNO_CODES.EXDEV); diff --git a/tests/test_other.py b/tests/test_other.py index f877d15e..0f71751a 100644 --- a/tests/test_other.py +++ b/tests/test_other.py @@ -3050,6 +3050,27 @@ int main(int argc, char **argv) { self.assertContained(r'''ok''', run_js('a.out.js', args=['123', 'abc'])) self.assertContained(r'''Failed to symlink paths: abc, ; errno=2''', run_js('a.out.js', args=['abc', ''])) + def test_rename_silly(self): + open('src.cpp', 'w').write(r''' +#include <stdio.h> +#include <errno.h> + +int main(int argc, char **argv) { + if (rename(argv[1], argv[2]) != 0) { + printf("Failed to rename paths: %s, %s; errno=%d\n", argv[1], argv[2], errno); + } else { + printf("ok\n"); + } +} + ''') + Popen([PYTHON, EMCC, 'src.cpp']).communicate() + + # cannot symlink nonexistents + self.assertContained(r'''Failed to rename paths: , abc; errno=2''', run_js('a.out.js', args=['', 'abc'])) + self.assertContained(r'''Failed to rename paths: , ; errno=2''', run_js('a.out.js', args=['', ''])) + self.assertContained(r'''Failed to rename paths: 123, abc; errno=2''', run_js('a.out.js', args=['123', 'abc'])) + self.assertContained(r'''Failed to rename paths: abc, ; errno=2''', run_js('a.out.js', args=['abc', ''])) + def test_emversion(self): open('src.cpp', 'w').write(r''' #include <stdio.h> |