aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/library_fs.js1
-rw-r--r--tests/test_other.py21
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>