Don't return from overlapped ReadFile on EAGAIN and other non-fatal
[wine/gsoc_dplay.git] / dlls / imagehlp / modify.c
blob31c62cb36f2fec84e7a588fec323046e2ca36ec2
1 /*
2 * IMAGEHLP library
4 * Copyright 1998 Patrik Stridvall
5 */
7 #include "winbase.h"
8 #include "winerror.h"
9 #include "windef.h"
10 #include "debugtools.h"
11 #include "imagehlp.h"
13 DEFAULT_DEBUG_CHANNEL(imagehlp);
15 static WORD CalcCheckSum(DWORD StartValue, LPVOID BaseAddress, DWORD WordCount);
18 /***********************************************************************
19 * BindImage (IMAGEHLP.@)
21 BOOL WINAPI BindImage(
22 LPSTR ImageName, LPSTR DllPath, LPSTR SymbolPath)
24 return BindImageEx(0, ImageName, DllPath, SymbolPath, NULL);
27 /***********************************************************************
28 * BindImageEx (IMAGEHLP.@)
30 BOOL WINAPI BindImageEx(
31 DWORD Flags, LPSTR ImageName, LPSTR DllPath, LPSTR SymbolPath,
32 PIMAGEHLP_STATUS_ROUTINE StatusRoutine)
34 FIXME("(%ld, %s, %s, %s, %p): stub\n",
35 Flags, debugstr_a(ImageName), debugstr_a(DllPath),
36 debugstr_a(SymbolPath), StatusRoutine
38 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
39 return FALSE;
43 /***********************************************************************
44 * CheckSum (internal)
46 static WORD CalcCheckSum(
47 DWORD StartValue, LPVOID BaseAddress, DWORD WordCount)
49 LPWORD Ptr;
50 DWORD Sum;
51 DWORD i;
53 Sum = StartValue;
54 Ptr = (LPWORD)BaseAddress;
55 for (i = 0; i < WordCount; i++)
57 Sum += *Ptr;
58 if (HIWORD(Sum) != 0)
60 Sum = LOWORD(Sum) + HIWORD(Sum);
62 Ptr++;
65 return (WORD)(LOWORD(Sum) + HIWORD(Sum));
69 /***********************************************************************
70 * CheckSumMappedFile (IMAGEHLP.@)
72 PIMAGE_NT_HEADERS WINAPI CheckSumMappedFile(
73 LPVOID BaseAddress, DWORD FileLength,
74 LPDWORD HeaderSum, LPDWORD CheckSum)
76 PIMAGE_NT_HEADERS Header;
77 DWORD CalcSum;
78 DWORD HdrSum;
80 FIXME("(%p, %ld, %p, %p): stub\n",
81 BaseAddress, FileLength, HeaderSum, CheckSum
84 CalcSum = (DWORD)CalcCheckSum(0,
85 BaseAddress,
86 (FileLength + 1) / sizeof(WORD));
88 Header = ImageNtHeader(BaseAddress);
89 HdrSum = Header->OptionalHeader.CheckSum;
91 /* Subtract image checksum from calculated checksum. */
92 /* fix low word of checksum */
93 if (LOWORD(CalcSum) >= LOWORD(HdrSum))
95 CalcSum -= LOWORD(HdrSum);
97 else
99 CalcSum = ((LOWORD(CalcSum) - LOWORD(HdrSum)) & 0xFFFF) - 1;
102 /* fix high word of checksum */
103 if (LOWORD(CalcSum) >= HIWORD(HdrSum))
105 CalcSum -= HIWORD(HdrSum);
107 else
109 CalcSum = ((LOWORD(CalcSum) - HIWORD(HdrSum)) & 0xFFFF) - 1;
112 /* add file length */
113 CalcSum += FileLength;
115 *CheckSum = CalcSum;
116 *HeaderSum = Header->OptionalHeader.CheckSum;
118 return Header;
121 /***********************************************************************
122 * MapFileAndCheckSumA (IMAGEHLP.@)
124 DWORD WINAPI MapFileAndCheckSumA(
125 LPSTR Filename, LPDWORD HeaderSum, LPDWORD CheckSum)
127 HANDLE hFile;
128 HANDLE hMapping;
129 LPVOID BaseAddress;
130 DWORD FileLength;
132 TRACE("(%s, %p, %p): stub\n",
133 debugstr_a(Filename), HeaderSum, CheckSum
136 hFile = CreateFileA(Filename,
137 GENERIC_READ,
138 FILE_SHARE_READ | FILE_SHARE_WRITE,
139 NULL,
140 OPEN_EXISTING,
141 FILE_ATTRIBUTE_NORMAL,
143 if (hFile == INVALID_HANDLE_VALUE)
145 return CHECKSUM_OPEN_FAILURE;
148 hMapping = CreateFileMappingW(hFile,
149 NULL,
150 PAGE_READONLY,
153 NULL);
154 if (hMapping == 0)
156 CloseHandle(hFile);
157 return CHECKSUM_MAP_FAILURE;
160 BaseAddress = MapViewOfFile(hMapping,
161 FILE_MAP_READ,
165 if (hMapping == 0)
167 CloseHandle(hMapping);
168 CloseHandle(hFile);
169 return CHECKSUM_MAPVIEW_FAILURE;
172 FileLength = GetFileSize(hFile,
173 NULL);
175 CheckSumMappedFile(BaseAddress,
176 FileLength,
177 HeaderSum,
178 CheckSum);
180 UnmapViewOfFile(BaseAddress);
181 CloseHandle(hMapping);
182 CloseHandle(hFile);
184 return 0;
187 /***********************************************************************
188 * MapFileAndCheckSumW (IMAGEHLP.@)
190 DWORD WINAPI MapFileAndCheckSumW(
191 LPWSTR Filename, LPDWORD HeaderSum, LPDWORD CheckSum)
193 HANDLE hFile;
194 HANDLE hMapping;
195 LPVOID BaseAddress;
196 DWORD FileLength;
198 TRACE("(%s, %p, %p): stub\n",
199 debugstr_w(Filename), HeaderSum, CheckSum
202 hFile = CreateFileW(Filename,
203 GENERIC_READ,
204 FILE_SHARE_READ | FILE_SHARE_WRITE,
205 NULL,
206 OPEN_EXISTING,
207 FILE_ATTRIBUTE_NORMAL,
209 if (hFile == INVALID_HANDLE_VALUE)
211 return CHECKSUM_OPEN_FAILURE;
214 hMapping = CreateFileMappingW(hFile,
215 NULL,
216 PAGE_READONLY,
219 NULL);
220 if (hMapping == 0)
222 CloseHandle(hFile);
223 return CHECKSUM_MAP_FAILURE;
226 BaseAddress = MapViewOfFile(hMapping,
227 FILE_MAP_READ,
231 if (hMapping == 0)
233 CloseHandle(hMapping);
234 CloseHandle(hFile);
235 return CHECKSUM_MAPVIEW_FAILURE;
238 FileLength = GetFileSize(hFile,
239 NULL);
241 CheckSumMappedFile(BaseAddress,
242 FileLength,
243 HeaderSum,
244 CheckSum);
246 UnmapViewOfFile(BaseAddress);
247 CloseHandle(hMapping);
248 CloseHandle(hFile);
250 return 0;
253 /***********************************************************************
254 * ReBaseImage (IMAGEHLP.@)
256 BOOL WINAPI ReBaseImage(
257 LPSTR CurrentImageName, LPSTR SymbolPath, BOOL fReBase,
258 BOOL fRebaseSysfileOk, BOOL fGoingDown, ULONG CheckImageSize,
259 ULONG *OldImageSize, ULONG *OldImageBase, ULONG *NewImageSize,
260 ULONG *NewImageBase, ULONG TimeStamp)
262 FIXME(
263 "(%s, %s, %d, %d, %d, %ld, %p, %p, %p, %p, %ld): stub\n",
264 debugstr_a(CurrentImageName),debugstr_a(SymbolPath), fReBase,
265 fRebaseSysfileOk, fGoingDown, CheckImageSize, OldImageSize,
266 OldImageBase, NewImageSize, NewImageBase, TimeStamp
268 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
269 return FALSE;
272 /***********************************************************************
273 * RemovePrivateCvSymbolic (IMAGEHLP.@)
275 BOOL WINAPI RemovePrivateCvSymbolic(
276 PCHAR DebugData, PCHAR *NewDebugData, ULONG *NewDebugSize)
278 FIXME("(%p, %p, %p): stub\n",
279 DebugData, NewDebugData, NewDebugSize
281 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
282 return FALSE;
285 /***********************************************************************
286 * RemoveRelocations (IMAGEHLP.@)
288 VOID WINAPI RemoveRelocations(PCHAR ImageName)
290 FIXME("(%p): stub\n", ImageName);
291 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
294 /***********************************************************************
295 * SplitSymbols (IMAGEHLP.@)
297 BOOL WINAPI SplitSymbols(
298 LPSTR ImageName, LPSTR SymbolsPath,
299 LPSTR SymbolFilePath, DWORD Flags)
301 FIXME("(%s, %s, %s, %ld): stub\n",
302 debugstr_a(ImageName), debugstr_a(SymbolsPath),
303 debugstr_a(SymbolFilePath), Flags
305 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
306 return FALSE;
309 /***********************************************************************
310 * UpdateDebugInfoFile (IMAGEHLP.@)
312 BOOL WINAPI UpdateDebugInfoFile(
313 LPSTR ImageFileName, LPSTR SymbolPath,
314 LPSTR DebugFilePath, PIMAGE_NT_HEADERS NtHeaders)
316 FIXME("(%s, %s, %s, %p): stub\n",
317 debugstr_a(ImageFileName), debugstr_a(SymbolPath),
318 debugstr_a(DebugFilePath), NtHeaders
320 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
321 return FALSE;
324 /***********************************************************************
325 * UpdateDebugInfoFileEx (IMAGEHLP.@)
327 BOOL WINAPI UpdateDebugInfoFileEx(
328 LPSTR ImageFileName, LPSTR SymbolPath, LPSTR DebugFilePath,
329 PIMAGE_NT_HEADERS NtHeaders, DWORD OldChecksum)
331 FIXME("(%s, %s, %s, %p, %ld): stub\n",
332 debugstr_a(ImageFileName), debugstr_a(SymbolPath),
333 debugstr_a(DebugFilePath), NtHeaders, OldChecksum
335 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
336 return FALSE;