-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Closed as not planned
Labels
questionNo questions on the issue tracker, please.No questions on the issue tracker, please.
Description
Zig Version
0.15.1
This is the zig-x86_64-linux-0.15.1.tar.xz version.
Steps to Reproduce and Observed Behavior
~/dev/y % cat test.txt
Hello, world!
~/dev/y % cat 1.zig
const std = @import("std");
pub fn main() !void {
const file = try std.fs.cwd().openFile("test.txt", .{});
defer file.close();
var buffer: [1024]u8 = undefined;
var reader = file.reader(&buffer);
const line = try reader.interface.takeDelimiterExclusive('\n');
std.debug.print("{s}\n", .{line});
}
~/dev/y % cat 2.zig
const std = @import("std");
pub fn main() !void {
const file = try std.fs.cwd().openFile("test.txt", .{});
defer file.close();
var buffer: [1024]u8 = undefined;
var reader = file.reader(&buffer).interface;
const line = try reader.takeDelimiterExclusive('\n');
std.debug.print("{s}\n", .{line});
}I have two zig files as above. They differ by whether keeping .interface a part of the reader variable, or calling it when actually using the reader.
Running zig run 1.zig works as intended. It reads the file and shows the output. However, if I run zig run 2.zig, I get the following error:
~/dev/y % zig run 1.zig
Hello, world!
~/dev/y % zig run 2.zig
error: ReadFailed
/home/yobibyte/src/zig-x86_64-linux-0.15.1/lib/std/posix.zig:891:22: 0x1091275 in read (std.zig)
.BADF => return error.NotOpenForReading, // Can be a race condition.
^
/home/yobibyte/src/zig-x86_64-linux-0.15.1/lib/std/fs/File.zig:852:5: 0x105fa9b in read (std.zig)
return posix.read(self.handle, buffer);
^
/home/yobibyte/src/zig-x86_64-linux-0.15.1/lib/std/fs/File.zig:1526:13: 0x1145bb0 in readStreaming (std.zig)
return error.ReadFailed;
^
/home/yobibyte/src/zig-x86_64-linux-0.15.1/lib/std/fs/File.zig:1331:27: 0x1142a18 in stream (std.zig)
const n = try readStreaming(r, dest);
^
/home/yobibyte/src/zig-x86_64-linux-0.15.1/lib/std/Io/Reader.zig:776:25: 0x1141123 in peekDelimiterInclusive (std.zig)
else => |e| return e,
^
/home/yobibyte/src/zig-x86_64-linux-0.15.1/lib/std/Io/Reader.zig:811:21: 0x113f136 in takeDelimiterExclusive (std.zig)
else => |e| return e,
^
/home/yobibyte/dev/y/2.zig:7:18: 0x113d573 in main (2.zig)
const line = try reader.takeDelimiterExclusive('\n');
^Is this a bug or my misunderstanding? If this is the latter, are there any docs/comments in the code I could read to understand it better?
Thanks!
Expected Behavior
I would assume that both examples produce the same output.
Metadata
Metadata
Assignees
Labels
questionNo questions on the issue tracker, please.No questions on the issue tracker, please.