summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/tests/unit/read_dir_test.ts20
-rw-r--r--runtime/ops/fs.rs20
2 files changed, 29 insertions, 11 deletions
diff --git a/cli/tests/unit/read_dir_test.ts b/cli/tests/unit/read_dir_test.ts
index 4a0719a4b..829f7bfa2 100644
--- a/cli/tests/unit/read_dir_test.ts
+++ b/cli/tests/unit/read_dir_test.ts
@@ -78,3 +78,23 @@ unitTest({ perms: { read: false } }, async function readDirPerm(): Promise<
await Deno.readDir("tests/")[Symbol.asyncIterator]().next();
}, Deno.errors.PermissionDenied);
});
+
+unitTest(
+ { perms: { read: true }, ignore: Deno.build.os == "windows" },
+ async function readDirDevFd(): Promise<
+ void
+ > {
+ for await (const _ of Deno.readDir("/dev/fd")) {
+ // We don't actually care whats in here; just that we don't panic on non regular entries
+ }
+ },
+);
+
+unitTest(
+ { perms: { read: true }, ignore: Deno.build.os == "windows" },
+ function readDirDevFdSync(): void {
+ for (const _ of Deno.readDirSync("/dev/fd")) {
+ // We don't actually care whats in here; just that we don't panic on non regular file entries
+ }
+ },
+);
diff --git a/runtime/ops/fs.rs b/runtime/ops/fs.rs
index d1242b116..629afbfe6 100644
--- a/runtime/ops/fs.rs
+++ b/runtime/ops/fs.rs
@@ -1022,20 +1022,19 @@ fn op_read_dir_sync(
let entries: Vec<_> = std::fs::read_dir(path)?
.filter_map(|entry| {
let entry = entry.unwrap();
- let file_type = entry.file_type().unwrap();
// Not all filenames can be encoded as UTF-8. Skip those for now.
if let Ok(name) = into_string(entry.file_name()) {
Some(json!({
"name": name,
- "isFile": file_type.is_file(),
- "isDirectory": file_type.is_dir(),
- "isSymlink": file_type.is_symlink()
+ "isFile": entry.file_type().map_or(false, |file_type| file_type.is_file()),
+ "isDirectory": entry.file_type().map_or(false, |file_type| file_type.is_dir()),
+ "isSymlink": entry.file_type().map_or(false, |file_type| file_type.is_symlink()),
}))
} else {
None
}
})
- .collect();
+ .collect();
Ok(json!({ "entries": entries }))
}
@@ -1056,25 +1055,24 @@ async fn op_read_dir_async(
let entries: Vec<_> = std::fs::read_dir(path)?
.filter_map(|entry| {
let entry = entry.unwrap();
- let file_type = entry.file_type().unwrap();
// Not all filenames can be encoded as UTF-8. Skip those for now.
if let Ok(name) = into_string(entry.file_name()) {
Some(json!({
"name": name,
- "isFile": file_type.is_file(),
- "isDirectory": file_type.is_dir(),
- "isSymlink": file_type.is_symlink()
+ "isFile": entry.file_type().map_or(false, |file_type| file_type.is_file()),
+ "isDirectory": entry.file_type().map_or(false, |file_type| file_type.is_dir()),
+ "isSymlink": entry.file_type().map_or(false, |file_type| file_type.is_symlink()),
}))
} else {
None
}
})
- .collect();
+ .collect();
Ok(json!({ "entries": entries }))
})
.await
- .unwrap()
+ .unwrap()
}
#[derive(Deserialize)]