Skip to content

Commit 650372b

Browse files
authored
Workaround for variadic API function support (#2458)
1 parent 2262a1b commit 650372b

File tree

24 files changed

+93
-71
lines changed

24 files changed

+93
-71
lines changed

crates/libs/bindgen/src/functions.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -207,13 +207,11 @@ fn gen_link(gen: &Gen, signature: &Signature, cfg: &Cfg) -> TokenStream {
207207

208208
let return_type = gen.return_sig(signature);
209209

210-
// TODO: blocked on https://github.com/rust-lang/rust/issues/110505
211-
// let vararg = if signature.vararg {
212-
// "...".into()
213-
// } else {
214-
// quote! {}
215-
// };
216-
let vararg = quote! {};
210+
let vararg = if gen.sys && signature.vararg {
211+
"...".into()
212+
} else {
213+
quote! {}
214+
};
217215

218216
if gen.std || !gen.namespace.starts_with("Windows.") {
219217
let library = library.trim_end_matches(".dll");
@@ -222,15 +220,15 @@ fn gen_link(gen: &Gen, signature: &Signature, cfg: &Cfg) -> TokenStream {
222220
#[link(name = #library)]
223221
extern #abi {
224222
#link_name
225-
pub fn #ident(#(#params),* #vararg) #return_type;
223+
pub fn #ident(#(#params,)* #vararg) #return_type;
226224
}
227225
}
228226
} else if let Some(library) = gen.reader.method_def_static_lib(signature.def) {
229227
quote! {
230228
#[link(name = #library, kind = "static")]
231229
extern #abi {
232230
#link_name
233-
pub fn #ident(#(#params),* #vararg) #return_type;
231+
pub fn #ident(#(#params,)* #vararg) #return_type;
234232
}
235233
}
236234
} else {

crates/libs/sys/src/Windows/Wdk/Storage/FileSystem/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -922,7 +922,7 @@
922922
#[cfg(feature = "Win32_Foundation")]
923923
::windows_targets::link!("ntdll.dll" "system" #[doc = "*Required features: `\"Wdk_Storage_FileSystem\"`, `\"Win32_Foundation\"`*"] fn RtlInitializeSid(sid : super::super::super::Win32::Foundation:: PSID, identifierauthority : *const SID_IDENTIFIER_AUTHORITY, subauthoritycount : u8) -> super::super::super::Win32::Foundation:: NTSTATUS);
924924
#[cfg(feature = "Win32_Foundation")]
925-
::windows_targets::link!("ntdll.dll" "cdecl" #[doc = "*Required features: `\"Wdk_Storage_FileSystem\"`, `\"Win32_Foundation\"`*"] fn RtlInitializeSidEx(sid : super::super::super::Win32::Foundation:: PSID, identifierauthority : *const SID_IDENTIFIER_AUTHORITY, subauthoritycount : u8) -> super::super::super::Win32::Foundation:: NTSTATUS);
925+
::windows_targets::link!("ntdll.dll" "cdecl" #[doc = "*Required features: `\"Wdk_Storage_FileSystem\"`, `\"Win32_Foundation\"`*"] fn RtlInitializeSidEx(sid : super::super::super::Win32::Foundation:: PSID, identifierauthority : *const SID_IDENTIFIER_AUTHORITY, subauthoritycount : u8, ...) -> super::super::super::Win32::Foundation:: NTSTATUS);
926926
#[cfg(all(feature = "Wdk_Foundation", feature = "Win32_Foundation"))]
927927
::windows_targets::link!("ntoskrnl.exe" "system" #[doc = "*Required features: `\"Wdk_Storage_FileSystem\"`, `\"Wdk_Foundation\"`, `\"Win32_Foundation\"`*"] fn RtlInitializeUnicodePrefix(prefixtable : *mut UNICODE_PREFIX_TABLE) -> ());
928928
#[cfg(all(feature = "Wdk_Foundation", feature = "Win32_Foundation"))]

crates/libs/sys/src/Windows/Wdk/System/SystemServices/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,9 @@
124124
#[cfg(feature = "Win32_Foundation")]
125125
::windows_targets::link!("ntoskrnl.exe" "system" #[doc = "*Required features: `\"Wdk_System_SystemServices\"`, `\"Win32_Foundation\"`*"] fn CmUnRegisterCallback(cookie : i64) -> super::super::super::Win32::Foundation:: NTSTATUS);
126126
::windows_targets::link!("ntoskrnl.exe" "system" #[doc = "*Required features: `\"Wdk_System_SystemServices\"`*"] fn DbgBreakPointWithStatus(status : u32) -> ());
127-
::windows_targets::link!("ntdll.dll" "cdecl" #[doc = "*Required features: `\"Wdk_System_SystemServices\"`*"] fn DbgPrint(format : ::windows_sys::core::PCSTR) -> u32);
128-
::windows_targets::link!("ntdll.dll" "cdecl" #[doc = "*Required features: `\"Wdk_System_SystemServices\"`*"] fn DbgPrintEx(componentid : u32, level : u32, format : ::windows_sys::core::PCSTR) -> u32);
129-
::windows_targets::link!("ntdll.dll" "cdecl" #[doc = "*Required features: `\"Wdk_System_SystemServices\"`*"] fn DbgPrintReturnControlC(format : ::windows_sys::core::PCSTR) -> u32);
127+
::windows_targets::link!("ntdll.dll" "cdecl" #[doc = "*Required features: `\"Wdk_System_SystemServices\"`*"] fn DbgPrint(format : ::windows_sys::core::PCSTR, ...) -> u32);
128+
::windows_targets::link!("ntdll.dll" "cdecl" #[doc = "*Required features: `\"Wdk_System_SystemServices\"`*"] fn DbgPrintEx(componentid : u32, level : u32, format : ::windows_sys::core::PCSTR, ...) -> u32);
129+
::windows_targets::link!("ntdll.dll" "cdecl" #[doc = "*Required features: `\"Wdk_System_SystemServices\"`*"] fn DbgPrintReturnControlC(format : ::windows_sys::core::PCSTR, ...) -> u32);
130130
::windows_targets::link!("ntdll.dll" "system" #[doc = "*Required features: `\"Wdk_System_SystemServices\"`*"] fn DbgPrompt(prompt : ::windows_sys::core::PCSTR, response : ::windows_sys::core::PSTR, length : u32) -> u32);
131131
#[cfg(feature = "Win32_Foundation")]
132132
::windows_targets::link!("ntdll.dll" "system" #[doc = "*Required features: `\"Wdk_System_SystemServices\"`, `\"Win32_Foundation\"`*"] fn DbgQueryDebugFilterState(componentid : u32, level : u32) -> super::super::super::Win32::Foundation:: NTSTATUS);

crates/libs/sys/src/Windows/Win32/Devices/AllJoyn/mod.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -332,24 +332,24 @@
332332
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_message_isglobalbroadcast(msg : alljoyn_message) -> i32);
333333
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_message_issessionless(msg : alljoyn_message) -> i32);
334334
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_message_isunreliable(msg : alljoyn_message) -> i32);
335-
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_message_parseargs(msg : alljoyn_message, signature : ::windows_sys::core::PCSTR) -> QStatus);
335+
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_message_parseargs(msg : alljoyn_message, signature : ::windows_sys::core::PCSTR, ...) -> QStatus);
336336
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_message_setendianess(endian : i8) -> ());
337337
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_message_tostring(msg : alljoyn_message, str : ::windows_sys::core::PCSTR, buf : usize) -> usize);
338338
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_array_create(size : usize) -> alljoyn_msgarg);
339339
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_array_element(arg : alljoyn_msgarg, index : usize) -> alljoyn_msgarg);
340-
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_array_get(args : alljoyn_msgarg, numargs : usize, signature : ::windows_sys::core::PCSTR) -> QStatus);
341-
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_array_set(args : alljoyn_msgarg, numargs : *mut usize, signature : ::windows_sys::core::PCSTR) -> QStatus);
342-
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_array_set_offset(args : alljoyn_msgarg, argoffset : usize, numargs : *mut usize, signature : ::windows_sys::core::PCSTR) -> QStatus);
340+
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_array_get(args : alljoyn_msgarg, numargs : usize, signature : ::windows_sys::core::PCSTR, ...) -> QStatus);
341+
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_array_set(args : alljoyn_msgarg, numargs : *mut usize, signature : ::windows_sys::core::PCSTR, ...) -> QStatus);
342+
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_array_set_offset(args : alljoyn_msgarg, argoffset : usize, numargs : *mut usize, signature : ::windows_sys::core::PCSTR, ...) -> QStatus);
343343
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_array_signature(values : alljoyn_msgarg, numvalues : usize, str : ::windows_sys::core::PCSTR, buf : usize) -> usize);
344344
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_array_tostring(args : alljoyn_msgarg, numargs : usize, str : ::windows_sys::core::PCSTR, buf : usize, indent : usize) -> usize);
345345
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_clear(arg : alljoyn_msgarg) -> ());
346346
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_clone(destination : alljoyn_msgarg, source : alljoyn_msgarg) -> ());
347347
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_copy(source : alljoyn_msgarg) -> alljoyn_msgarg);
348348
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_create() -> alljoyn_msgarg);
349-
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_create_and_set(signature : ::windows_sys::core::PCSTR) -> alljoyn_msgarg);
349+
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_create_and_set(signature : ::windows_sys::core::PCSTR, ...) -> alljoyn_msgarg);
350350
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_destroy(arg : alljoyn_msgarg) -> ());
351351
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_equal(lhv : alljoyn_msgarg, rhv : alljoyn_msgarg) -> i32);
352-
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_get(arg : alljoyn_msgarg, signature : ::windows_sys::core::PCSTR) -> QStatus);
352+
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_get(arg : alljoyn_msgarg, signature : ::windows_sys::core::PCSTR, ...) -> QStatus);
353353
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_get_array_element(arg : alljoyn_msgarg, index : usize, element : *mut alljoyn_msgarg) -> ());
354354
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_get_array_elementsignature(arg : alljoyn_msgarg, index : usize) -> ::windows_sys::core::PCSTR);
355355
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_get_array_numberofelements(arg : alljoyn_msgarg) -> usize);
@@ -376,15 +376,15 @@
376376
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_get_uint8_array(arg : alljoyn_msgarg, length : *mut usize, ay : *mut u8) -> QStatus);
377377
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_get_variant(arg : alljoyn_msgarg, v : alljoyn_msgarg) -> QStatus);
378378
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_get_variant_array(arg : alljoyn_msgarg, signature : ::windows_sys::core::PCSTR, length : *mut usize, av : *mut alljoyn_msgarg) -> QStatus);
379-
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_getdictelement(arg : alljoyn_msgarg, elemsig : ::windows_sys::core::PCSTR) -> QStatus);
379+
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_getdictelement(arg : alljoyn_msgarg, elemsig : ::windows_sys::core::PCSTR, ...) -> QStatus);
380380
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_getkey(arg : alljoyn_msgarg) -> alljoyn_msgarg);
381381
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_getmember(arg : alljoyn_msgarg, index : usize) -> alljoyn_msgarg);
382382
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_getnummembers(arg : alljoyn_msgarg) -> usize);
383383
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_gettype(arg : alljoyn_msgarg) -> alljoyn_typeid);
384384
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_getvalue(arg : alljoyn_msgarg) -> alljoyn_msgarg);
385385
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_hassignature(arg : alljoyn_msgarg, signature : ::windows_sys::core::PCSTR) -> i32);
386-
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_set(arg : alljoyn_msgarg, signature : ::windows_sys::core::PCSTR) -> QStatus);
387-
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_set_and_stabilize(arg : alljoyn_msgarg, signature : ::windows_sys::core::PCSTR) -> QStatus);
386+
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_set(arg : alljoyn_msgarg, signature : ::windows_sys::core::PCSTR, ...) -> QStatus);
387+
::windows_targets::link!("msajapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_set_and_stabilize(arg : alljoyn_msgarg, signature : ::windows_sys::core::PCSTR, ...) -> QStatus);
388388
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_set_bool(arg : alljoyn_msgarg, b : i32) -> QStatus);
389389
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_set_bool_array(arg : alljoyn_msgarg, length : usize, ab : *mut i32) -> QStatus);
390390
::windows_targets::link!("msajapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_AllJoyn\"`*"] fn alljoyn_msgarg_set_double(arg : alljoyn_msgarg, d : f64) -> QStatus);

crates/libs/sys/src/Windows/Win32/Devices/DeviceAndDriverInstallation/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -921,8 +921,8 @@
921921
::windows_targets::link!("setupapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_DeviceAndDriverInstallation\"`, `\"Win32_Foundation\"`, `\"Win32_System_Diagnostics_Debug\"`*"] fn SetupVerifyInfFileA(infname : ::windows_sys::core::PCSTR, altplatforminfo : *const SP_ALTPLATFORM_INFO_V2, infsignerinfo : *mut SP_INF_SIGNER_INFO_V2_A) -> super::super::Foundation:: BOOL);
922922
#[cfg(all(feature = "Win32_Foundation", feature = "Win32_System_Diagnostics_Debug"))]
923923
::windows_targets::link!("setupapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_DeviceAndDriverInstallation\"`, `\"Win32_Foundation\"`, `\"Win32_System_Diagnostics_Debug\"`*"] fn SetupVerifyInfFileW(infname : ::windows_sys::core::PCWSTR, altplatforminfo : *const SP_ALTPLATFORM_INFO_V2, infsignerinfo : *mut SP_INF_SIGNER_INFO_V2_W) -> super::super::Foundation:: BOOL);
924-
::windows_targets::link!("setupapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_DeviceAndDriverInstallation\"`*"] fn SetupWriteTextLog(logtoken : u64, category : u32, flags : u32, messagestr : ::windows_sys::core::PCSTR) -> ());
925-
::windows_targets::link!("setupapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_DeviceAndDriverInstallation\"`*"] fn SetupWriteTextLogError(logtoken : u64, category : u32, logflags : u32, error : u32, messagestr : ::windows_sys::core::PCSTR) -> ());
924+
::windows_targets::link!("setupapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_DeviceAndDriverInstallation\"`*"] fn SetupWriteTextLog(logtoken : u64, category : u32, flags : u32, messagestr : ::windows_sys::core::PCSTR, ...) -> ());
925+
::windows_targets::link!("setupapi.dll" "cdecl" #[doc = "*Required features: `\"Win32_Devices_DeviceAndDriverInstallation\"`*"] fn SetupWriteTextLogError(logtoken : u64, category : u32, logflags : u32, error : u32, messagestr : ::windows_sys::core::PCSTR, ...) -> ());
926926
::windows_targets::link!("setupapi.dll" "system" #[doc = "*Required features: `\"Win32_Devices_DeviceAndDriverInstallation\"`*"] fn SetupWriteTextLogInfLine(logtoken : u64, flags : u32, infhandle : *const ::core::ffi::c_void, context : *const INFCONTEXT) -> ());
927927
#[cfg(feature = "Win32_Foundation")]
928928
::windows_targets::link!("newdev.dll" "system" #[doc = "*Required features: `\"Win32_Devices_DeviceAndDriverInstallation\"`, `\"Win32_Foundation\"`*"] fn UpdateDriverForPlugAndPlayDevicesA(hwndparent : super::super::Foundation:: HWND, hardwareid : ::windows_sys::core::PCSTR, fullinfpath : ::windows_sys::core::PCSTR, installflags : u32, brebootrequired : *mut super::super::Foundation:: BOOL) -> super::super::Foundation:: BOOL);

0 commit comments

Comments
 (0)