Skip to content

Commit e4f5dad

Browse files
authored
Merge pull request #19641 from The-King-of-Toasters/windows-api-refactor
Windows: Rework kernel32 apis
2 parents a57479a + 3095e83 commit e4f5dad

File tree

3 files changed

+537
-332
lines changed

3 files changed

+537
-332
lines changed

lib/std/debug.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1987,7 +1987,7 @@ pub const DebugInfo = struct {
19871987
@memcpy(name_buffer[0..4], &[_]u16{ '\\', '?', '?', '\\' });
19881988

19891989
const process_handle = windows.kernel32.GetCurrentProcess();
1990-
const len = windows.kernel32.K32GetModuleFileNameExW(
1990+
const len = windows.kernel32.GetModuleFileNameExW(
19911991
process_handle,
19921992
module.handle,
19931993
@ptrCast(&name_buffer[4]),

lib/std/os/windows.zig

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -729,8 +729,8 @@ pub const GetCurrentDirectoryError = error{
729729
/// The result is a slice of `buffer`, indexed from 0.
730730
/// The result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
731731
pub fn GetCurrentDirectory(buffer: []u8) GetCurrentDirectoryError![]u8 {
732-
var wtf16le_buf: [PATH_MAX_WIDE]u16 = undefined;
733-
const result = kernel32.GetCurrentDirectoryW(wtf16le_buf.len, &wtf16le_buf);
732+
var wtf16le_buf: [PATH_MAX_WIDE:0]u16 = undefined;
733+
const result = kernel32.GetCurrentDirectoryW(wtf16le_buf.len + 1, &wtf16le_buf);
734734
if (result == 0) {
735735
switch (GetLastError()) {
736736
else => |err| return unexpectedError(err),
@@ -1190,7 +1190,14 @@ pub fn SetFilePointerEx_CURRENT_get(handle: HANDLE) SetFilePointerError!u64 {
11901190
return @as(u64, @bitCast(result));
11911191
}
11921192

1193-
pub fn QueryObjectName(handle: HANDLE, out_buffer: []u16) ![]u16 {
1193+
pub const QueryObjectNameError = error{
1194+
AccessDenied,
1195+
InvalidHandle,
1196+
NameTooLong,
1197+
Unexpected,
1198+
};
1199+
1200+
pub fn QueryObjectName(handle: HANDLE, out_buffer: []u16) QueryObjectNameError![]u16 {
11941201
const out_buffer_aligned = mem.alignInSlice(out_buffer, @alignOf(OBJECT_NAME_INFORMATION)) orelse return error.NameTooLong;
11951202

11961203
const info = @as(*OBJECT_NAME_INFORMATION, @ptrCast(out_buffer_aligned));
@@ -2761,7 +2768,7 @@ pub fn loadWinsockExtensionFunction(comptime T: type, sock: ws2_32.SOCKET, guid:
27612768
pub fn unexpectedError(err: Win32Error) UnexpectedError {
27622769
if (std.posix.unexpected_error_tracing) {
27632770
// 614 is the length of the longest windows error description
2764-
var buf_wstr: [614]WCHAR = undefined;
2771+
var buf_wstr: [614:0]WCHAR = undefined;
27652772
const len = kernel32.FormatMessageW(
27662773
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
27672774
null,

0 commit comments

Comments
 (0)