@@ -119,6 +119,7 @@ pub fn build(b: *std.Build) void {
119
119
// .max_long_name_len = 121,
120
120
.code_page = .us ,
121
121
.@"volume-count" = @as (u32 , 1 ),
122
+ .@"sector-size" = @as (u32 , 512 ),
122
123
// .rtc = .dynamic,
123
124
.mkfs = true ,
124
125
.exfat = true ,
@@ -130,7 +131,7 @@ pub fn build(b: *std.Build) void {
130
131
.name = "mkfs.fat" ,
131
132
.target = b .host ,
132
133
.optimize = .ReleaseSafe ,
133
- .root_source_file = .{ . cwd_relative = build_root ++ "/ src/mkfs.fat.zig" } ,
134
+ .root_source_file = b . path ( " src/mkfs.fat.zig") ,
134
135
});
135
136
mkfs_fat .root_module .addImport ("fat" , zfat_mod );
136
137
mkfs_fat .linkLibC ();
@@ -305,8 +306,13 @@ pub const InitializeDiskStep = struct {
305
306
306
307
const HumanContext = std .BoundedArray (u8 , 256 );
307
308
308
- fn writeDiskImage (b : * std.Build , asking : * std.Build.Step , disk : std.fs.File , base : u64 , length : u64 , content : Content , context : * HumanContext ) ! void {
309
- try disk .seekTo (base );
309
+ const DiskImage = struct {
310
+ path : []const u8 ,
311
+ handle : * std.fs.File ,
312
+ };
313
+
314
+ fn writeDiskImage (b : * std.Build , asking : * std.Build.Step , disk : DiskImage , base : u64 , length : u64 , content : Content , context : * HumanContext ) ! void {
315
+ try disk .handle .seekTo (base );
310
316
311
317
const context_len = context .len ;
312
318
defer context .len = context_len ;
@@ -396,7 +402,7 @@ pub const InitializeDiskStep = struct {
396
402
boot_sector [0x01FE ] = 0x55 ;
397
403
boot_sector [0x01FF ] = 0xAA ;
398
404
399
- try disk .writeAll (& boot_sector );
405
+ try disk .handle . writeAll (& boot_sector );
400
406
}
401
407
402
408
{
@@ -426,23 +432,23 @@ pub const InitializeDiskStep = struct {
426
432
.fs = > | fs | {
427
433
const maker_exe = fs .executable .? .getPath2 (b , asking );
428
434
429
- try disk .sync ();
435
+ try disk .handle . sync ();
430
436
431
- const disk_image_path = switch (builtin .os .tag ) {
432
- .linux = > blk : {
433
- const self_pid = std .os .linux .getpid ();
434
- break :blk b .fmt ("/proc/{}/fd/{}" , .{ self_pid , disk .handle });
435
- },
437
+ // const disk_image_path = switch (builtin.os.tag) {
438
+ // .linux => blk: {
439
+ // const self_pid = std.os.linux.getpid();
440
+ // break :blk b.fmt("/proc/{}/fd/{}", .{ self_pid, disk.handle });
441
+ // },
436
442
437
- else = > @compileError ("TODO: Support this on other OS as well!" ),
438
- };
443
+ // else => @compileError("TODO: Support this on other OS as well!"),
444
+ // };
439
445
440
446
var argv = std .ArrayList ([]const u8 ).init (b .allocator );
441
447
defer argv .deinit ();
442
448
443
449
try argv .appendSlice (&.{
444
450
maker_exe , // exe
445
- disk_image_path , // image file
451
+ disk . path , // image file
446
452
b .fmt ("0x{X:0>8}" , .{base }), // filesystem offset (bytes)
447
453
b .fmt ("0x{X:0>8}" , .{length }), // filesystem length (bytes)
448
454
@tagName (fs .format ), // filesystem type
@@ -473,7 +479,7 @@ pub const InitializeDiskStep = struct {
473
479
// use shared access to the file:
474
480
const stdout = b .run (argv .items );
475
481
476
- try disk .sync ();
482
+ try disk .handle . sync ();
477
483
478
484
_ = stdout ;
479
485
},
@@ -490,7 +496,7 @@ pub const InitializeDiskStep = struct {
490
496
}
491
497
}
492
498
493
- fn copyFileToImage (disk : std.fs.File , max_length : u64 , dir : std.fs.Dir , path : []const u8 , context : []const u8 ) ! void {
499
+ fn copyFileToImage (disk : DiskImage , max_length : u64 , dir : std.fs.Dir , path : []const u8 , context : []const u8 ) ! void {
494
500
errdefer std .log .err ("{s}: failed to copy data to image." , .{context });
495
501
496
502
var file = try dir .openFile (path , .{});
@@ -510,11 +516,11 @@ pub const InitializeDiskStep = struct {
510
516
511
517
var pumper = IoPump .init ();
512
518
513
- try pumper .pump (file .reader (), disk .writer ());
519
+ try pumper .pump (file .reader (), disk .handle . writer ());
514
520
515
521
const padding = max_length - stat .size ;
516
522
if (padding > 0 ) {
517
- try disk .writer ().writeByteNTimes (' ' , padding );
523
+ try disk .handle . writer ().writeByteNTimes (' ' , padding );
518
524
}
519
525
}
520
526
@@ -549,7 +555,9 @@ pub const InitializeDiskStep = struct {
549
555
return ;
550
556
551
557
{
552
- var disk = try std .fs .cwd ().createFile (ids .disk_file .path .? , .{});
558
+ const disk_path = ids .disk_file .path .? ;
559
+
560
+ var disk = try std .fs .cwd ().createFile (disk_path , .{});
553
561
defer disk .close ();
554
562
555
563
try disk .seekTo (ids .size - 1 );
@@ -559,7 +567,12 @@ pub const InitializeDiskStep = struct {
559
567
var context = HumanContext {};
560
568
context .appendSliceAssumeCapacity ("disk" );
561
569
562
- try writeDiskImage (b , step , disk , 0 , ids .size , ids .content , & context );
570
+ const disk_image = DiskImage {
571
+ .path = disk_path ,
572
+ .handle = & disk ,
573
+ };
574
+
575
+ try writeDiskImage (b , step , disk_image , 0 , ids .size , ids .content , & context );
563
576
}
564
577
565
578
// if (!step.result_cached)
0 commit comments