Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
b82782a9
Commit
b82782a9
authored
Apr 10, 2017
by
Jacek Caban
Committed by
Alexandre Julliard
Apr 11, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ntdll: Store async callback in async_fileio struct.
Signed-off-by:
Jacek Caban
<
jacek@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
f6cd8175
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
15 additions
and
10 deletions
+15
-10
file.c
dlls/ntdll/file.c
+15
-10
No files found.
dlls/ntdll/file.c
View file @
b82782a9
...
@@ -346,8 +346,11 @@ NTSTATUS WINAPI NtCreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATTRIB
...
@@ -346,8 +346,11 @@ NTSTATUS WINAPI NtCreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATTRIB
* Asynchronous file I/O *
* Asynchronous file I/O *
*/
*/
typedef
NTSTATUS
async_callback_t
(
void
*
user
,
IO_STATUS_BLOCK
*
io
,
NTSTATUS
status
,
void
**
apc
,
void
**
arg
);
struct
async_fileio
struct
async_fileio
{
{
async_callback_t
*
callback
;
/* must be the first field */
struct
async_fileio
*
next
;
struct
async_fileio
*
next
;
HANDLE
handle
;
HANDLE
handle
;
PIO_APC_ROUTINE
apc
;
PIO_APC_ROUTINE
apc
;
...
@@ -391,7 +394,8 @@ static void release_fileio( struct async_fileio *io )
...
@@ -391,7 +394,8 @@ static void release_fileio( struct async_fileio *io )
}
}
}
}
static
struct
async_fileio
*
alloc_fileio
(
DWORD
size
,
HANDLE
handle
,
PIO_APC_ROUTINE
apc
,
void
*
arg
)
static
struct
async_fileio
*
alloc_fileio
(
DWORD
size
,
async_callback_t
callback
,
HANDLE
handle
,
PIO_APC_ROUTINE
apc
,
void
*
arg
)
{
{
/* first free remaining previous fileinfos */
/* first free remaining previous fileinfos */
...
@@ -406,9 +410,10 @@ static struct async_fileio *alloc_fileio( DWORD size, HANDLE handle, PIO_APC_ROU
...
@@ -406,9 +410,10 @@ static struct async_fileio *alloc_fileio( DWORD size, HANDLE handle, PIO_APC_ROU
if
((
io
=
RtlAllocateHeap
(
GetProcessHeap
(),
0
,
size
)))
if
((
io
=
RtlAllocateHeap
(
GetProcessHeap
(),
0
,
size
)))
{
{
io
->
handle
=
handle
;
io
->
callback
=
callback
;
io
->
apc
=
apc
;
io
->
handle
=
handle
;
io
->
apc_arg
=
arg
;
io
->
apc
=
apc
;
io
->
apc_arg
=
arg
;
}
}
return
io
;
return
io
;
}
}
...
@@ -558,7 +563,7 @@ static NTSTATUS server_read_file( HANDLE handle, HANDLE event, PIO_APC_ROUTINE a
...
@@ -558,7 +563,7 @@ static NTSTATUS server_read_file( HANDLE handle, HANDLE event, PIO_APC_ROUTINE a
ULONG
options
;
ULONG
options
;
ULONG_PTR
cvalue
=
apc
?
0
:
(
ULONG_PTR
)
apc_context
;
ULONG_PTR
cvalue
=
apc
?
0
:
(
ULONG_PTR
)
apc_context
;
if
(
!
(
async
=
(
struct
async_irp
*
)
alloc_fileio
(
sizeof
(
*
async
),
handle
,
apc
,
apc_context
)))
if
(
!
(
async
=
(
struct
async_irp
*
)
alloc_fileio
(
sizeof
(
*
async
),
irp_completion
,
handle
,
apc
,
apc_context
)))
return
STATUS_NO_MEMORY
;
return
STATUS_NO_MEMORY
;
async
->
event
=
event
;
async
->
event
=
event
;
...
@@ -605,7 +610,7 @@ static NTSTATUS server_write_file( HANDLE handle, HANDLE event, PIO_APC_ROUTINE
...
@@ -605,7 +610,7 @@ static NTSTATUS server_write_file( HANDLE handle, HANDLE event, PIO_APC_ROUTINE
ULONG
options
;
ULONG
options
;
ULONG_PTR
cvalue
=
apc
?
0
:
(
ULONG_PTR
)
apc_context
;
ULONG_PTR
cvalue
=
apc
?
0
:
(
ULONG_PTR
)
apc_context
;
if
(
!
(
async
=
(
struct
async_irp
*
)
alloc_fileio
(
sizeof
(
*
async
),
handle
,
apc
,
apc_context
)))
if
(
!
(
async
=
(
struct
async_irp
*
)
alloc_fileio
(
sizeof
(
*
async
),
irp_completion
,
handle
,
apc
,
apc_context
)))
return
STATUS_NO_MEMORY
;
return
STATUS_NO_MEMORY
;
async
->
event
=
event
;
async
->
event
=
event
;
...
@@ -783,7 +788,7 @@ static NTSTATUS register_async_file_read( HANDLE handle, HANDLE event,
...
@@ -783,7 +788,7 @@ static NTSTATUS register_async_file_read( HANDLE handle, HANDLE event,
struct
async_fileio_read
*
fileio
;
struct
async_fileio_read
*
fileio
;
NTSTATUS
status
;
NTSTATUS
status
;
if
(
!
(
fileio
=
(
struct
async_fileio_read
*
)
alloc_fileio
(
sizeof
(
*
fileio
),
handle
,
apc
,
apc_user
)))
if
(
!
(
fileio
=
(
struct
async_fileio_read
*
)
alloc_fileio
(
sizeof
(
*
fileio
),
FILE_AsyncReadService
,
handle
,
apc
,
apc_user
)))
return
STATUS_NO_MEMORY
;
return
STATUS_NO_MEMORY
;
fileio
->
already
=
already
;
fileio
->
already
=
already
;
...
@@ -1345,7 +1350,7 @@ NTSTATUS WINAPI NtWriteFile(HANDLE hFile, HANDLE hEvent,
...
@@ -1345,7 +1350,7 @@ NTSTATUS WINAPI NtWriteFile(HANDLE hFile, HANDLE hEvent,
{
{
struct
async_fileio_write
*
fileio
;
struct
async_fileio_write
*
fileio
;
fileio
=
(
struct
async_fileio_write
*
)
alloc_fileio
(
sizeof
(
*
fileio
),
hFile
,
apc
,
apc_user
);
fileio
=
(
struct
async_fileio_write
*
)
alloc_fileio
(
sizeof
(
*
fileio
),
FILE_AsyncWriteService
,
hFile
,
apc
,
apc_user
);
if
(
!
fileio
)
if
(
!
fileio
)
{
{
status
=
STATUS_NO_MEMORY
;
status
=
STATUS_NO_MEMORY
;
...
@@ -1539,7 +1544,7 @@ static NTSTATUS server_ioctl_file( HANDLE handle, HANDLE event,
...
@@ -1539,7 +1544,7 @@ static NTSTATUS server_ioctl_file( HANDLE handle, HANDLE event,
ULONG
options
;
ULONG
options
;
ULONG_PTR
cvalue
=
apc
?
0
:
(
ULONG_PTR
)
apc_context
;
ULONG_PTR
cvalue
=
apc
?
0
:
(
ULONG_PTR
)
apc_context
;
if
(
!
(
async
=
(
struct
async_irp
*
)
alloc_fileio
(
sizeof
(
*
async
),
handle
,
apc
,
apc_context
)))
if
(
!
(
async
=
(
struct
async_irp
*
)
alloc_fileio
(
sizeof
(
*
async
),
irp_completion
,
handle
,
apc
,
apc_context
)))
return
STATUS_NO_MEMORY
;
return
STATUS_NO_MEMORY
;
async
->
event
=
event
;
async
->
event
=
event
;
async
->
buffer
=
out_buffer
;
async
->
buffer
=
out_buffer
;
...
@@ -1961,7 +1966,7 @@ NTSTATUS WINAPI NtNotifyChangeDirectoryFile( HANDLE handle, HANDLE event, PIO_AP
...
@@ -1961,7 +1966,7 @@ NTSTATUS WINAPI NtNotifyChangeDirectoryFile( HANDLE handle, HANDLE event, PIO_AP
if
(
filter
==
0
||
(
filter
&
~
FILE_NOTIFY_ALL
))
return
STATUS_INVALID_PARAMETER
;
if
(
filter
==
0
||
(
filter
&
~
FILE_NOTIFY_ALL
))
return
STATUS_INVALID_PARAMETER
;
fileio
=
(
struct
read_changes_fileio
*
)
alloc_fileio
(
offsetof
(
struct
read_changes_fileio
,
data
[
size
]),
fileio
=
(
struct
read_changes_fileio
*
)
alloc_fileio
(
offsetof
(
struct
read_changes_fileio
,
data
[
size
]),
handle
,
apc
,
apc_context
);
read_changes_apc
,
handle
,
apc
,
apc_context
);
if
(
!
fileio
)
return
STATUS_NO_MEMORY
;
if
(
!
fileio
)
return
STATUS_NO_MEMORY
;
fileio
->
buffer
=
buffer
;
fileio
->
buffer
=
buffer
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment