master
Andrew Kelley 2019-11-25 13:51:09 -05:00
parent 8a4c2d3b07
commit bdf3680be1
No known key found for this signature in database
GPG Key ID: 7C5F548F728501A9
15 changed files with 58 additions and 22 deletions

View File

@ -58,7 +58,7 @@ pub fn AlignedArrayList(comptime T: type, comptime alignment: ?u29) type {
return self.items[0..self.len]; return self.items[0..self.len];
} }
/// Safely access index i of the list. /// Safely access index i of the list.
pub fn at(self: Self, i: usize) T { pub fn at(self: Self, i: usize) T {
return self.toSliceConst()[i]; return self.toSliceConst()[i];
} }

View File

@ -144,6 +144,7 @@ pub const TypeInfo = union(enum) {
alignment: comptime_int, alignment: comptime_int,
child: type, child: type,
is_allowzero: bool, is_allowzero: bool,
/// The type of the sentinel is the element type of the pointer, which is /// The type of the sentinel is the element type of the pointer, which is
/// the value of the `child` field in this struct. However there is no way /// the value of the `child` field in this struct. However there is no way
/// to refer to that type here, so we use `var`. /// to refer to that type here, so we use `var`.
@ -164,6 +165,7 @@ pub const TypeInfo = union(enum) {
pub const Array = struct { pub const Array = struct {
len: comptime_int, len: comptime_int,
child: type, child: type,
/// The type of the sentinel is the element type of the array, which is /// The type of the sentinel is the element type of the array, which is
/// the value of the `child` field in this struct. However there is no way /// the value of the `child` field in this struct. However there is no way
/// to refer to that type here, so we use `var`. /// to refer to that type here, so we use `var`.

View File

@ -259,7 +259,7 @@ pub const ChildProcess = struct {
} }
fn handleWaitResult(self: *ChildProcess, status: u32) void { fn handleWaitResult(self: *ChildProcess, status: u32) void {
// TODO https://github.com/ziglang/zig/issues/3190 // TODO https://github.com/ziglang/zig/issues/3190
var term = self.cleanupAfterWait(status); var term = self.cleanupAfterWait(status);
self.term = term; self.term = term;
} }

View File

@ -5,10 +5,10 @@ const mem = std.mem;
/// memory conditions are handled correctly. /// memory conditions are handled correctly.
/// ///
/// To use this, first initialize it and get an allocator with /// To use this, first initialize it and get an allocator with
/// ///
/// `const failing_allocator = &FailingAllocator.init(<allocator>, /// `const failing_allocator = &FailingAllocator.init(<allocator>,
/// <fail_index>).allocator;` /// <fail_index>).allocator;`
/// ///
/// Then use `failing_allocator` anywhere you would have used a /// Then use `failing_allocator` anywhere you would have used a
/// different allocator. /// different allocator.
pub const FailingAllocator = struct { pub const FailingAllocator = struct {

View File

@ -1266,7 +1266,7 @@ pub fn Watch(comptime V: type) type {
if (ev.mask & os.linux.IN_CLOSE_WRITE == os.linux.IN_CLOSE_WRITE) { if (ev.mask & os.linux.IN_CLOSE_WRITE == os.linux.IN_CLOSE_WRITE) {
const basename_ptr = ptr + @sizeOf(os.linux.inotify_event); const basename_ptr = ptr + @sizeOf(os.linux.inotify_event);
// `ev.len` counts all bytes in `ev.name` including terminating null byte. // `ev.len` counts all bytes in `ev.name` including terminating null byte.
const basename_with_null = basename_ptr[0 .. ev.len]; const basename_with_null = basename_ptr[0..ev.len];
const user_value = blk: { const user_value = blk: {
const held = self.os_data.table_lock.acquire(); const held = self.os_data.table_lock.acquire();
defer held.release(); defer held.release();

View File

@ -148,7 +148,7 @@ pub fn LinearFifo(
var start = self.head + offset; var start = self.head + offset;
if (start >= self.buf.len) { if (start >= self.buf.len) {
start -= self.buf.len; start -= self.buf.len;
return self.buf[start..self.count - offset]; return self.buf[start .. self.count - offset];
} else { } else {
const end = math.min(self.head + self.count, self.buf.len); const end = math.min(self.head + self.count, self.buf.len);
return self.buf[start..end]; return self.buf[start..end];

View File

@ -74,7 +74,7 @@ else
pub fn release(self: Held) void { pub fn release(self: Held) void {
switch (@atomicRmw(State, &self.mutex.state, .Xchg, .Unlocked, .Release)) { switch (@atomicRmw(State, &self.mutex.state, .Xchg, .Unlocked, .Release)) {
.Locked => {}, .Locked => {},
.Sleeping => self.mutex.parker.unpark(@ptrCast(*const u32, &self.mutex.state)), .Sleeping => self.mutex.parker.unpark(@ptrCast(*const u32, &self.mutex.state)),
.Unlocked => unreachable, // unlocking an unlocked mutex .Unlocked => unreachable, // unlocking an unlocked mutex
else => unreachable, // should never be anything else else => unreachable, // should never be anything else
} }
@ -112,7 +112,7 @@ else
if (@atomicRmw(State, &self.state, .Xchg, .Sleeping, .Acquire) == .Unlocked) if (@atomicRmw(State, &self.state, .Xchg, .Sleeping, .Acquire) == .Unlocked)
return Held{ .mutex = self }; return Held{ .mutex = self };
state = .Sleeping; state = .Sleeping;
self.parker.park(@ptrCast(*const u32, &self.state), @enumToInt(State.Sleeping)); self.parker.park(@ptrCast(*const u32, &self.state), @enumToInt(State.Sleeping));
} }
} }
}; };

View File

@ -1362,7 +1362,7 @@ pub const StreamServer = struct {
pub const Connection = struct { pub const Connection = struct {
file: fs.File, file: fs.File,
address: Address address: Address,
}; };
/// If this function succeeds, the returned `Connection` is a caller-managed resource. /// If this function succeeds, the returned `Connection` is a caller-managed resource.

View File

@ -2753,8 +2753,8 @@ pub fn sched_getaffinity(pid: pid_t) SchedGetAffinityError!cpu_set_t {
/// Used to convert a slice to a null terminated slice on the stack. /// Used to convert a slice to a null terminated slice on the stack.
/// TODO https://github.com/ziglang/zig/issues/287 /// TODO https://github.com/ziglang/zig/issues/287
pub fn toPosixPath(file_path: []const u8) ![PATH_MAX-1:0]u8 { pub fn toPosixPath(file_path: []const u8) ![PATH_MAX - 1:0]u8 {
var path_with_null: [PATH_MAX-1:0]u8 = undefined; var path_with_null: [PATH_MAX - 1:0]u8 = undefined;
// >= rather than > to make room for the null byte // >= rather than > to make room for the null byte
if (file_path.len >= PATH_MAX) return error.NameTooLong; if (file_path.len >= PATH_MAX) return error.NameTooLong;
mem.copy(u8, &path_with_null, file_path); mem.copy(u8, &path_with_null, file_path);

View File

@ -1124,7 +1124,6 @@ pub const io_uring_params = extern struct {
pub const IORING_FEAT_SINGLE_MMAP = 1 << 0; pub const IORING_FEAT_SINGLE_MMAP = 1 << 0;
// io_uring_params.flags // io_uring_params.flags
/// io_context is polled /// io_context is polled

View File

@ -26,6 +26,7 @@ pub const HIIPackageHeader = packed struct {
/// The header found at the start of each package list. /// The header found at the start of each package list.
pub const HIIPackageList = extern struct { pub const HIIPackageList = extern struct {
package_list_guid: Guid, package_list_guid: Guid,
/// The size of the package list (in bytes), including the header. /// The size of the package list (in bytes), including the header.
package_list_length: u32, package_list_length: u32,

View File

@ -5,82 +5,120 @@ pub const success: usize = 0;
/// The image failed to load. /// The image failed to load.
pub const load_error: usize = high_bit | 1; pub const load_error: usize = high_bit | 1;
/// A parameter was incorrect. /// A parameter was incorrect.
pub const invalid_parameter: usize = high_bit | 2; pub const invalid_parameter: usize = high_bit | 2;
/// The operation is not supported. /// The operation is not supported.
pub const unsupported: usize = high_bit | 3; pub const unsupported: usize = high_bit | 3;
/// The buffer was not the proper size for the request. /// The buffer was not the proper size for the request.
pub const bad_buffer_size: usize = high_bit | 4; pub const bad_buffer_size: usize = high_bit | 4;
/// The buffer is not large enough to hold the requested data. The required buffer size is returned in the appropriate parameter when this error occurs. /// The buffer is not large enough to hold the requested data. The required buffer size is returned in the appropriate parameter when this error occurs.
pub const buffer_too_small: usize = high_bit | 5; pub const buffer_too_small: usize = high_bit | 5;
/// There is no data pending upon return. /// There is no data pending upon return.
pub const not_ready: usize = high_bit | 6; pub const not_ready: usize = high_bit | 6;
/// The physical device reported an error while attempting the operation. /// The physical device reported an error while attempting the operation.
pub const device_error: usize = high_bit | 7; pub const device_error: usize = high_bit | 7;
/// The device cannot be written to. /// The device cannot be written to.
pub const write_protected: usize = high_bit | 8; pub const write_protected: usize = high_bit | 8;
/// A resource has run out. /// A resource has run out.
pub const out_of_resources: usize = high_bit | 9; pub const out_of_resources: usize = high_bit | 9;
/// An inconstancy was detected on the file system causing the operating to fail. /// An inconstancy was detected on the file system causing the operating to fail.
pub const volume_corrupted: usize = high_bit | 10; pub const volume_corrupted: usize = high_bit | 10;
/// There is no more space on the file system. /// There is no more space on the file system.
pub const volume_full: usize = high_bit | 11; pub const volume_full: usize = high_bit | 11;
/// The device does not contain any medium to perform the operation. /// The device does not contain any medium to perform the operation.
pub const no_media: usize = high_bit | 12; pub const no_media: usize = high_bit | 12;
/// The medium in the device has changed since the last access. /// The medium in the device has changed since the last access.
pub const media_changed: usize = high_bit | 13; pub const media_changed: usize = high_bit | 13;
/// The item was not found. /// The item was not found.
pub const not_found: usize = high_bit | 14; pub const not_found: usize = high_bit | 14;
/// Access was denied. /// Access was denied.
pub const access_denied: usize = high_bit | 15; pub const access_denied: usize = high_bit | 15;
/// The server was not found or did not respond to the request. /// The server was not found or did not respond to the request.
pub const no_response: usize = high_bit | 16; pub const no_response: usize = high_bit | 16;
/// A mapping to a device does not exist. /// A mapping to a device does not exist.
pub const no_mapping: usize = high_bit | 17; pub const no_mapping: usize = high_bit | 17;
/// The timeout time expired. /// The timeout time expired.
pub const timeout: usize = high_bit | 18; pub const timeout: usize = high_bit | 18;
/// The protocol has not been started. /// The protocol has not been started.
pub const not_started: usize = high_bit | 19; pub const not_started: usize = high_bit | 19;
/// The protocol has already been started. /// The protocol has already been started.
pub const already_started: usize = high_bit | 20; pub const already_started: usize = high_bit | 20;
/// The operation was aborted. /// The operation was aborted.
pub const aborted: usize = high_bit | 21; pub const aborted: usize = high_bit | 21;
/// An ICMP error occurred during the network operation. /// An ICMP error occurred during the network operation.
pub const icmp_error: usize = high_bit | 22; pub const icmp_error: usize = high_bit | 22;
/// A TFTP error occurred during the network operation. /// A TFTP error occurred during the network operation.
pub const tftp_error: usize = high_bit | 23; pub const tftp_error: usize = high_bit | 23;
/// A protocol error occurred during the network operation. /// A protocol error occurred during the network operation.
pub const protocol_error: usize = high_bit | 24; pub const protocol_error: usize = high_bit | 24;
/// The function encountered an internal version that was incompatible with a version requested by the caller. /// The function encountered an internal version that was incompatible with a version requested by the caller.
pub const incompatible_version: usize = high_bit | 25; pub const incompatible_version: usize = high_bit | 25;
/// The function was not performed due to a security violation. /// The function was not performed due to a security violation.
pub const security_violation: usize = high_bit | 26; pub const security_violation: usize = high_bit | 26;
/// A CRC error was detected. /// A CRC error was detected.
pub const crc_error: usize = high_bit | 27; pub const crc_error: usize = high_bit | 27;
/// Beginning or end of media was reached /// Beginning or end of media was reached
pub const end_of_media: usize = high_bit | 28; pub const end_of_media: usize = high_bit | 28;
/// The end of the file was reached. /// The end of the file was reached.
pub const end_of_file: usize = high_bit | 31; pub const end_of_file: usize = high_bit | 31;
/// The language specified was invalid. /// The language specified was invalid.
pub const invalid_language: usize = high_bit | 32; pub const invalid_language: usize = high_bit | 32;
/// The security status of the data is unknown or compromised and the data must be updated or replaced to restore a valid security status. /// The security status of the data is unknown or compromised and the data must be updated or replaced to restore a valid security status.
pub const compromised_data: usize = high_bit | 33; pub const compromised_data: usize = high_bit | 33;
/// There is an address conflict address allocation /// There is an address conflict address allocation
pub const ip_address_conflict: usize = high_bit | 34; pub const ip_address_conflict: usize = high_bit | 34;
/// A HTTP error occurred during the network operation. /// A HTTP error occurred during the network operation.
pub const http_error: usize = high_bit | 35; pub const http_error: usize = high_bit | 35;
/// The string contained one or more characters that the device could not render and were skipped. /// The string contained one or more characters that the device could not render and were skipped.
pub const warn_unknown_glyph: usize = 1; pub const warn_unknown_glyph: usize = 1;
/// The handle was closed, but the file was not deleted. /// The handle was closed, but the file was not deleted.
pub const warn_delete_failure: usize = 2; pub const warn_delete_failure: usize = 2;
/// The handle was closed, but the data to the file was not flushed properly. /// The handle was closed, but the data to the file was not flushed properly.
pub const warn_write_failure: usize = 3; pub const warn_write_failure: usize = 3;
/// The resulting buffer was too small, and the data was truncated to the buffer size. /// The resulting buffer was too small, and the data was truncated to the buffer size.
pub const warn_buffer_too_small: usize = 4; pub const warn_buffer_too_small: usize = 4;
/// The data has not been updated within the timeframe set by localpolicy for this type of data. /// The data has not been updated within the timeframe set by localpolicy for this type of data.
pub const warn_stale_data: usize = 5; pub const warn_stale_data: usize = 5;
/// The resulting buffer contains UEFI-compliant file system. /// The resulting buffer contains UEFI-compliant file system.
pub const warn_file_system: usize = 6; pub const warn_file_system: usize = 6;
/// The operation will be processed across a system reset. /// The operation will be processed across a system reset.
pub const warn_reset_required: usize = 7; pub const warn_reset_required: usize = 7;

View File

@ -1,6 +1,7 @@
pub const TableHeader = extern struct { pub const TableHeader = extern struct {
signature: u64, signature: u64,
revision: u32, revision: u32,
/// The size, in bytes, of the entire table including the TableHeader /// The size, in bytes, of the entire table including the TableHeader
header_size: u32, header_size: u32,
crc32: u32, crc32: u32,

View File

@ -192,7 +192,7 @@ pub const FindFirstFileError = error{
}; };
pub fn FindFirstFile(dir_path: []const u8, find_file_data: *WIN32_FIND_DATAW) FindFirstFileError!HANDLE { pub fn FindFirstFile(dir_path: []const u8, find_file_data: *WIN32_FIND_DATAW) FindFirstFileError!HANDLE {
const dir_path_w = try sliceToPrefixedSuffixedFileW(dir_path, [_]u16{ '\\', '*'}); const dir_path_w = try sliceToPrefixedSuffixedFileW(dir_path, [_]u16{ '\\', '*' });
const handle = kernel32.FindFirstFileW(&dir_path_w, find_file_data); const handle = kernel32.FindFirstFileW(&dir_path_w, find_file_data);
if (handle == INVALID_HANDLE_VALUE) { if (handle == INVALID_HANDLE_VALUE) {
@ -932,7 +932,7 @@ pub fn wToPrefixedFileW(s: []const u16) ![PATH_MAX_WIDE:0]u16 {
// TODO https://github.com/ziglang/zig/issues/2765 // TODO https://github.com/ziglang/zig/issues/2765
var result: [PATH_MAX_WIDE:0]u16 = undefined; var result: [PATH_MAX_WIDE:0]u16 = undefined;
const start_index = if (mem.startsWith(u16, s, [_]u16{'\\', '?'})) 0 else blk: { const start_index = if (mem.startsWith(u16, s, [_]u16{ '\\', '?' })) 0 else blk: {
const prefix = [_]u16{ '\\', '?', '?', '\\' }; const prefix = [_]u16{ '\\', '?', '?', '\\' };
mem.copy(u16, result[0..], prefix); mem.copy(u16, result[0..], prefix);
break :blk prefix.len; break :blk prefix.len;
@ -942,7 +942,6 @@ pub fn wToPrefixedFileW(s: []const u16) ![PATH_MAX_WIDE:0]u16 {
mem.copy(u16, result[start_index..], s); mem.copy(u16, result[start_index..], s);
result[end_index] = 0; result[end_index] = 0;
return result; return result;
} }
pub fn sliceToPrefixedSuffixedFileW(s: []const u8, comptime suffix: []const u16) ![PATH_MAX_WIDE + suffix.len:0]u16 { pub fn sliceToPrefixedSuffixedFileW(s: []const u8, comptime suffix: []const u16) ![PATH_MAX_WIDE + suffix.len:0]u16 {

View File

@ -106,12 +106,7 @@ pub const WSAOVERLAPPED = extern struct {
hEvent: ?WSAEVENT, hEvent: ?WSAEVENT,
}; };
pub const WSAOVERLAPPED_COMPLETION_ROUTINE = extern fn ( pub const WSAOVERLAPPED_COMPLETION_ROUTINE = extern fn (dwError: DWORD, cbTransferred: DWORD, lpOverlapped: *WSAOVERLAPPED, dwFlags: DWORD) void;
dwError: DWORD,
cbTransferred: DWORD,
lpOverlapped: *WSAOVERLAPPED,
dwFlags: DWORD
) void;
pub const WSA_INVALID_HANDLE = 6; pub const WSA_INVALID_HANDLE = 6;
pub const WSA_NOT_ENOUGH_MEMORY = 8; pub const WSA_NOT_ENOUGH_MEMORY = 8;
@ -209,11 +204,12 @@ pub const WSA_QOS_ESDMODEOBJ = 11029;
pub const WSA_QOS_ESHAPERATEOBJ = 11030; pub const WSA_QOS_ESHAPERATEOBJ = 11030;
pub const WSA_QOS_RESERVED_PETYPE = 11031; pub const WSA_QOS_RESERVED_PETYPE = 11031;
/// no parameters /// no parameters
const IOC_VOID = 0x80000000; const IOC_VOID = 0x80000000;
/// copy out parameters /// copy out parameters
const IOC_OUT = 0x40000000; const IOC_OUT = 0x40000000;
/// copy in parameters /// copy in parameters
const IOC_IN = 0x80000000; const IOC_IN = 0x80000000;