Initial TigerBeetle specifics strip. All 7 tests passing.
This commit is contained in:
30
src/io.zig
Normal file
30
src/io.zig
Normal file
@ -0,0 +1,30 @@
|
||||
const std = @import("std");
|
||||
const builtin = @import("builtin");
|
||||
const assert = std.debug.assert;
|
||||
const os = std.os;
|
||||
|
||||
const FIFO = @import("fifo.zig").FIFO;
|
||||
const IO_Linux = @import("io/linux.zig").IO;
|
||||
const IO_Darwin = @import("io/darwin.zig").IO;
|
||||
const IO_Windows = @import("io/windows.zig").IO;
|
||||
|
||||
pub const IO = switch (builtin.target.os.tag) {
|
||||
.linux => IO_Linux,
|
||||
.windows => IO_Windows,
|
||||
.macos, .tvos, .watchos, .ios => IO_Darwin,
|
||||
else => @compileError("IO is not supported for platform"),
|
||||
};
|
||||
|
||||
pub fn bufferLimit(buffer_len: usize) usize {
|
||||
// Linux limits how much may be written in a `pwrite()/pread()` call, which is `0x7ffff000` on
|
||||
// both 64-bit and 32-bit systems, due to using a signed C int as the return value, as well as
|
||||
// stuffing the errno codes into the last `4096` values.
|
||||
// Darwin limits writes to `0x7fffffff` bytes, more than that returns `EINVAL`.
|
||||
// The corresponding POSIX limit is `std.math.maxInt(isize)`.
|
||||
const limit = switch (builtin.target.os.tag) {
|
||||
.linux => 0x7ffff000,
|
||||
.macos, .ios, .watchos, .tvos => std.math.maxInt(i32),
|
||||
else => std.math.maxInt(isize),
|
||||
};
|
||||
return @min(limit, buffer_len);
|
||||
}
|
||||
Reference in New Issue
Block a user