From 42a7320388ed09a4fac5c511be7858f0249e0594 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Thu, 30 Nov 2000 18:51:58 +0000 Subject: [PATCH] Export the wine server functions from ntdll. --- dlls/ntdll/ntdll.spec | 5 +++++ include/server.h | 40 +++++++++++----------------------------- scheduler/client.c | 22 ++++++++++++---------- 3 files changed, 28 insertions(+), 39 deletions(-) diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index f68a2011001..e11dbee689a 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -1026,3 +1026,8 @@ debug_channels (aspi atom cdrom console ddraw debug delayhlp dll dosfs dosmem # Command-line @ cdecl __wine_get_main_args(ptr) __wine_get_main_args + +# Server interface +@ cdecl -norelay wine_server_call(long) wine_server_call +@ cdecl -norelay wine_server_alloc_req(long long) wine_server_alloc_req +@ cdecl -norelay __wine_server_exception_handler(ptr ptr ptr ptr) __wine_server_exception_handler diff --git a/include/server.h b/include/server.h index c543e85912a..e89cf9a319d 100644 --- a/include/server.h +++ b/include/server.h @@ -1616,12 +1616,16 @@ struct server_buffer_info /* client communication functions */ -extern unsigned int server_call_noerr( enum request req ); +extern unsigned int wine_server_call( enum request req ); extern unsigned int server_call_fd( enum request req, int fd_out, int *fd_in ); extern void server_protocol_error( const char *err, ... ) WINE_NORETURN; -extern void *server_alloc_req( size_t fixed_size, size_t var_size ); +extern void *wine_server_alloc_req( size_t fixed_size, size_t var_size ); extern const char *get_config_dir(void); +/* compatibility macros */ +#define server_alloc_req(f,v) wine_server_alloc_req(f,v) +#define server_call_noerr(req) wine_server_call(req) + /* get a pointer to the request buffer */ static inline void WINE_UNUSED *get_req_buffer(void) { @@ -1635,35 +1639,13 @@ static inline int WINE_UNUSED server_remaining( const void *ptr ) } /* do a server call and set the last error code */ -static inline int server_call( enum request req ) +inline static unsigned int server_call( enum request req ) { - unsigned int res = server_call_noerr( req ); + unsigned int res = wine_server_call( req ); if (res) SetLastError( RtlNtStatusToDosError(res) ); return res; } -/* copy a Unicode string to the server buffer */ -static inline void server_strcpyW( WCHAR *dst, const WCHAR *src ) -{ - if (src) - { - WCHAR *end = (WCHAR *)NtCurrentTeb()->buffer_info - 1; - while ((dst < end) && *src) *dst++ = *src++; - } - *dst = 0; -} - -/* copy and convert an ASCII string to the server buffer */ -static inline void server_strcpyAtoW( WCHAR *dst, const char *src ) -{ - if (src) - { - WCHAR *end = (WCHAR *)NtCurrentTeb()->buffer_info - 1; - while ((dst < end) && *src) *dst++ = (WCHAR)(unsigned char)*src++; - } - *dst = 0; -} - /* get a pointer to the variable part of the request */ inline static void *server_data_ptr( const void *req ) { @@ -1679,8 +1661,8 @@ inline static size_t server_data_size( const void *req ) /* exception support for server calls */ -extern DWORD server_exception_handler( PEXCEPTION_RECORD record, EXCEPTION_FRAME *frame, - CONTEXT *context, EXCEPTION_FRAME **pdispatcher ); +extern DWORD __wine_server_exception_handler( PEXCEPTION_RECORD record, EXCEPTION_FRAME *frame, + CONTEXT *context, EXCEPTION_FRAME **pdispatcher ); struct __server_exception_frame { @@ -1691,7 +1673,7 @@ struct __server_exception_frame #define SERVER_START_REQ \ do { \ struct __server_exception_frame __f; \ - __f.frame.Handler = server_exception_handler; \ + __f.frame.Handler = __wine_server_exception_handler; \ __f.info = *NtCurrentTeb()->buffer_info; \ __wine_push_frame( &__f.frame ); \ do { diff --git a/scheduler/client.c b/scheduler/client.c index b15e932b177..fc69779ba26 100644 --- a/scheduler/client.c +++ b/scheduler/client.c @@ -46,6 +46,8 @@ #define SERVERDIR "/wineserver-" /* server socket directory (hostname appended) */ #define SOCKETNAME "socket" /* name of the socket file */ +#undef server_alloc_req + /* data structure used to pass an fd with sendmsg/recvmsg */ struct cmsg_fd { @@ -112,10 +114,10 @@ static void server_perror( const char *err ) /*********************************************************************** - * server_exception_handler + * __wine_server_exception_handler */ -DWORD server_exception_handler( PEXCEPTION_RECORD record, EXCEPTION_FRAME *frame, - CONTEXT *context, EXCEPTION_FRAME **pdispatcher ) +DWORD __wine_server_exception_handler( PEXCEPTION_RECORD record, EXCEPTION_FRAME *frame, + CONTEXT *context, EXCEPTION_FRAME **pdispatcher ) { struct __server_exception_frame *server_frame = (struct __server_exception_frame *)frame; if ((record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND))) @@ -125,9 +127,9 @@ DWORD server_exception_handler( PEXCEPTION_RECORD record, EXCEPTION_FRAME *frame /*********************************************************************** - * server_alloc_req + * wine_server_alloc_req */ -void *server_alloc_req( size_t fixed_size, size_t var_size ) +void *wine_server_alloc_req( size_t fixed_size, size_t var_size ) { unsigned int pos = NtCurrentTeb()->buffer_info->cur_pos; union generic_request *req = (union generic_request *)((char *)NtCurrentTeb()->buffer + pos); @@ -287,11 +289,11 @@ static void wait_reply_fd( int *fd ) /*********************************************************************** - * server_call_noerr + * wine_server_call * * Perform a server call. */ -unsigned int server_call_noerr( enum request req ) +unsigned int wine_server_call( enum request req ) { void *req_ptr = get_req_buffer(); send_request( req, req_ptr ); @@ -586,11 +588,11 @@ int CLIENT_InitThread(void) SERVER_START_REQ { - struct init_thread_request *req = server_alloc_req( sizeof(*req), 0 ); + struct init_thread_request *req = wine_server_alloc_req( sizeof(*req), 0 ); req->unix_pid = getpid(); req->teb = teb; req->entry = teb->entry_point; - ret = server_call_noerr( REQ_INIT_THREAD ); + ret = wine_server_call( REQ_INIT_THREAD ); } SERVER_END_REQ; return ret; @@ -606,7 +608,7 @@ int CLIENT_BootDone( int debug_level ) int ret; SERVER_START_REQ { - struct boot_done_request *req = server_alloc_req( sizeof(*req), 0 ); + struct boot_done_request *req = wine_server_alloc_req( sizeof(*req), 0 ); req->debug_level = debug_level; ret = server_call( REQ_BOOT_DONE ); }