r11444@Kushana: nickm | 2006-12-07 09:38:52 -0500

Fix a couple of obvious bugs in tor_mmap_file on Windows: first, fix a boolean error when checking the return value of CreateFileMapping.  Second, CreateFileMapping is documented to return NULL on failure.


svn:r9035
This commit is contained in:
Nick Mathewson 2006-12-07 14:39:42 +00:00
parent 65b14eae90
commit e8dc71ade4

View File

@ -183,7 +183,8 @@ tor_mmap_t *
tor_mmap_file(const char *filename) tor_mmap_file(const char *filename)
{ {
win_mmap_t *res = tor_malloc_zero(sizeof(win_mmap_t)); win_mmap_t *res = tor_malloc_zero(sizeof(win_mmap_t));
res->mmap_handle = res->file_handle = INVALID_HANDLE_VALUE; res->file_handle = INVALID_HANDLE_VALUE;
res->mmap_handle = NULL;
res->file_handle = CreateFile(filename, res->file_handle = CreateFile(filename,
GENERIC_READ, GENERIC_READ,
@ -207,7 +208,7 @@ tor_mmap_file(const char *filename)
#endif #endif
(res->base.size & 0xfffffffful), (res->base.size & 0xfffffffful),
NULL); NULL);
if (res->mmap_handle != INVALID_HANDLE_VALUE) if (res->mmap_handle == NULL)
goto err; goto err;
res->base.data = (char*) MapViewOfFile(res->mmap_handle, res->base.data = (char*) MapViewOfFile(res->mmap_handle,
FILE_MAP_READ, FILE_MAP_READ,
@ -226,12 +227,11 @@ tor_munmap_file(tor_mmap_t *handle)
win_mmap_t *h = (win_mmap_t*) win_mmap_t *h = (win_mmap_t*)
(((char*)handle) - STRUCT_OFFSET(win_mmap_t, base)); (((char*)handle) - STRUCT_OFFSET(win_mmap_t, base));
if (handle->data) if (handle->data)
/* This is an ugly cast, but without it, "data" in struct tor_mmap_t would
/*this is an ugly cast, but without it, "data" in struct tor_mmap_t would have to be redefined as non-const. */
have to be redefined as const*/
UnmapViewOfFile( (LPVOID) handle->data); UnmapViewOfFile( (LPVOID) handle->data);
if (h->mmap_handle != INVALID_HANDLE_VALUE) if (h->mmap_handle != NULL)
CloseHandle(h->mmap_handle); CloseHandle(h->mmap_handle);
if (h->file_handle != INVALID_HANDLE_VALUE) if (h->file_handle != INVALID_HANDLE_VALUE)
CloseHandle(h->file_handle); CloseHandle(h->file_handle);