@@ -550,7 +550,7 @@ pub const Compiler = struct {
550
550
// so get it here to simplify future usage.
551
551
const filename_token = node .filename .getFirstToken ();
552
552
553
- const file = self .searchForFile (filename_utf8 ) catch | err | switch (err ) {
553
+ const file_handle = self .searchForFile (filename_utf8 ) catch | err | switch (err ) {
554
554
error .OutOfMemory = > | e | return e ,
555
555
else = > | e | {
556
556
const filename_string_index = try self .diagnostics .putString (filename_utf8 );
@@ -564,13 +564,15 @@ pub const Compiler = struct {
564
564
});
565
565
},
566
566
};
567
- defer file .close ();
567
+ defer file_handle .close ();
568
+ var file_buffer : [2048 ]u8 = undefined ;
569
+ var file_reader = file_handle .reader (& file_buffer );
568
570
569
571
if (maybe_predefined_type ) | predefined_type | {
570
572
switch (predefined_type ) {
571
573
.GROUP_ICON , .GROUP_CURSOR = > {
572
574
// Check for animated icon first
573
- if (ani .isAnimatedIcon (file . deprecatedReader ())) {
575
+ if (ani .isAnimatedIcon (file_reader . interface . adaptToOldInterface ())) {
574
576
// Animated icons are just put into the resource unmodified,
575
577
// and the resource type changes to ANIICON/ANICURSOR
576
578
@@ -582,18 +584,18 @@ pub const Compiler = struct {
582
584
header .type_value .ordinal = @intFromEnum (new_predefined_type );
583
585
header .memory_flags = MemoryFlags .defaults (new_predefined_type );
584
586
header .applyMemoryFlags (node .common_resource_attributes , self .source );
585
- header .data_size = @intCast (try file . getEndPos ());
587
+ header .data_size = @intCast (try file_reader . getSize ());
586
588
587
589
try header .write (writer , self .errContext (node .id ));
588
- try file .seekTo (0 );
589
- try writeResourceData (writer , file . deprecatedReader () , header .data_size );
590
+ try file_reader .seekTo (0 );
591
+ try writeResourceData (writer , & file_reader . interface , header .data_size );
590
592
return ;
591
593
}
592
594
593
595
// isAnimatedIcon moved the file cursor so reset to the start
594
- try file .seekTo (0 );
596
+ try file_reader .seekTo (0 );
595
597
596
- const icon_dir = ico .read (self .allocator , file . deprecatedReader (), try file . getEndPos ()) catch | err | switch (err ) {
598
+ const icon_dir = ico .read (self .allocator , file_reader . interface . adaptToOldInterface (), try file_reader . getSize ()) catch | err | switch (err ) {
597
599
error .OutOfMemory = > | e | return e ,
598
600
else = > | e | {
599
601
return self .iconReadError (
@@ -671,15 +673,15 @@ pub const Compiler = struct {
671
673
try writer .writeInt (u16 , entry .type_specific_data .cursor .hotspot_y , .little );
672
674
}
673
675
674
- try file .seekTo (entry .data_offset_from_start_of_file );
675
- var header_bytes = file . deprecatedReader (). readBytesNoEof (16 ) catch {
676
+ try file_reader .seekTo (entry .data_offset_from_start_of_file );
677
+ var header_bytes = ( file_reader . interface . takeArray (16 ) catch {
676
678
return self .iconReadError (
677
679
error .UnexpectedEOF ,
678
680
filename_utf8 ,
679
681
filename_token ,
680
682
predefined_type ,
681
683
);
682
- };
684
+ }) .* ;
683
685
684
686
const image_format = ico .ImageFormat .detect (& header_bytes );
685
687
if (! image_format .validate (& header_bytes )) {
@@ -802,8 +804,8 @@ pub const Compiler = struct {
802
804
},
803
805
}
804
806
805
- try file .seekTo (entry .data_offset_from_start_of_file );
806
- try writeResourceDataNoPadding (writer , file . deprecatedReader () , entry .data_size_in_bytes );
807
+ try file_reader .seekTo (entry .data_offset_from_start_of_file );
808
+ try writeResourceDataNoPadding (writer , & file_reader . interface , entry .data_size_in_bytes );
807
809
try writeDataPadding (writer , full_data_size );
808
810
809
811
if (self .state .icon_id == std .math .maxInt (u16 )) {
@@ -857,9 +859,9 @@ pub const Compiler = struct {
857
859
},
858
860
.BITMAP = > {
859
861
header .applyMemoryFlags (node .common_resource_attributes , self .source );
860
- const file_size = try file . getEndPos ();
862
+ const file_size = try file_reader . getSize ();
861
863
862
- const bitmap_info = bmp .read (file . deprecatedReader (), file_size ) catch | err | {
864
+ const bitmap_info = bmp .read (file_reader . interface . adaptToOldInterface (), file_size ) catch | err | {
863
865
const filename_string_index = try self .diagnostics .putString (filename_utf8 );
864
866
return self .addErrorDetailsAndFail (.{
865
867
.err = .bmp_read_error ,
@@ -921,18 +923,17 @@ pub const Compiler = struct {
921
923
922
924
header .data_size = bmp_bytes_to_write ;
923
925
try header .write (writer , self .errContext (node .id ));
924
- try file .seekTo (bmp .file_header_len );
925
- const file_reader = file .deprecatedReader ();
926
- try writeResourceDataNoPadding (writer , file_reader , bitmap_info .dib_header_size );
926
+ try file_reader .seekTo (bmp .file_header_len );
927
+ try writeResourceDataNoPadding (writer , & file_reader .interface , bitmap_info .dib_header_size );
927
928
if (bitmap_info .getBitmasksByteLen () > 0 ) {
928
- try writeResourceDataNoPadding (writer , file_reader , bitmap_info .getBitmasksByteLen ());
929
+ try writeResourceDataNoPadding (writer , & file_reader . interface , bitmap_info .getBitmasksByteLen ());
929
930
}
930
931
if (bitmap_info .getExpectedPaletteByteLen () > 0 ) {
931
- try writeResourceDataNoPadding (writer , file_reader , @intCast (bitmap_info .getActualPaletteByteLen ()));
932
+ try writeResourceDataNoPadding (writer , & file_reader . interface , @intCast (bitmap_info .getActualPaletteByteLen ()));
932
933
}
933
- try file .seekTo (bitmap_info .pixel_data_offset );
934
+ try file_reader .seekTo (bitmap_info .pixel_data_offset );
934
935
const pixel_bytes : u32 = @intCast (file_size - bitmap_info .pixel_data_offset );
935
- try writeResourceDataNoPadding (writer , file_reader , pixel_bytes );
936
+ try writeResourceDataNoPadding (writer , & file_reader . interface , pixel_bytes );
936
937
try writeDataPadding (writer , bmp_bytes_to_write );
937
938
return ;
938
939
},
@@ -956,7 +957,7 @@ pub const Compiler = struct {
956
957
return ;
957
958
}
958
959
header .applyMemoryFlags (node .common_resource_attributes , self .source );
959
- const file_size = try file . getEndPos ();
960
+ const file_size = try file_reader . getSize ();
960
961
if (file_size > std .math .maxInt (u32 )) {
961
962
return self .addErrorDetailsAndFail (.{
962
963
.err = .resource_data_size_exceeds_max ,
@@ -968,8 +969,9 @@ pub const Compiler = struct {
968
969
header .data_size = @intCast (file_size );
969
970
try header .write (writer , self .errContext (node .id ));
970
971
971
- var header_slurping_reader = headerSlurpingReader (148 , file .deprecatedReader ());
972
- try writeResourceData (writer , header_slurping_reader .reader (), header .data_size );
972
+ var header_slurping_reader = headerSlurpingReader (148 , file_reader .interface .adaptToOldInterface ());
973
+ var adapter = header_slurping_reader .reader ().adaptToNewApi (&.{});
974
+ try writeResourceData (writer , & adapter .new_interface , header .data_size );
973
975
974
976
try self .state .font_dir .add (self .arena , FontDir.Font {
975
977
.id = header .name_value .ordinal ,
@@ -992,7 +994,7 @@ pub const Compiler = struct {
992
994
}
993
995
994
996
// Fallback to just writing out the entire contents of the file
995
- const data_size = try file . getEndPos ();
997
+ const data_size = try file_reader . getSize ();
996
998
if (data_size > std .math .maxInt (u32 )) {
997
999
return self .addErrorDetailsAndFail (.{
998
1000
.err = .resource_data_size_exceeds_max ,
@@ -1002,7 +1004,7 @@ pub const Compiler = struct {
1002
1004
// We now know that the data size will fit in a u32
1003
1005
header .data_size = @intCast (data_size );
1004
1006
try header .write (writer , self .errContext (node .id ));
1005
- try writeResourceData (writer , file . deprecatedReader () , header .data_size );
1007
+ try writeResourceData (writer , & file_reader . interface , header .data_size );
1006
1008
}
1007
1009
1008
1010
fn iconReadError (
@@ -1250,8 +1252,8 @@ pub const Compiler = struct {
1250
1252
const data_len : u32 = @intCast (data_buffer .items .len );
1251
1253
try self .writeResourceHeader (writer , node .id , node .type , data_len , node .common_resource_attributes , self .state .language );
1252
1254
1253
- var data_fbs = std .io . fixedBufferStream (data_buffer .items );
1254
- try writeResourceData (writer , data_fbs . reader () , data_len );
1255
+ var data_fbs : std.Io.Reader = . fixed (data_buffer .items );
1256
+ try writeResourceData (writer , & data_fbs , data_len );
1255
1257
}
1256
1258
1257
1259
pub fn writeResourceHeader (self : * Compiler , writer : anytype , id_token : Token , type_token : Token , data_size : u32 , common_resource_attributes : []Token , language : res.Language ) ! void {
@@ -1266,15 +1268,15 @@ pub const Compiler = struct {
1266
1268
try header .write (writer , self .errContext (id_token ));
1267
1269
}
1268
1270
1269
- pub fn writeResourceDataNoPadding (writer : anytype , data_reader : anytype , data_size : u32 ) ! void {
1270
- var limited_reader = std . io . limitedReader ( data_reader , data_size );
1271
-
1272
- const FifoBuffer = std . fifo . LinearFifo ( u8 , .{ . Static = 4096 }) ;
1273
- var fifo = FifoBuffer . init ( );
1274
- try fifo . pump ( limited_reader . reader (), writer );
1271
+ pub fn writeResourceDataNoPadding (writer : anytype , data_reader : * std.Io.Reader , data_size : u32 ) ! void {
1272
+ var adapted = writer . adaptToNewApi ( );
1273
+ var buffer : [ 128 ] u8 = undefined ;
1274
+ adapted . new_interface . buffer = & buffer ;
1275
+ try data_reader . streamExact ( & adapted . new_interface , data_size );
1276
+ try adapted . new_interface . flush ( );
1275
1277
}
1276
1278
1277
- pub fn writeResourceData (writer : anytype , data_reader : anytype , data_size : u32 ) ! void {
1279
+ pub fn writeResourceData (writer : anytype , data_reader : * std.Io.Reader , data_size : u32 ) ! void {
1278
1280
try writeResourceDataNoPadding (writer , data_reader , data_size );
1279
1281
try writeDataPadding (writer , data_size );
1280
1282
}
@@ -1339,8 +1341,8 @@ pub const Compiler = struct {
1339
1341
1340
1342
try header .write (writer , self .errContext (node .id ));
1341
1343
1342
- var data_fbs = std .io . fixedBufferStream (data_buffer .items );
1343
- try writeResourceData (writer , data_fbs . reader () , data_size );
1344
+ var data_fbs : std.Io.Reader = . fixed (data_buffer .items );
1345
+ try writeResourceData (writer , & data_fbs , data_size );
1344
1346
}
1345
1347
1346
1348
/// Expects `data_writer` to be a LimitedWriter limited to u32, meaning all writes to
@@ -1732,8 +1734,8 @@ pub const Compiler = struct {
1732
1734
1733
1735
try header .write (writer , self .errContext (node .id ));
1734
1736
1735
- var data_fbs = std .io . fixedBufferStream (data_buffer .items );
1736
- try writeResourceData (writer , data_fbs . reader () , data_size );
1737
+ var data_fbs : std.Io.Reader = . fixed (data_buffer .items );
1738
+ try writeResourceData (writer , & data_fbs , data_size );
1737
1739
}
1738
1740
1739
1741
fn writeDialogHeaderAndStrings (
@@ -2046,8 +2048,8 @@ pub const Compiler = struct {
2046
2048
2047
2049
try header .write (writer , self .errContext (node .id ));
2048
2050
2049
- var data_fbs = std .io . fixedBufferStream (data_buffer .items );
2050
- try writeResourceData (writer , data_fbs . reader () , data_size );
2051
+ var data_fbs : std.Io.Reader = . fixed (data_buffer .items );
2052
+ try writeResourceData (writer , & data_fbs , data_size );
2051
2053
}
2052
2054
2053
2055
/// Weight and italic carry over from previous FONT statements within a single resource,
@@ -2121,8 +2123,8 @@ pub const Compiler = struct {
2121
2123
2122
2124
try header .write (writer , self .errContext (node .id ));
2123
2125
2124
- var data_fbs = std .io . fixedBufferStream (data_buffer .items );
2125
- try writeResourceData (writer , data_fbs . reader () , data_size );
2126
+ var data_fbs : std.Io.Reader = . fixed (data_buffer .items );
2127
+ try writeResourceData (writer , & data_fbs , data_size );
2126
2128
}
2127
2129
2128
2130
/// Expects `data_writer` to be a LimitedWriter limited to u32, meaning all writes to
@@ -2386,8 +2388,8 @@ pub const Compiler = struct {
2386
2388
2387
2389
try header .write (writer , self .errContext (node .id ));
2388
2390
2389
- var data_fbs = std .io . fixedBufferStream (data_buffer .items );
2390
- try writeResourceData (writer , data_fbs . reader () , data_size );
2391
+ var data_fbs : std.Io.Reader = . fixed (data_buffer .items );
2392
+ try writeResourceData (writer , & data_fbs , data_size );
2391
2393
}
2392
2394
2393
2395
/// Expects writer to be a LimitedWriter limited to u16, meaning all writes to
@@ -3321,8 +3323,8 @@ pub const StringTable = struct {
3321
3323
// we fully control and know are numbers, so they have a fixed size.
3322
3324
try header .writeAssertNoOverflow (writer );
3323
3325
3324
- var data_fbs = std .io . fixedBufferStream (data_buffer .items );
3325
- try Compiler .writeResourceData (writer , data_fbs . reader () , data_size );
3326
+ var data_fbs : std.Io.Reader = . fixed (data_buffer .items );
3327
+ try Compiler .writeResourceData (writer , & data_fbs , data_size );
3326
3328
}
3327
3329
};
3328
3330
0 commit comments