Commit f6fa72d7 authored by Alexandre Julliard's avatar Alexandre Julliard

server: Make async I/O transfer sizes always 32-bit.

parent dc7f1704
...@@ -2302,7 +2302,7 @@ static void WINAPI read_changes_user_apc( void *arg, IO_STATUS_BLOCK *io, ULONG ...@@ -2302,7 +2302,7 @@ static void WINAPI read_changes_user_apc( void *arg, IO_STATUS_BLOCK *io, ULONG
RtlFreeHeap( GetProcessHeap(), 0, info ); RtlFreeHeap( GetProcessHeap(), 0, info );
} }
static NTSTATUS read_changes_apc( void *user, PIO_STATUS_BLOCK iosb, NTSTATUS status, ULONG_PTR *total ) static NTSTATUS read_changes_apc( void *user, PIO_STATUS_BLOCK iosb, NTSTATUS status, ULONG *total )
{ {
struct read_changes_info *info = user; struct read_changes_info *info = user;
char path[PATH_MAX]; char path[PATH_MAX];
......
...@@ -334,7 +334,7 @@ NTSTATUS FILE_GetNtStatus(void) ...@@ -334,7 +334,7 @@ NTSTATUS FILE_GetNtStatus(void)
/*********************************************************************** /***********************************************************************
* FILE_AsyncReadService (INTERNAL) * FILE_AsyncReadService (INTERNAL)
*/ */
static NTSTATUS FILE_AsyncReadService(void *user, PIO_STATUS_BLOCK iosb, NTSTATUS status, ULONG_PTR *total) static NTSTATUS FILE_AsyncReadService(void *user, PIO_STATUS_BLOCK iosb, NTSTATUS status, ULONG *total)
{ {
async_fileio_read *fileio = user; async_fileio_read *fileio = user;
int fd, needs_close, result; int fd, needs_close, result;
...@@ -812,7 +812,7 @@ NTSTATUS WINAPI NtReadFileScatter( HANDLE file, HANDLE event, PIO_APC_ROUTINE ap ...@@ -812,7 +812,7 @@ NTSTATUS WINAPI NtReadFileScatter( HANDLE file, HANDLE event, PIO_APC_ROUTINE ap
/*********************************************************************** /***********************************************************************
* FILE_AsyncWriteService (INTERNAL) * FILE_AsyncWriteService (INTERNAL)
*/ */
static NTSTATUS FILE_AsyncWriteService(void *user, IO_STATUS_BLOCK *iosb, NTSTATUS status, ULONG_PTR *total) static NTSTATUS FILE_AsyncWriteService(void *user, IO_STATUS_BLOCK *iosb, NTSTATUS status, ULONG *total)
{ {
async_fileio_write *fileio = user; async_fileio_write *fileio = user;
int result, fd, needs_close; int result, fd, needs_close;
...@@ -1146,7 +1146,7 @@ struct async_ioctl ...@@ -1146,7 +1146,7 @@ struct async_ioctl
}; };
/* callback for ioctl async I/O completion */ /* callback for ioctl async I/O completion */
static NTSTATUS ioctl_completion( void *arg, IO_STATUS_BLOCK *io, NTSTATUS status ) static NTSTATUS ioctl_completion( void *arg, IO_STATUS_BLOCK *io, NTSTATUS status, ULONG *total )
{ {
struct async_ioctl *async = arg; struct async_ioctl *async = arg;
...@@ -1158,7 +1158,7 @@ static NTSTATUS ioctl_completion( void *arg, IO_STATUS_BLOCK *io, NTSTATUS statu ...@@ -1158,7 +1158,7 @@ static NTSTATUS ioctl_completion( void *arg, IO_STATUS_BLOCK *io, NTSTATUS statu
req->user_arg = async; req->user_arg = async;
wine_server_set_reply( req, async->buffer, async->size ); wine_server_set_reply( req, async->buffer, async->size );
if (!(status = wine_server_call( req ))) if (!(status = wine_server_call( req )))
io->Information = wine_server_reply_size( reply ); io->Information = *total = wine_server_reply_size( reply );
} }
SERVER_END_REQ; SERVER_END_REQ;
} }
......
...@@ -211,6 +211,7 @@ static inline struct ntdll_thread_regs *ntdll_get_thread_regs(void) ...@@ -211,6 +211,7 @@ static inline struct ntdll_thread_regs *ntdll_get_thread_regs(void)
} }
/* Completion */ /* Completion */
extern NTSTATUS NTDLL_AddCompletion( HANDLE hFile, ULONG_PTR CompletionValue, NTSTATUS CompletionStatus, ULONG_PTR Information ); extern NTSTATUS NTDLL_AddCompletion( HANDLE hFile, ULONG_PTR CompletionValue,
NTSTATUS CompletionStatus, ULONG Information );
#endif #endif
...@@ -1393,7 +1393,8 @@ NTSTATUS WINAPI NtQueryIoCompletion( HANDLE CompletionPort, IO_COMPLETION_INFORM ...@@ -1393,7 +1393,8 @@ NTSTATUS WINAPI NtQueryIoCompletion( HANDLE CompletionPort, IO_COMPLETION_INFORM
return status; return status;
} }
NTSTATUS NTDLL_AddCompletion( HANDLE hFile, ULONG_PTR CompletionValue, NTSTATUS CompletionStatus, ULONG_PTR Information ) NTSTATUS NTDLL_AddCompletion( HANDLE hFile, ULONG_PTR CompletionValue,
NTSTATUS CompletionStatus, ULONG Information )
{ {
NTSTATUS status; NTSTATUS status;
......
...@@ -1124,7 +1124,7 @@ static int WS2_recv( int fd, struct ws2_async *wsa ) ...@@ -1124,7 +1124,7 @@ static int WS2_recv( int fd, struct ws2_async *wsa )
* *
* Handler for overlapped recv() operations. * Handler for overlapped recv() operations.
*/ */
static NTSTATUS WS2_async_recv( void* user, IO_STATUS_BLOCK* iosb, NTSTATUS status, ULONG_PTR *total ) static NTSTATUS WS2_async_recv( void* user, IO_STATUS_BLOCK* iosb, NTSTATUS status, ULONG *total )
{ {
ws2_async* wsa = user; ws2_async* wsa = user;
int result = 0, fd; int result = 0, fd;
...@@ -1225,7 +1225,7 @@ static int WS2_send( int fd, struct ws2_async *wsa ) ...@@ -1225,7 +1225,7 @@ static int WS2_send( int fd, struct ws2_async *wsa )
* *
* Handler for overlapped send() operations. * Handler for overlapped send() operations.
*/ */
static NTSTATUS WS2_async_send(void* user, IO_STATUS_BLOCK* iosb, NTSTATUS status, ULONG_PTR *total ) static NTSTATUS WS2_async_send(void* user, IO_STATUS_BLOCK* iosb, NTSTATUS status, ULONG *total )
{ {
ws2_async* wsa = user; ws2_async* wsa = user;
int result = 0, fd; int result = 0, fd;
...@@ -1280,7 +1280,7 @@ static NTSTATUS WS2_async_send(void* user, IO_STATUS_BLOCK* iosb, NTSTATUS statu ...@@ -1280,7 +1280,7 @@ static NTSTATUS WS2_async_send(void* user, IO_STATUS_BLOCK* iosb, NTSTATUS statu
* *
* Handler for shutdown() operations on overlapped sockets. * Handler for shutdown() operations on overlapped sockets.
*/ */
static NTSTATUS WS2_async_shutdown( void* user, PIO_STATUS_BLOCK iosb, NTSTATUS status ) static NTSTATUS WS2_async_shutdown( void* user, PIO_STATUS_BLOCK iosb, NTSTATUS status, ULONG *total )
{ {
ws2_async* wsa = user; ws2_async* wsa = user;
int fd, err = 1; int fd, err = 1;
...@@ -1300,6 +1300,7 @@ static NTSTATUS WS2_async_shutdown( void* user, PIO_STATUS_BLOCK iosb, NTSTATUS ...@@ -1300,6 +1300,7 @@ static NTSTATUS WS2_async_shutdown( void* user, PIO_STATUS_BLOCK iosb, NTSTATUS
status = err ? wsaErrno() : STATUS_SUCCESS; status = err ? wsaErrno() : STATUS_SUCCESS;
break; break;
} }
*total = 0;
iosb->u.Status = status; iosb->u.Status = status;
return status; return status;
} }
...@@ -2647,7 +2648,8 @@ int WINAPI WS_select(int nfds, WS_fd_set *ws_readfds, ...@@ -2647,7 +2648,8 @@ int WINAPI WS_select(int nfds, WS_fd_set *ws_readfds,
} }
/* helper to send completion messages for client-only i/o operation case */ /* helper to send completion messages for client-only i/o operation case */
static void WS_AddCompletion( SOCKET sock, ULONG_PTR CompletionValue, NTSTATUS CompletionStatus, ULONG_PTR Information ) static void WS_AddCompletion( SOCKET sock, ULONG_PTR CompletionValue, NTSTATUS CompletionStatus,
ULONG Information )
{ {
NTSTATUS status; NTSTATUS status;
......
...@@ -273,7 +273,7 @@ typedef union ...@@ -273,7 +273,7 @@ typedef union
struct struct
{ {
enum apc_type type; enum apc_type type;
unsigned int (*func)(void*, void*, unsigned int, unsigned long *); unsigned int (*func)(void*, void*, unsigned int, unsigned int *);
void *user; void *user;
void *sb; void *sb;
unsigned int status; unsigned int status;
...@@ -358,7 +358,7 @@ typedef union ...@@ -358,7 +358,7 @@ typedef union
{ {
enum apc_type type; enum apc_type type;
unsigned int status; unsigned int status;
unsigned long total; unsigned int total;
} async_io; } async_io;
struct struct
{ {
...@@ -4227,7 +4227,7 @@ struct add_completion_request ...@@ -4227,7 +4227,7 @@ struct add_completion_request
obj_handle_t handle; obj_handle_t handle;
apc_param_t ckey; apc_param_t ckey;
apc_param_t cvalue; apc_param_t cvalue;
unsigned long information; unsigned int information;
unsigned int status; unsigned int status;
}; };
struct add_completion_reply struct add_completion_reply
...@@ -4247,7 +4247,7 @@ struct remove_completion_reply ...@@ -4247,7 +4247,7 @@ struct remove_completion_reply
struct reply_header __header; struct reply_header __header;
apc_param_t ckey; apc_param_t ckey;
apc_param_t cvalue; apc_param_t cvalue;
unsigned long information; unsigned int information;
unsigned int status; unsigned int status;
}; };
...@@ -4286,7 +4286,7 @@ struct add_fd_completion_request ...@@ -4286,7 +4286,7 @@ struct add_fd_completion_request
obj_handle_t handle; obj_handle_t handle;
apc_param_t cvalue; apc_param_t cvalue;
unsigned int status; unsigned int status;
unsigned long information; unsigned int information;
}; };
struct add_fd_completion_reply struct add_fd_completion_reply
{ {
......
...@@ -234,7 +234,7 @@ void async_set_timeout( struct async *async, timeout_t timeout, unsigned int sta ...@@ -234,7 +234,7 @@ void async_set_timeout( struct async *async, timeout_t timeout, unsigned int sta
} }
/* store the result of the client-side async callback */ /* store the result of the client-side async callback */
void async_set_result( struct object *obj, unsigned int status, unsigned long total ) void async_set_result( struct object *obj, unsigned int status, unsigned int total )
{ {
struct async *async = (struct async *)obj; struct async *async = (struct async *)obj;
......
...@@ -81,7 +81,7 @@ struct comp_msg ...@@ -81,7 +81,7 @@ struct comp_msg
struct list queue_entry; struct list queue_entry;
apc_param_t ckey; apc_param_t ckey;
apc_param_t cvalue; apc_param_t cvalue;
unsigned long information; unsigned int information;
unsigned int status; unsigned int status;
}; };
...@@ -142,7 +142,7 @@ struct completion *get_completion_obj( struct process *process, obj_handle_t han ...@@ -142,7 +142,7 @@ struct completion *get_completion_obj( struct process *process, obj_handle_t han
} }
void add_completion( struct completion *completion, apc_param_t ckey, apc_param_t cvalue, void add_completion( struct completion *completion, apc_param_t ckey, apc_param_t cvalue,
unsigned int status, unsigned long information ) unsigned int status, unsigned int information )
{ {
struct comp_msg *msg = mem_alloc( sizeof( *msg ) ); struct comp_msg *msg = mem_alloc( sizeof( *msg ) );
......
...@@ -125,7 +125,7 @@ extern struct object *create_dir_obj( struct fd *fd ); ...@@ -125,7 +125,7 @@ extern struct object *create_dir_obj( struct fd *fd );
extern struct completion *get_completion_obj( struct process *process, obj_handle_t handle, unsigned int access ); extern struct completion *get_completion_obj( struct process *process, obj_handle_t handle, unsigned int access );
extern void add_completion( struct completion *completion, apc_param_t ckey, apc_param_t cvalue, extern void add_completion( struct completion *completion, apc_param_t ckey, apc_param_t cvalue,
unsigned int status, unsigned long information ); unsigned int status, unsigned int information );
/* serial port functions */ /* serial port functions */
...@@ -138,7 +138,7 @@ extern void free_async_queue( struct async_queue *queue ); ...@@ -138,7 +138,7 @@ extern void free_async_queue( struct async_queue *queue );
extern struct async *create_async( struct thread *thread, struct async_queue *queue, extern struct async *create_async( struct thread *thread, struct async_queue *queue,
const async_data_t *data ); const async_data_t *data );
extern void async_set_timeout( struct async *async, timeout_t timeout, unsigned int status ); extern void async_set_timeout( struct async *async, timeout_t timeout, unsigned int status );
extern void async_set_result( struct object *obj, unsigned int status, unsigned long total ); extern void async_set_result( struct object *obj, unsigned int status, unsigned int total );
extern int async_waiting( struct async_queue *queue ); extern int async_waiting( struct async_queue *queue );
extern void async_terminate( struct async *async, unsigned int status ); extern void async_terminate( struct async *async, unsigned int status );
extern void async_wake_up( struct async_queue *queue, unsigned int status ); extern void async_wake_up( struct async_queue *queue, unsigned int status );
......
...@@ -289,7 +289,7 @@ typedef union ...@@ -289,7 +289,7 @@ typedef union
struct struct
{ {
enum apc_type type; /* APC_ASYNC_IO */ enum apc_type type; /* APC_ASYNC_IO */
unsigned int (*func)(void*, void*, unsigned int, unsigned long *); unsigned int (*func)(void*, void*, unsigned int, unsigned int *);
void *user; /* user pointer */ void *user; /* user pointer */
void *sb; /* status block */ void *sb; /* status block */
unsigned int status; /* I/O status */ unsigned int status; /* I/O status */
...@@ -374,7 +374,7 @@ typedef union ...@@ -374,7 +374,7 @@ typedef union
{ {
enum apc_type type; /* APC_ASYNC_IO */ enum apc_type type; /* APC_ASYNC_IO */
unsigned int status; /* new status of async operation */ unsigned int status; /* new status of async operation */
unsigned long total; /* bytes transferred */ unsigned int total; /* bytes transferred */
} async_io; } async_io;
struct struct
{ {
...@@ -3034,7 +3034,7 @@ enum message_type ...@@ -3034,7 +3034,7 @@ enum message_type
obj_handle_t handle; /* port handle */ obj_handle_t handle; /* port handle */
apc_param_t ckey; /* completion key */ apc_param_t ckey; /* completion key */
apc_param_t cvalue; /* completion value */ apc_param_t cvalue; /* completion value */
unsigned long information; /* IO_STATUS_BLOCK Information */ unsigned int information; /* IO_STATUS_BLOCK Information */
unsigned int status; /* completion result */ unsigned int status; /* completion result */
@END @END
...@@ -3045,7 +3045,7 @@ enum message_type ...@@ -3045,7 +3045,7 @@ enum message_type
@REPLY @REPLY
apc_param_t ckey; /* completion key */ apc_param_t ckey; /* completion key */
apc_param_t cvalue; /* completion value */ apc_param_t cvalue; /* completion value */
unsigned long information; /* IO_STATUS_BLOCK Information */ unsigned int information; /* IO_STATUS_BLOCK Information */
unsigned int status; /* completion result */ unsigned int status; /* completion result */
@END @END
...@@ -3071,7 +3071,7 @@ enum message_type ...@@ -3071,7 +3071,7 @@ enum message_type
obj_handle_t handle; /* async' object */ obj_handle_t handle; /* async' object */
apc_param_t cvalue; /* completion value */ apc_param_t cvalue; /* completion value */
unsigned int status; /* completion status */ unsigned int status; /* completion status */
unsigned long information; /* IO_STATUS_BLOCK Information */ unsigned int information; /* IO_STATUS_BLOCK Information */
@END @END
......
...@@ -3745,7 +3745,7 @@ static void dump_add_completion_request( const struct add_completion_request *re ...@@ -3745,7 +3745,7 @@ static void dump_add_completion_request( const struct add_completion_request *re
fprintf( stderr, " handle=%04x,", req->handle ); fprintf( stderr, " handle=%04x,", req->handle );
fprintf( stderr, " ckey=%lx,", req->ckey ); fprintf( stderr, " ckey=%lx,", req->ckey );
fprintf( stderr, " cvalue=%lx,", req->cvalue ); fprintf( stderr, " cvalue=%lx,", req->cvalue );
fprintf( stderr, " information=%lx,", req->information ); fprintf( stderr, " information=%08x,", req->information );
fprintf( stderr, " status=%08x", req->status ); fprintf( stderr, " status=%08x", req->status );
} }
...@@ -3758,7 +3758,7 @@ static void dump_remove_completion_reply( const struct remove_completion_reply * ...@@ -3758,7 +3758,7 @@ static void dump_remove_completion_reply( const struct remove_completion_reply *
{ {
fprintf( stderr, " ckey=%lx,", req->ckey ); fprintf( stderr, " ckey=%lx,", req->ckey );
fprintf( stderr, " cvalue=%lx,", req->cvalue ); fprintf( stderr, " cvalue=%lx,", req->cvalue );
fprintf( stderr, " information=%lx,", req->information ); fprintf( stderr, " information=%08x,", req->information );
fprintf( stderr, " status=%08x", req->status ); fprintf( stderr, " status=%08x", req->status );
} }
...@@ -3784,7 +3784,7 @@ static void dump_add_fd_completion_request( const struct add_fd_completion_reque ...@@ -3784,7 +3784,7 @@ static void dump_add_fd_completion_request( const struct add_fd_completion_reque
fprintf( stderr, " handle=%04x,", req->handle ); fprintf( stderr, " handle=%04x,", req->handle );
fprintf( stderr, " cvalue=%lx,", req->cvalue ); fprintf( stderr, " cvalue=%lx,", req->cvalue );
fprintf( stderr, " status=%08x,", req->status ); fprintf( stderr, " status=%08x,", req->status );
fprintf( stderr, " information=%lx", req->information ); fprintf( stderr, " information=%08x", req->information );
} }
static void dump_get_window_layered_info_request( const struct get_window_layered_info_request *req ) static void dump_get_window_layered_info_request( const struct get_window_layered_info_request *req )
......
...@@ -29,7 +29,6 @@ my %formats = ...@@ -29,7 +29,6 @@ my %formats =
"unsigned char" => [ 1, 1, "%02x" ], "unsigned char" => [ 1, 1, "%02x" ],
"unsigned short"=> [ 2, 2, "%04x" ], "unsigned short"=> [ 2, 2, "%04x" ],
"unsigned int" => [ 4, 4, "%08x" ], "unsigned int" => [ 4, 4, "%08x" ],
"unsigned long" => [ 4, 4, "%lx" ],
"void*" => [ 4, 4, "%p" ], "void*" => [ 4, 4, "%p" ],
"data_size_t" => [ 4, 4, "%u" ], "data_size_t" => [ 4, 4, "%u" ],
"obj_handle_t" => [ 4, 4, "%04x" ], "obj_handle_t" => [ 4, 4, "%04x" ],
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment