extern structstd.os.uefi.protocol.file.File[src]

Types

TypeSeekableStream[src]

Source Code

Source code
pub const SeekableStream = io.SeekableStream(*const File, SeekError, GetSeekPosError, seekTo, seekBy, getPos, getEndPos)

TypeReader[src]

Source Code

Source code
pub const Reader = io.Reader(*const File, ReadError, readFn)

TypeWriter[src]

Source Code

Source code
pub const Writer = io.Writer(*const File, WriteError, writeFn)

Fields

revision: u64
_open: *const fn (*const File, **const File, [*:0]const u16, u64, u64) callconv(cc) Status
_close: *const fn (*const File) callconv(cc) Status
_delete: *const fn (*const File) callconv(cc) Status
_read: *const fn (*const File, *usize, [*]u8) callconv(cc) Status
_write: *const fn (*const File, *usize, [*]const u8) callconv(cc) Status
_get_position: *const fn (*const File, *u64) callconv(cc) Status
_set_position: *const fn (*const File, u64) callconv(cc) Status
_get_info: *const fn (*const File, *align(8) const Guid, *const usize, [*]u8) callconv(cc) Status
_set_info: *const fn (*const File, *align(8) const Guid, usize, [*]const u8) callconv(cc) Status
_flush: *const fn (*const File) callconv(cc) Status

Values

Constantefi_file_mode_read[src]

Source Code

Source code
pub const efi_file_mode_read: u64 = 0x0000000000000001

Constantefi_file_mode_write[src]

Source Code

Source code
pub const efi_file_mode_write: u64 = 0x0000000000000002

Constantefi_file_mode_create[src]

Source Code

Source code
pub const efi_file_mode_create: u64 = 0x8000000000000000

Constantefi_file_read_only[src]

Source Code

Source code
pub const efi_file_read_only: u64 = 0x0000000000000001

Constantefi_file_hidden[src]

Source Code

Source code
pub const efi_file_hidden: u64 = 0x0000000000000002

Constantefi_file_system[src]

Source Code

Source code
pub const efi_file_system: u64 = 0x0000000000000004

Constantefi_file_reserved[src]

Source Code

Source code
pub const efi_file_reserved: u64 = 0x0000000000000008

Constantefi_file_directory[src]

Source Code

Source code
pub const efi_file_directory: u64 = 0x0000000000000010

Constantefi_file_archive[src]

Source Code

Source code
pub const efi_file_archive: u64 = 0x0000000000000020

Constantefi_file_valid_attr[src]

Source Code

Source code
pub const efi_file_valid_attr: u64 = 0x0000000000000037

Constantefi_file_position_end_of_file[src]

Source Code

Source code
pub const efi_file_position_end_of_file: u64 = 0xffffffffffffffff

Error Sets

Error SetSeekError[src]

Errors

anyerror means the error set is known only at runtime.

SeekError

Source Code

Source code
pub const SeekError = error{SeekError}

Error SetGetSeekPosError[src]

Errors

anyerror means the error set is known only at runtime.

GetSeekPosError

Source Code

Source code
pub const GetSeekPosError = error{GetSeekPosError}

Error SetReadError[src]

Errors

anyerror means the error set is known only at runtime.

ReadError

Source Code

Source code
pub const ReadError = error{ReadError}

Error SetWriteError[src]

Errors

anyerror means the error set is known only at runtime.

WriteError

Source Code

Source code
pub const WriteError = error{WriteError}

Functions

FunctionseekableStream[src]

pub fn seekableStream(self: *File) SeekableStream

Parameters

self: *File

Source Code

Source code
pub fn seekableStream(self: *File) SeekableStream {
    return .{ .context = self };
}

Functionreader[src]

pub fn reader(self: *File) Reader

Parameters

self: *File

Source Code

Source code
pub fn reader(self: *File) Reader {
    return .{ .context = self };
}

Functionwriter[src]

pub fn writer(self: *File) Writer

Parameters

self: *File

Source Code

Source code
pub fn writer(self: *File) Writer {
    return .{ .context = self };
}

Functionopen[src]

pub fn open(self: *const File, new_handle: **const File, file_name: [*:0]const u16, open_mode: u64, attributes: u64) Status

Parameters

self: *const File
new_handle: **const File
file_name: [*:0]const u16
open_mode: u64
attributes: u64

Source Code

Source code
pub fn open(self: *const File, new_handle: **const File, file_name: [*:0]const u16, open_mode: u64, attributes: u64) Status {
    return self._open(self, new_handle, file_name, open_mode, attributes);
}

Functionclose[src]

pub fn close(self: *const File) Status

Parameters

self: *const File

Source Code

Source code
pub fn close(self: *const File) Status {
    return self._close(self);
}

Functiondelete[src]

pub fn delete(self: *const File) Status

Parameters

self: *const File

Source Code

Source code
pub fn delete(self: *const File) Status {
    return self._delete(self);
}

Functionread[src]

pub fn read(self: *const File, buffer_size: *usize, buffer: [*]u8) Status

Parameters

self: *const File
buffer_size: *usize
buffer: [*]u8

Source Code

Source code
pub fn read(self: *const File, buffer_size: *usize, buffer: [*]u8) Status {
    return self._read(self, buffer_size, buffer);
}

Functionwrite[src]

pub fn write(self: *const File, buffer_size: *usize, buffer: [*]const u8) Status

Parameters

self: *const File
buffer_size: *usize
buffer: [*]const u8

Source Code

Source code
pub fn write(self: *const File, buffer_size: *usize, buffer: [*]const u8) Status {
    return self._write(self, buffer_size, buffer);
}

FunctiongetPosition[src]

pub fn getPosition(self: *const File, position: *u64) Status

Parameters

self: *const File
position: *u64

Source Code

Source code
pub fn getPosition(self: *const File, position: *u64) Status {
    return self._get_position(self, position);
}

FunctionsetPosition[src]

pub fn setPosition(self: *const File, position: u64) Status

Parameters

self: *const File
position: u64

Source Code

Source code
pub fn setPosition(self: *const File, position: u64) Status {
    return self._set_position(self, position);
}

FunctiongetInfo[src]

pub fn getInfo(self: *const File, information_type: *align(8) const Guid, buffer_size: *usize, buffer: [*]u8) Status

Parameters

self: *const File
information_type: *align(8) const Guid
buffer_size: *usize
buffer: [*]u8

Source Code

Source code
pub fn getInfo(self: *const File, information_type: *align(8) const Guid, buffer_size: *usize, buffer: [*]u8) Status {
    return self._get_info(self, information_type, buffer_size, buffer);
}

FunctionsetInfo[src]

pub fn setInfo(self: *const File, information_type: *align(8) const Guid, buffer_size: usize, buffer: [*]const u8) Status

Parameters

self: *const File
information_type: *align(8) const Guid
buffer_size: usize
buffer: [*]const u8

Source Code

Source code
pub fn setInfo(self: *const File, information_type: *align(8) const Guid, buffer_size: usize, buffer: [*]const u8) Status {
    return self._set_info(self, information_type, buffer_size, buffer);
}

Functionflush[src]

pub fn flush(self: *const File) Status

Parameters

self: *const File

Source Code

Source code
pub fn flush(self: *const File) Status {
    return self._flush(self);
}

Source Code

Source code
pub const File = extern struct {
    revision: u64,
    _open: *const fn (*const File, **const File, [*:0]const u16, u64, u64) callconv(cc) Status,
    _close: *const fn (*const File) callconv(cc) Status,
    _delete: *const fn (*const File) callconv(cc) Status,
    _read: *const fn (*const File, *usize, [*]u8) callconv(cc) Status,
    _write: *const fn (*const File, *usize, [*]const u8) callconv(cc) Status,
    _get_position: *const fn (*const File, *u64) callconv(cc) Status,
    _set_position: *const fn (*const File, u64) callconv(cc) Status,
    _get_info: *const fn (*const File, *align(8) const Guid, *const usize, [*]u8) callconv(cc) Status,
    _set_info: *const fn (*const File, *align(8) const Guid, usize, [*]const u8) callconv(cc) Status,
    _flush: *const fn (*const File) callconv(cc) Status,

    pub const SeekError = error{SeekError};
    pub const GetSeekPosError = error{GetSeekPosError};
    pub const ReadError = error{ReadError};
    pub const WriteError = error{WriteError};

    pub const SeekableStream = io.SeekableStream(*const File, SeekError, GetSeekPosError, seekTo, seekBy, getPos, getEndPos);
    pub const Reader = io.Reader(*const File, ReadError, readFn);
    pub const Writer = io.Writer(*const File, WriteError, writeFn);

    pub fn seekableStream(self: *File) SeekableStream {
        return .{ .context = self };
    }

    pub fn reader(self: *File) Reader {
        return .{ .context = self };
    }

    pub fn writer(self: *File) Writer {
        return .{ .context = self };
    }

    pub fn open(self: *const File, new_handle: **const File, file_name: [*:0]const u16, open_mode: u64, attributes: u64) Status {
        return self._open(self, new_handle, file_name, open_mode, attributes);
    }

    pub fn close(self: *const File) Status {
        return self._close(self);
    }

    pub fn delete(self: *const File) Status {
        return self._delete(self);
    }

    pub fn read(self: *const File, buffer_size: *usize, buffer: [*]u8) Status {
        return self._read(self, buffer_size, buffer);
    }

    fn readFn(self: *const File, buffer: []u8) ReadError!usize {
        var size: usize = buffer.len;
        if (.success != self.read(&size, buffer.ptr)) return ReadError.ReadError;
        return size;
    }

    pub fn write(self: *const File, buffer_size: *usize, buffer: [*]const u8) Status {
        return self._write(self, buffer_size, buffer);
    }

    fn writeFn(self: *const File, bytes: []const u8) WriteError!usize {
        var size: usize = bytes.len;
        if (.success != self.write(&size, bytes.ptr)) return WriteError.WriteError;
        return size;
    }

    pub fn getPosition(self: *const File, position: *u64) Status {
        return self._get_position(self, position);
    }

    fn getPos(self: *const File) GetSeekPosError!u64 {
        var pos: u64 = undefined;
        if (.success != self.getPosition(&pos)) return GetSeekPosError.GetSeekPosError;
        return pos;
    }

    fn getEndPos(self: *const File) GetSeekPosError!u64 {
        // preserve the old file position
        var pos: u64 = undefined;
        var end_pos: u64 = undefined;
        if (.success != self.getPosition(&pos)) return GetSeekPosError.GetSeekPosError;
        // seek to end of file to get position = file size
        if (.success != self.setPosition(efi_file_position_end_of_file)) return GetSeekPosError.GetSeekPosError;
        // get the position
        if (.success != self.getPosition(&end_pos)) return GetSeekPosError.GetSeekPosError;
        // restore the old position
        if (.success != self.setPosition(pos)) return GetSeekPosError.GetSeekPosError;
        // return the file size = position
        return end_pos;
    }

    pub fn setPosition(self: *const File, position: u64) Status {
        return self._set_position(self, position);
    }

    fn seekTo(self: *const File, pos: u64) SeekError!void {
        if (.success != self.setPosition(pos)) return SeekError.SeekError;
    }

    fn seekBy(self: *const File, offset: i64) SeekError!void {
        // save the old position and calculate the delta
        var pos: u64 = undefined;
        if (.success != self.getPosition(&pos)) return SeekError.SeekError;
        const seek_back = offset < 0;
        const amt = @abs(offset);
        if (seek_back) {
            pos += amt;
        } else {
            pos -= amt;
        }
        if (.success != self.setPosition(pos)) return SeekError.SeekError;
    }

    pub fn getInfo(self: *const File, information_type: *align(8) const Guid, buffer_size: *usize, buffer: [*]u8) Status {
        return self._get_info(self, information_type, buffer_size, buffer);
    }

    pub fn setInfo(self: *const File, information_type: *align(8) const Guid, buffer_size: usize, buffer: [*]const u8) Status {
        return self._set_info(self, information_type, buffer_size, buffer);
    }

    pub fn flush(self: *const File) Status {
        return self._flush(self);
    }

    pub const efi_file_mode_read: u64 = 0x0000000000000001;
    pub const efi_file_mode_write: u64 = 0x0000000000000002;
    pub const efi_file_mode_create: u64 = 0x8000000000000000;

    pub const efi_file_read_only: u64 = 0x0000000000000001;
    pub const efi_file_hidden: u64 = 0x0000000000000002;
    pub const efi_file_system: u64 = 0x0000000000000004;
    pub const efi_file_reserved: u64 = 0x0000000000000008;
    pub const efi_file_directory: u64 = 0x0000000000000010;
    pub const efi_file_archive: u64 = 0x0000000000000020;
    pub const efi_file_valid_attr: u64 = 0x0000000000000037;

    pub const efi_file_position_end_of_file: u64 = 0xffffffffffffffff;
}