diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index bf632c4..479368c 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -14,9 +14,9 @@ jobs: uses: actions/checkout@v2 - name: Setup Zig - uses: mlugg/setup-zig@v1 + uses: mlugg/setup-zig@v2 with: - version: 0.15.2 + version: 0.17.0 - name: Build Demo run: | diff --git a/.gitignore b/.gitignore index 328e5dd..6a420b4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ .zig-cache/ zig-out/ disk.img -disk.img zig-pkg diff --git a/build.zig b/build.zig index 8dc211a..b50d9fd 100644 --- a/build.zig +++ b/build.zig @@ -217,6 +217,7 @@ pub fn build(b: *std.Build) void { .c_source_file = b.path("fatfs.h"), .target = target, .optimize = optimize, + .default_init = true, }); t.mod.addCSourceFiles(.{ .root = upstream_copy_dir, diff --git a/build.zig.zon b/build.zig.zon index 9039b03..dd3edd9 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -2,11 +2,11 @@ .name = .zfat, .fingerprint = 0x4212c7b5f54ad348, .version = "0.0.1", - .minimum_zig_version = "0.17.0-dev.1471+ff10b90bc", + .minimum_zig_version = "0.17.0", .dependencies = .{ .translate_c = .{ - .url = "git+https://codeberg.org/ziglang/translate-c#2a6613bcc09c74296d785e660fe98d2eb310d760", - .hash = "translate_c-0.0.0-Q_BUWjQ7BwAhlMt3Zf4l3Jw-y0_TOpJWgcK8rk4d0aWv", + .url = "git+https://codeberg.org/ziglang/translate-c?ref=zig-0.17.x#02ff0c523fb92a38939b04d0145c4a9602a74d56", + .hash = "translate_c-2.0.0-Q_BUWltOBwBYABF84EUL208pIFeUIwbBs29FmVBaafN5", }, }, .paths = .{ @@ -15,5 +15,6 @@ "src", "test", "vendor", + "fatfs.h", }, } diff --git a/test/build.zig b/test/build.zig index eadf972..3d265a2 100644 --- a/test/build.zig +++ b/test/build.zig @@ -28,12 +28,14 @@ pub fn build(b: *std.Build) void { const op_tester = b.addExecutable(.{ .name = "zfat-op-tester", - .target = target, - .optimize = optimize, - .root_source_file = b.path("op_tester.zig"), + .root_module = b.createModule(.{ + .target = target, + .optimize = optimize, + .root_source_file = b.path("op_tester.zig"), + .link_libc = true, + }), }); op_tester.root_module.addImport("zfat", zfat_mod); - op_tester.linkLibC(); b.installArtifact(op_tester); } diff --git a/test/op_tester.zig b/test/op_tester.zig index 081047b..e471498 100644 --- a/test/op_tester.zig +++ b/test/op_tester.zig @@ -9,9 +9,9 @@ const zfat = @import("zfat"); var global_fs: [5]zfat.FileSystem = undefined; // requires pointer stability -var ramdisks = [1]RamDisk{.{}} ** 5; +var ramdisks: [5]RamDisk = @splat(.{}); -pub const std_options = std.Options{ +pub const std_options: std.Options = .{ .log_level = .info, }; @@ -242,7 +242,11 @@ fn writeFile(path: zfat.Path, contents: []const u8) !void { var file = try zfat.File.create(path); defer file.close(); - try file.writer().writeAll(contents); + var buff: [1024]u8 = undefined; + var file_writer = file.writer(&buff); + + try file_writer.writer.writeAll(contents); + try file_writer.writer.flush(); } pub const RamDisk = struct { @@ -257,6 +261,10 @@ pub const RamDisk = struct { }, sectors: [][sector_size]u8 = &.{}, + fn sectorsBytes(self: *RamDisk) []u8 { + return std.mem.sliceAsBytes(self.sectors); + } + pub fn init(rd: *RamDisk, sector_count: usize) !void { rd.* = .{}; rd.sectors = try std.heap.page_allocator.alloc([sector_size]u8, sector_count); @@ -271,7 +279,7 @@ pub const RamDisk = struct { pub fn getStatus(interface: *zfat.Disk) zfat.Disk.Status { const self: *RamDisk = @fieldParentPtr("interface", interface); - return zfat.Disk.Status{ + return .{ .initialized = (self.sectors.len > 0), .disk_present = true, .write_protected = false, @@ -288,9 +296,13 @@ pub const RamDisk = struct { std.log.debug("read({*}, {}, {})", .{ buff, sector, count }); - var sectors = std.io.fixedBufferStream(std.mem.sliceAsBytes(self.sectors)); - sectors.seekTo(sector * sector_size) catch return error.IoError; - sectors.reader().readNoEof(buff[0 .. sector_size * count]) catch return error.IoError; + const bytes = sector_size * count; + const start = sector * sector_size; + const disk = self.sectorsBytes(); + if (start > disk.len) return error.IoError; + + var sectors = std.Io.Reader.fixed(disk[start..]); + sectors.readSliceAll(buff[0..bytes]) catch return error.IoError; } pub fn write(interface: *zfat.Disk, buff: [*]const u8, sector: zfat.LBA, count: c_uint) zfat.Disk.Error!void { @@ -298,9 +310,13 @@ pub const RamDisk = struct { std.log.debug("write({*}, {}, {})", .{ buff, sector, count }); - var sectors = std.io.fixedBufferStream(std.mem.sliceAsBytes(self.sectors)); - sectors.seekTo(sector * sector_size) catch return error.IoError; - sectors.writer().writeAll(buff[0 .. sector_size * count]) catch return error.IoError; + const bytes = sector_size * count; + const start = sector * sector_size; + const disk = self.sectorsBytes(); + if (start > disk.len) return error.IoError; + + var sectors = std.Io.Writer.fixed(disk[start..]); + sectors.writeAll(buff[0..bytes]) catch return error.IoError; } pub fn ioctl(interface: *zfat.Disk, cmd: zfat.IoCtl, buff: [*]u8) zfat.Disk.Error!void {