diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 529bf6f269a..e2296f7cf27 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -1612,6 +1612,7 @@ @ cdecl -syscall wine_server_handle_to_fd(long long ptr ptr) # Unix interface +@ cdecl -syscall __wine_unix_call(int64 long ptr) @ cdecl __wine_set_unix_funcs(long ptr) @ cdecl __wine_init_unix_lib(long long ptr ptr) @ extern __wine_syscall_dispatcher diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c index ee66807997b..fb863bf17ad 100644 --- a/dlls/ntdll/unix/loader.c +++ b/dlls/ntdll/unix/loader.c @@ -1123,6 +1123,15 @@ static NTSTATUS CDECL init_unix_lib( void *module, DWORD reason, const void *ptr } +/*********************************************************************** + * __wine_unix_call + */ +NTSTATUS CDECL __wine_unix_call( UINT64 handle, unsigned int code, void *args ) +{ + return ((unixlib_entry_t*)(UINT_PTR)handle)[code]( args ); +} + + /*********************************************************************** * load_so_dll */ diff --git a/include/winternl.h b/include/winternl.h index c688cdd5bb7..4f2fcc26682 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -4561,6 +4561,9 @@ static inline PLIST_ENTRY RemoveTailList(PLIST_ENTRY le) /* Wine internal functions */ extern NTSTATUS CDECL __wine_init_unix_lib( HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out ); +extern NTSTATUS CDECL __wine_unix_call( UINT64 handle, unsigned int code, void *args ); + +typedef NTSTATUS (*unixlib_entry_t)( void *args ); /* The thread information for 16-bit threads */ /* NtCurrentTeb()->SubSystemTib points to this */