aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bun.js/node/node_fs.zig10
-rw-r--r--src/bun.js/node/types.zig4
-rw-r--r--test/bun.js/fs.test.js7
3 files changed, 14 insertions, 7 deletions
diff --git a/src/bun.js/node/node_fs.zig b/src/bun.js/node/node_fs.zig
index f09e9b4fd..983874ea6 100644
--- a/src/bun.js/node/node_fs.zig
+++ b/src/bun.js/node/node_fs.zig
@@ -1027,14 +1027,14 @@ const Arguments = struct {
if (val.isObject()) {
if (val.getIfPropertyExists(ctx.ptr(), "flags")) |flags_| {
- flags = FileSystemFlags.fromJS(ctx, flags_, exception) orelse flags;
+ flags = FileSystemFlags.fromJS(ctx, flags_, flags, exception) orelse flags;
}
if (val.getIfPropertyExists(ctx.ptr(), "mode")) |mode_| {
mode = JSC.Node.modeFromJS(ctx, mode_, exception) orelse mode;
}
} else if (!val.isEmpty()) {
- flags = FileSystemFlags.fromJS(ctx, val, exception) orelse flags;
+ flags = FileSystemFlags.fromJS(ctx, val, flags, exception) orelse flags;
if (arguments.nextEat()) |next| {
mode = JSC.Node.modeFromJS(ctx, next, exception) orelse mode;
@@ -1508,7 +1508,7 @@ const Arguments = struct {
}
if (arg.getIfPropertyExists(ctx.ptr(), "flag")) |flag_| {
- flag = FileSystemFlags.fromJS(ctx, flag_, exception) orelse {
+ flag = FileSystemFlags.fromJS(ctx, flag_, flag, exception) orelse {
if (exception.* == null) {
JSC.throwInvalidArguments(
"Invalid flag",
@@ -1615,7 +1615,7 @@ const Arguments = struct {
}
if (arg.getIfPropertyExists(ctx.ptr(), "flag")) |flag_| {
- flag = FileSystemFlags.fromJS(ctx, flag_, exception) orelse {
+ flag = FileSystemFlags.fromJS(ctx, flag_, flag, exception) orelse {
if (exception.* == null) {
JSC.throwInvalidArguments(
"Invalid flag",
@@ -1785,7 +1785,7 @@ const Arguments = struct {
if (arguments.next()) |arg| {
arguments.eat();
if (arg.isString()) {
- mode = FileSystemFlags.fromJS(ctx, arg, exception) orelse {
+ mode = FileSystemFlags.fromJS(ctx, arg, mode, exception) orelse {
if (exception.* == null) {
JSC.throwInvalidArguments(
"Invalid mode",
diff --git a/src/bun.js/node/types.zig b/src/bun.js/node/types.zig
index 109497a93..d5ed86f4a 100644
--- a/src/bun.js/node/types.zig
+++ b/src/bun.js/node/types.zig
@@ -964,9 +964,9 @@ pub const FileSystemFlags = enum(Mode) {
const O_SYNC: Mode = 0;
const O_TRUNC: Mode = std.os.O.TRUNC;
- pub fn fromJS(ctx: JSC.C.JSContextRef, val: JSC.JSValue, exception: JSC.C.ExceptionRef) ?FileSystemFlags {
+ pub fn fromJS(ctx: JSC.C.JSContextRef, val: JSC.JSValue, default: FileSystemFlags, exception: JSC.C.ExceptionRef) ?FileSystemFlags {
if (val.isUndefinedOrNull()) {
- return @intToEnum(FileSystemFlags, O_RDONLY);
+ return default;
}
if (val.isNumber()) {
diff --git a/test/bun.js/fs.test.js b/test/bun.js/fs.test.js
index 086f19211..5e4827672 100644
--- a/test/bun.js/fs.test.js
+++ b/test/bun.js/fs.test.js
@@ -987,3 +987,10 @@ it("fs.Dirent", () => {
it("fs.Stats", () => {
expect(Stats).toBeDefined();
});
+
+it("repro 1516: can use undefined/null to specify default flag", () => {
+ const path = "/tmp/repro_1516.txt";
+ writeFileSync(path, "b", { flag: undefined });
+ expect(readFileSync(path, { encoding: "utf8", flag: null })).toBe("b");
+ rmSync(path);
+});
/bun/commit/src/bun.js/net.exports.js?h=dylan/github-api-option&id=e2231f15e8a11474e4b97b094e144a1983d7bfb0&follow=1'>Support non-classes in node:net (#1712)Gravatar Jarred Sumner 1-198/+216 2023-01-04Fixes #1716Gravatar Jarred Sumner 1-2/+2 2023-01-0410x faster `new Buffer` (#1717)Gravatar Jarred Sumner 19-520/+480 2023-01-03Update README.mdGravatar Jarred Sumner 1-2/+2 2023-01-03Add sqlite to vendorGravatar Jarred Sumner 1-4/+8 2023-01-03Fixes https://github.com/oven-sh/bun/issues/1695Gravatar Jarred Sumner 1-1/+1 2023-01-03Remove usages of std.xGravatar Jarred Sumner 7-98/+75 2023-01-03[streams] speed up `Readable` in some cases (#1708)Gravatar Alex Lam S.L 3-14/+140 2023-01-03Fix crash in BufferListGravatar Jarred Sumner 1-2/+2