Fixed typo.
[reactos.git] / reactos / lib / kernel32 / file / rw.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: lib/kernel32/file/rw.c
5 * PURPOSE: Read/write functions
6 * PROGRAMMER: Ariadne ( ariadne@xs4all.nl)
7 * UPDATE HISTORY:
8 * Created 01/11/98
9 */
10
11 /* INCLUDES ****************************************************************/
12
13 #include <windows.h>
14 #include <ddk/ntddk.h>
15 #include <wchar.h>
16 #include <string.h>
17
18 #define NDEBUG
19 #include <kernel32/kernel32.h>
20
21 /* FUNCTIONS ****************************************************************/
22
23 WINBOOL STDCALL WriteFile(HANDLE hFile,
24 LPCVOID lpBuffer,
25 DWORD nNumberOfBytesToWrite,
26 LPDWORD lpNumberOfBytesWritten,
27 LPOVERLAPPED lpOverLapped)
28 {
29 HANDLE hEvent = NULL;
30 LARGE_INTEGER Offset;
31 NTSTATUS errCode;
32 IO_STATUS_BLOCK IIosb;
33 PIO_STATUS_BLOCK IoStatusBlock;
34 PLARGE_INTEGER ptrOffset;
35
36 DPRINT("WriteFile(hFile %x)\n",hFile);
37
38 if (lpOverLapped != NULL)
39 {
40 Offset.u.LowPart = lpOverLapped->Offset;
41 Offset.u.HighPart = lpOverLapped->OffsetHigh;
42 lpOverLapped->Internal = STATUS_PENDING;
43 hEvent = lpOverLapped->hEvent;
44 IoStatusBlock = (PIO_STATUS_BLOCK)lpOverLapped;
45 ptrOffset = &Offset;
46 }
47 else
48 {
49 ptrOffset = NULL;
50 IoStatusBlock = &IIosb;
51 Offset.QuadPart = 0;
52 }
53
54 errCode = NtWriteFile(hFile,
55 hEvent,
56 NULL,
57 NULL,
58 IoStatusBlock,
59 (PVOID)lpBuffer,
60 nNumberOfBytesToWrite,
61 ptrOffset,
62 NULL);
63 if (!NT_SUCCESS(errCode))
64 {
65 SetLastError(RtlNtStatusToDosError(errCode));
66 DPRINT("WriteFile() failed\n");
67 return FALSE;
68 }
69 if (lpNumberOfBytesWritten != NULL )
70 {
71 *lpNumberOfBytesWritten = IoStatusBlock->Information;
72 }
73 DPRINT("WriteFile() succeeded\n");
74 return(TRUE);
75 }
76
77 WINBOOL STDCALL KERNEL32_ReadFile(HANDLE hFile,
78 LPVOID lpBuffer,
79 DWORD nNumberOfBytesToRead,
80 LPDWORD lpNumberOfBytesRead,
81 LPOVERLAPPED lpOverLapped,
82 LPOVERLAPPED_COMPLETION_ROUTINE
83 lpCompletionRoutine)
84 {
85 HANDLE hEvent = NULL;
86 LARGE_INTEGER Offset;
87 NTSTATUS errCode;
88 IO_STATUS_BLOCK IIosb;
89 PIO_STATUS_BLOCK IoStatusBlock;
90 PLARGE_INTEGER ptrOffset;
91
92 if (lpOverLapped != NULL)
93 {
94 Offset.u.LowPart = lpOverLapped->Offset;
95 Offset.u.HighPart = lpOverLapped->OffsetHigh;
96 lpOverLapped->Internal = STATUS_PENDING;
97 hEvent = lpOverLapped->hEvent;
98 IoStatusBlock = (PIO_STATUS_BLOCK)lpOverLapped;
99 ptrOffset = &Offset;
100 }
101 else
102 {
103 ptrOffset = NULL;
104 IoStatusBlock = &IIosb;
105 }
106
107 errCode = NtReadFile(hFile,
108 hEvent,
109 (PIO_APC_ROUTINE)lpCompletionRoutine,
110 NULL,
111 IoStatusBlock,
112 lpBuffer,
113 nNumberOfBytesToRead,
114 ptrOffset,
115 NULL);
116
117 if (errCode != STATUS_PENDING && lpNumberOfBytesRead != NULL)
118 {
119 *lpNumberOfBytesRead = IoStatusBlock->Information;
120 }
121
122 if (!NT_SUCCESS(errCode))
123 {
124 SetLastError(RtlNtStatusToDosError(errCode));
125 return(FALSE);
126 }
127 return(TRUE);
128 }
129
130 WINBOOL STDCALL ReadFile(HANDLE hFile,
131 LPVOID lpBuffer,
132 DWORD nNumberOfBytesToRead,
133 LPDWORD lpNumberOfBytesRead,
134 LPOVERLAPPED lpOverLapped)
135 {
136 return(KERNEL32_ReadFile(hFile,
137 lpBuffer,
138 nNumberOfBytesToRead,
139 lpNumberOfBytesRead,
140 lpOverLapped,
141 NULL));
142 }
143
144 WINBOOL STDCALL ReadFileEx(HANDLE hFile,
145 LPVOID lpBuffer,
146 DWORD nNumberOfBytesToRead,
147 LPOVERLAPPED lpOverLapped,
148 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
149 {
150 return(KERNEL32_ReadFile(hFile,
151 lpBuffer,
152 nNumberOfBytesToRead,
153 NULL,
154 lpOverLapped,
155 lpCompletionRoutine));
156 }