Module: wine Branch: master Commit: 1239663fcb82dee80c94bd5d121914126e58b2c5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=1239663fcb82dee80c94bd5d12...
Author: Erich E. Hoover erich.e.hoover@wine-staging.com Date: Thu Apr 3 09:21:51 2014 -0600
server: Implement socket-specific ioctl() routine.
---
Makefile.in | 3 ++- server/sock.c | 26 ++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/Makefile.in b/Makefile.in index 5c163b8..b600cf7 100644 --- a/Makefile.in +++ b/Makefile.in @@ -52,7 +52,8 @@ __tooldeps__: libs/port libs/wine libs/wpp __builddeps__: __tooldeps__ include .PHONY: depend check test testclean crosstest __tooldeps__ __builddeps__
-loader server: libs/port libs/wine tools +loader: libs/port libs/wine tools +server: libs/port libs/wine tools include fonts: tools/sfnt2fon include: tools tools/widl libs/wine tools: libs/port diff --git a/server/sock.c b/server/sock.c index 7c0212e..6a75934 100644 --- a/server/sock.c +++ b/server/sock.c @@ -52,6 +52,8 @@ #include "windef.h" #include "winternl.h" #include "winerror.h" +#define USE_WS_PREFIX +#include "winsock2.h"
#include "process.h" #include "file.h" @@ -86,9 +88,6 @@ #define FD_WINE_RAW 0x80000000 #define FD_WINE_INTERNAL 0xFFFF0000
-/* Constants for WSAIoctl() */ -#define WSA_FLAG_OVERLAPPED 0x01 - struct sock { struct object obj; /* object header */ @@ -121,6 +120,8 @@ static void sock_destroy( struct object *obj ); static int sock_get_poll_events( struct fd *fd ); static void sock_poll_event( struct fd *fd, int event ); static enum server_fd_type sock_get_fd_type( struct fd *fd ); +static obj_handle_t sock_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *async, + int blocking, const void *data, data_size_t size ); static void sock_queue_async( struct fd *fd, const async_data_t *data, int type, int count ); static void sock_reselect_async( struct fd *fd, struct async_queue *queue ); static void sock_cancel_async( struct fd *fd, struct process *process, struct thread *thread, client_ptr_t iosb ); @@ -155,7 +156,7 @@ static const struct fd_ops sock_fd_ops = sock_poll_event, /* poll_event */ no_flush, /* flush */ sock_get_fd_type, /* get_fd_type */ - default_fd_ioctl, /* ioctl */ + sock_ioctl, /* ioctl */ sock_queue_async, /* queue_async */ sock_reselect_async, /* reselect_async */ sock_cancel_async /* cancel_async */ @@ -523,6 +524,23 @@ static enum server_fd_type sock_get_fd_type( struct fd *fd ) return FD_TYPE_SOCKET; }
+obj_handle_t sock_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *async_data, + int blocking, const void *data, data_size_t size ) +{ + struct sock *sock = get_fd_user( fd ); + + assert( sock->obj.ops == &sock_ops ); + + switch(code) + { + case WS_SIO_ADDRESS_LIST_CHANGE: + /* intentional fallthrough, not yet supported */ + default: + set_error( STATUS_NOT_SUPPORTED ); + return 0; + } +} + static void sock_queue_async( struct fd *fd, const async_data_t *data, int type, int count ) { struct sock *sock = get_fd_user( fd );