allocRemaining() help

I am getting myself familiar to the new IO interface. and I once again hit a roadblock where I can’t break through…

const std = @import("std");
const code = @import("code");

fn load(allocator: std.mem.Allocator, filepath: []const u8) ![]u8 {
    var file = try std.fs.cwd().openFile(filepath, .{ .mode = .read_only });
    defer file.close();

    var temp: [4096]u8 = undefined;
    var reader = file.reader(temp[0..]).interface;

    const data = try reader.allocRemaining(allocator, .unlimited);
    errdefer allocator.free(data);

    std.debug.print("Bytes read: {d}\n", .{data.len});

    return data;
}

pub fn main() !void {
    const alloc = std.heap.smp_allocator;
    const data = try load(alloc, "example.zig");
    std.debug.print("{any}", .{data});
}

where is the invalid handle coming from?

PS>zig build run
error.Unexpected: GetLastError(6): The handle is invalid.

C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\os\windows.zig:1534:49: 0x7ff6d94d203b in GetFileSizeEx (code_zcu.obj)
            else => |err| return unexpectedError(err),
                                                ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\fs\File.zig:1214:42: 0x7ff6d94f13a7 in getSize (code_zcu.obj)   
                if (windows.GetFileSizeEx(r.file.handle)) |size| {
                                         ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Writer.zig:2656:51: 0x7ff6d952505a in sendFile (code_zcu.obj)
        const additional = if (file_reader.getSize()) |size| size - pos else |_| std.atomic.cache_line;      
                                                  ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Writer.zig:896:29: 0x7ff6d9520e78 in sendFile (code_zcu.obj) 
    return w.vtable.sendFile(w, file_reader, limit);
                            ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\fs\File.zig:1317:57: 0x7ff6d951ffe2 in stream (code_zcu.obj)    
            .positional, .streaming => return w.sendFile(r, limit) catch |write_err| switch (write_err) {    
                                                        ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Reader.zig:178:34: 0x7ff6d94c90e2 in stream (code_zcu.obj)   
    const n = try r.vtable.stream(r, w, limit);
                                 ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Reader.zig:322:25: 0x7ff6d951ed7d in appendRemaining (code_zcu.obj)
        const n = stream(r, &a.writer, remaining) catch |err| switch (err) {
                        ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Reader.zig:291:24: 0x7ff6d951e6af in allocRemaining (code_zcu.obj)
    try appendRemaining(r, gpa, &buffer, limit);
                       ^
C:\Users\chris\zigutor\short\error_handling\code\src\main.zig:10:43: 0x7ff6d951e4d5 in load (code_zcu.obj)   
    const data = try reader.allocRemaining(allocator, .unlimited);
                                          ^
C:\Users\chris\zigutor\short\error_handling\code\src\main.zig:20:26: 0x7ff6d951e8b1 in main (code_zcu.obj)   
    const data = try load(alloc, "example.zig");
                         ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\start.zig:443:53: 0x7ff6d951ea69 in WinStartup (code_zcu.obj)   
    std.os.windows.ntdll.RtlExitUserProcess(callMain());
                                                    ^
???:?:?: 0x7ff9712de8d6 in ??? (KERNEL32.DLL)
???:?:?: 0x7ff971e0c53b in ??? (ntdll.dll)
error: ReadFailed
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\os\windows.zig:647:36: 0x7ff6d94d2515 in ReadFile (code_zcu.obj)
                .INVALID_HANDLE => return error.NotOpenForReading,
                                   ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\fs\File.zig:849:9: 0x7ff6d94b01d4 in read (code_zcu.obj)        
        return windows.ReadFile(self.handle, buffer, null);
        ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\fs\File.zig:1535:13: 0x7ff6d9521858 in readStreaming (code_zcu.obj)
            return error.ReadFailed;
            ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\fs\File.zig:1415:34: 0x7ff6d9520dc6 in readVecStreaming (code_zcu.obj)
                io_reader.end += try readStreaming(r, io_reader.buffer[io_reader.end..]);
                                 ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\fs\File.zig:1346:47: 0x7ff6d952050d in readVec (code_zcu.obj)   
            .streaming, .streaming_reading => return readVecStreaming(r, data),
                                              ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Reader.zig:374:33: 0x7ff6d95265bf in readVec (code_zcu.obj)  
            error.ReadFailed => return error.ReadFailed,
                                ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Reader.zig:633:33: 0x7ff6d95259ea in readSliceShort (code_zcu.obj)
            error.ReadFailed => return error.ReadFailed,
                                ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Writer.zig:2660:19: 0x7ff6d952524e in sendFile (code_zcu.obj)
        const n = try file_reader.interface.readSliceShort(dest);
                  ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Writer.zig:896:5: 0x7ff6d9520ea5 in sendFile (code_zcu.obj)  
    return w.vtable.sendFile(w, file_reader, limit);
    ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\fs\File.zig:1322:29: 0x7ff6d9520322 in stream (code_zcu.obj)    
                else => |e| return e,
                            ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Reader.zig:178:15: 0x7ff6d94c9206 in stream (code_zcu.obj)   
    const n = try r.vtable.stream(r, w, limit);
              ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Reader.zig:325:33: 0x7ff6d951f075 in appendRemaining (code_zcu.obj)
            error.ReadFailed => return error.ReadFailed,
                                ^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Reader.zig:291:5: 0x7ff6d951e6db in allocRemaining (code_zcu.obj)
    try appendRemaining(r, gpa, &buffer, limit);
    ^
C:\Users\chris\zigutor\short\error_handling\code\src\main.zig:10:18: 0x7ff6d951e50c in load (code_zcu.obj)   
    const data = try reader.allocRemaining(allocator, .unlimited);
                 ^
C:\Users\chris\zigutor\short\error_handling\code\src\main.zig:20:18: 0x7ff6d951e8c9 in main (code_zcu.obj)   
    const data = try load(alloc, "example.zig");
                 ^
run
└─ run exe code failure
error: the following command exited with error code 1:
"C:\\Users\\chris\\zigutor\\short\\error_handling\\code\\zig-out\\bin\\code.exe"

Build Summary: 3/5 steps succeeded; 1 failed
run transitive failure
└─ run exe code failure

error: the following build command failed with exit code 1:
.zig-cache\o\da09ce929c94e38d9cd231fde004aeb3\build.exe C:\Users\chris\scoop\apps\zig\0.15.2\zig.exe C:\Users\chris\scoop\apps\zig\0.15.2\lib C:\Users\chris\zigutor\short\error_handling\code .zig-cache C:\Users\chris\AppData\Local\zig --seed 0xfe4f5664 -Z80bf7040c20bc44b run
Value cannot be null. (Parameter 'path2')
PS>

Thank you very much!

1 Like

Thank you very much!

1 Like