aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar dave caruso <me@paperdave.net> 2023-09-21 21:42:49 -0400
committerGravatar GitHub <noreply@github.com> 2023-09-21 18:42:49 -0700
commitb05e10cd8b0f388b766819e263ff3f478888ed96 (patch)
treed6d68e3fcfdc056974e3c39581025812bb5eb4ea
parent92a5d845aedf925ca31e64fa41a199ca75058027 (diff)
downloadbun-b05e10cd8b0f388b766819e263ff3f478888ed96.tar.gz
bun-b05e10cd8b0f388b766819e263ff3f478888ed96.tar.zst
bun-b05e10cd8b0f388b766819e263ff3f478888ed96.zip
fix(node:fs): use the right copyFile constants (#5874)
-rw-r--r--src/bun.js/node/node_fs_constant.zig7
-rw-r--r--test/js/node/fs/fs.test.ts31
2 files changed, 33 insertions, 5 deletions
diff --git a/src/bun.js/node/node_fs_constant.zig b/src/bun.js/node/node_fs_constant.zig
index 4d2d0ec6a..75211723d 100644
--- a/src/bun.js/node/node_fs_constant.zig
+++ b/src/bun.js/node/node_fs_constant.zig
@@ -42,16 +42,15 @@ pub const Constants = struct {
};
/// Constant for fs.copyFile. Flag indicating the destination file should not be overwritten if it already exists.
- pub const COPYFILE_EXCL: i32 = 1 << Copyfile.exclusive;
-
+ pub const COPYFILE_EXCL: i32 = Copyfile.exclusive;
///
/// Constant for fs.copyFile. copy operation will attempt to create a copy-on-write reflink.
/// If the underlying platform does not support copy-on-write, then a fallback copy mechanism is used.
- pub const COPYFILE_FICLONE: i32 = 1 << Copyfile.clone;
+ pub const COPYFILE_FICLONE: i32 = Copyfile.clone;
///
/// Constant for fs.copyFile. Copy operation will attempt to create a copy-on-write reflink.
/// If the underlying platform does not support copy-on-write, then the operation will fail with an error.
- pub const COPYFILE_FICLONE_FORCE: i32 = 1 << Copyfile.force;
+ pub const COPYFILE_FICLONE_FORCE: i32 = Copyfile.force;
// File Open Constants
/// Constant for fs.open(). Flag indicating to open a file for read-only access.
pub const O_RDONLY = std.os.O.RDONLY;
diff --git a/test/js/node/fs/fs.test.ts b/test/js/node/fs/fs.test.ts
index 3e030f609..f9ef38fe8 100644
--- a/test/js/node/fs/fs.test.ts
+++ b/test/js/node/fs/fs.test.ts
@@ -136,6 +136,35 @@ describe("copyFileSync", () => {
expect(Bun.hash(readFileSync(tempdir + "/copyFileSync.dest.blob"))).toBe(Bun.hash(buffer.buffer));
});
+ it("constants are right", () => {
+ expect(fs.constants.COPYFILE_EXCL).toBe(1);
+ expect(fs.constants.COPYFILE_FICLONE).toBe(2);
+ expect(fs.constants.COPYFILE_FICLONE_FORCE).toBe(4);
+ });
+
+ it("FICLONE option does not error ever", () => {
+ const tempdir = `${tmpdir()}/fs.test.js/${Date.now()}.FICLONE/1234/hi`;
+ expect(existsSync(tempdir)).toBe(false);
+ expect(tempdir.includes(mkdirSync(tempdir, { recursive: true })!)).toBe(true);
+
+ // that don't exist
+ copyFileSync(import.meta.path, tempdir + "/copyFileSync.js", fs.constants.COPYFILE_FICLONE);
+ copyFileSync(import.meta.path, tempdir + "/copyFileSync.js", fs.constants.COPYFILE_FICLONE);
+ copyFileSync(import.meta.path, tempdir + "/copyFileSync.js", fs.constants.COPYFILE_FICLONE);
+ });
+
+ it("COPYFILE_EXCL works", () => {
+ const tempdir = `${tmpdir()}/fs.test.js/${Date.now()}.COPYFILE_EXCL/1234/hi`;
+ expect(existsSync(tempdir)).toBe(false);
+ expect(tempdir.includes(mkdirSync(tempdir, { recursive: true })!)).toBe(true);
+
+ // that don't exist
+ copyFileSync(import.meta.path, tempdir + "/copyFileSync.js", fs.constants.COPYFILE_EXCL);
+ expect(() => {
+ copyFileSync(import.meta.path, tempdir + "/copyFileSync.js", fs.constants.COPYFILE_EXCL);
+ }).toThrow();
+ });
+
if (process.platform === "linux") {
describe("should work when copyFileRange is not available", () => {
it("on large files", () => {
@@ -212,7 +241,7 @@ describe("copyFileSync", () => {
describe("mkdirSync", () => {
it("should create a directory", () => {
- const tempdir = `${tmpdir()}/fs.test.js/${Date.now()}/1234/hi`;
+ const tempdir = `${tmpdir()}/fs.test.js/${Date.now()}.mkdirSync/1234/hi`;
expect(existsSync(tempdir)).toBe(false);
expect(tempdir.includes(mkdirSync(tempdir, { recursive: true })!)).toBe(true);
expect(existsSync(tempdir)).toBe(true);