eina_file: delete handle->fm(handel of function CreateFileMapping)
authorIvan Furs <i.furs@samsung.com>
Mon, 6 Mar 2017 10:18:46 +0000 (19:18 +0900)
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>
Mon, 6 Mar 2017 10:18:46 +0000 (19:18 +0900)
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
src/lib/eina/eina_file_common.h
src/lib/eina/eina_file_win32.c

index 2c5eeb1..b47cad7 100644 (file)
@@ -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),
index e8241d9..6fcecb2 100644 (file)
@@ -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). */
index fe83c67..9d6bf1b 100644 (file)
@@ -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;