From 8a10ef10cbc2d7513e8e4600dc26bb696f78dc62 Mon Sep 17 00:00:00 2001 From: Ivan Furs Date: Mon, 6 Mar 2017 19:18:46 +0900 Subject: [PATCH] eina_file: delete handle->fm(handel of function CreateFileMapping) Summary: CreateFileMapping return handle. The handle before use is always closed. This handle can be immediately closed after use. Reviewers: cedric, raster, vtorri, rimmed, an.kroitor, FurryMyad, NikaWhite Reviewed By: raster Subscribers: artem.popov, cedric, jpeg Tags: #windows Differential Revision: https://phab.enlightenment.org/D4699 --- src/lib/eina/eina_file_common.c | 3 +-- src/lib/eina/eina_file_common.h | 1 - src/lib/eina/eina_file_win32.c | 36 +++++++++++++-------------------- 3 files changed, 15 insertions(+), 25 deletions(-) diff --git a/src/lib/eina/eina_file_common.c b/src/lib/eina/eina_file_common.c index 2c5eeb1bf0..b47cad72e3 100644 --- a/src/lib/eina/eina_file_common.c +++ b/src/lib/eina/eina_file_common.c @@ -436,8 +436,7 @@ eina_file_virtualize(const char *virtual_name, const void *data, unsigned long l #ifndef _WIN32 file->fd = -1; #else - file->handle = NULL; - file->fm = NULL; + file->handle = INVALID_HANDLE_VALUE; #endif file->virtual = EINA_TRUE; file->map = eina_hash_new(EINA_KEY_LENGTH(eina_file_map_key_length), diff --git a/src/lib/eina/eina_file_common.h b/src/lib/eina/eina_file_common.h index e8241d9ae1..6fcecb2fa8 100644 --- a/src/lib/eina/eina_file_common.h +++ b/src/lib/eina/eina_file_common.h @@ -94,7 +94,6 @@ struct _Eina_File int fd; /**< The file descriptor. */ #else HANDLE handle; /**< A Win32 file handle for this file. */ - HANDLE fm; /**< A Win32 file handle to a file mapping object for this file. */ #endif Eina_List *dead_map; /**< Tracks regions that get a failure from mmap(2). */ diff --git a/src/lib/eina/eina_file_win32.c b/src/lib/eina/eina_file_win32.c index fe83c6710c..9d6bf1b444 100644 --- a/src/lib/eina/eina_file_win32.c +++ b/src/lib/eina/eina_file_win32.c @@ -386,8 +386,8 @@ eina_file_real_close(Eina_File *file) if (file->global_map != MAP_FAILED && file->handle != NULL) UnmapViewOfFile(file->global_map); - if (file->fm) CloseHandle(file->fm); - if (file->handle) CloseHandle(file->handle); + if (file->handle != INVALID_HANDLE_VALUE) + CloseHandle(file->handle); } static void @@ -871,29 +871,26 @@ eina_file_map_all(Eina_File *file, Eina_File_Populate rule EINA_UNUSED) eina_lock_take(&file->lock); if (file->global_map == MAP_FAILED) { - void *data; DWORD max_size_high; DWORD max_size_low; + HANDLE fm; - if (file->fm) - CloseHandle(file->fm); max_size_high = (DWORD)((file->length & 0xffffffff00000000ULL) >> 32); max_size_low = (DWORD)(file->length & 0x00000000ffffffffULL); - file->fm = CreateFileMapping(file->handle, NULL, PAGE_READONLY, + fm = CreateFileMapping(file->handle, NULL, PAGE_READONLY, max_size_high, max_size_low, NULL); - if (!file->fm) + if (!fm) { eina_lock_release(&file->lock); return NULL; } - data = MapViewOfFile(file->fm, FILE_MAP_READ, + file->global_map = MapViewOfFile(fm, FILE_MAP_READ, 0, 0, file->length); - if (!data) + CloseHandle(fm); + if (!file->global_map) file->global_map = MAP_FAILED; - else - file->global_map = data; } if (file->global_map != MAP_FAILED) @@ -935,8 +932,7 @@ eina_file_map_new(Eina_File *file, Eina_File_Populate rule, map = eina_hash_find(file->map, &key); if (!map) { - void *data; - + HANDLE fm; map = malloc(sizeof (Eina_File_Map)); if (!map) { @@ -944,24 +940,20 @@ eina_file_map_new(Eina_File *file, Eina_File_Populate rule, return NULL; } - if (file->fm) - CloseHandle(file->fm); - /* the length parameter is unsigned long, that is a DWORD */ /* so the max size high parameter of CreateFileMapping is 0 */ - file->fm = CreateFileMapping(file->handle, NULL, PAGE_READONLY, + fm = CreateFileMapping(file->handle, NULL, PAGE_READONLY, 0, (DWORD)length, NULL); - if (!file->fm) + if (!fm) return NULL; - data = MapViewOfFile(file->fm, FILE_MAP_READ, + map->map = MapViewOfFile(fm, FILE_MAP_READ, offset & 0xffff0000, offset & 0x0000ffff, length); - if (!data) + CloseHandle(fm); + if (!map->map) map->map = MAP_FAILED; - else - map->map = data; map->offset = offset; map->length = length;