cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=808fcf4daeb8fa7eeef276c72e34c441c09e3214

commit 808fcf4daeb8fa7eeef276c72e34c441c09e3214
Author: Ivan Furs <i.f...@samsung.com>
Date:   Tue Feb 7 14:50:32 2017 -0800

    eina_file: add eina_file_unlink
    
    Test Plan: split  D4423 - unlink
    
    Reviewers: raster, vtorri, an.kroitor, jpeg, reutskiy.v.v, NikaWhite, cedric
    
    Reviewed By: cedric
    
    Subscribers: artem.popov, cedric, vtorri, jpeg
    
    Tags: #windows, #efl
    
    Differential Revision: https://phab.enlightenment.org/D4485
    
    Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/bindings/luajit/eina/file.lua |  6 ++++++
 src/lib/eina/eina_file.c          | 10 ++++++++++
 src/lib/eina/eina_file_win32.c    | 24 +++++++++++++++++++++++
 src/tests/eina/eina_test_file.c   | 41 +++++++++++++++++++++++++++++++++++++++
 4 files changed, 81 insertions(+)

diff --git a/src/bindings/luajit/eina/file.lua 
b/src/bindings/luajit/eina/file.lua
index d776047..675b810 100644
--- a/src/bindings/luajit/eina/file.lua
+++ b/src/bindings/luajit/eina/file.lua
@@ -97,6 +97,7 @@ ffi.cdef [[
         Eina_File_Copy_Flags flags, Eina_File_Copy_Progress cb,
         const void *cb_data);
     Eina_File *eina_file_open(const char *name, Eina_Bool shared);
+    Eina_Bool eina_file_unlink(const char *pathname);
     Eina_File *eina_file_virtualize(const char *virtual_name,
         const void *data, unsigned long long length, Eina_Bool copy);
     Eina_Bool eina_file_virtual(Eina_File *file);
@@ -315,6 +316,11 @@ M.File = ffi.metatype("Eina_File", {
         open = function(name, shared)
             return eina.eina_file_open(name, shared)
         end,
+
+        unlink = function(self)
+            return eina.eina_file_unlink(pathname)
+        end,
+
         virtualize = function(vname, data, length, copy)
             return eina.eina_file_virtualize(vname, data, length,
                 copy or false)
diff --git a/src/lib/eina/eina_file.c b/src/lib/eina/eina_file.c
index cb29f28..c378ea5 100644
--- a/src/lib/eina/eina_file.c
+++ b/src/lib/eina/eina_file.c
@@ -898,6 +898,16 @@ eina_file_refresh(Eina_File *file)
    return r;
 }
 
+EAPI Eina_Bool
+eina_file_unlink(const char *pathname)
+{
+   if ( unlink(pathname) < 0)
+     {
+        return EINA_FALSE;
+     }
+   return EINA_TRUE;
+}
+
 EAPI void *
 eina_file_map_all(Eina_File *file, Eina_File_Populate rule)
 {
diff --git a/src/lib/eina/eina_file_win32.c b/src/lib/eina/eina_file_win32.c
index 54b5d90..fe83c67 100644
--- a/src/lib/eina/eina_file_win32.c
+++ b/src/lib/eina/eina_file_win32.c
@@ -821,6 +821,30 @@ eina_file_open(const char *path, Eina_Bool shared)
    return NULL;
 }
 
+EAPI Eina_Bool
+eina_file_unlink(const char *pathname)
+{
+   char *unlink_path = eina_file_path_sanitize(pathname);
+   Eina_File *file = eina_hash_find(_eina_file_cache, unlink_path);
+
+   if (file)
+     {
+        if (file->handle != INVALID_HANDLE_VALUE)
+          {
+             CloseHandle(file->handle);
+             file->handle = INVALID_HANDLE_VALUE;
+          }
+     }
+
+   if ( unlink(unlink_path) < 0)
+     {
+        return EINA_FALSE;
+     }
+
+   return EINA_TRUE;
+}
+
+
 EAPI Eina_Iterator *eina_file_xattr_get(Eina_File *file EINA_UNUSED)
 {
    return NULL;
diff --git a/src/tests/eina/eina_test_file.c b/src/tests/eina/eina_test_file.c
index c82f600..e3c60b6 100644
--- a/src/tests/eina/eina_test_file.c
+++ b/src/tests/eina/eina_test_file.c
@@ -824,6 +824,45 @@ START_TEST(eina_test_file_mktemp)
 }
 END_TEST
 
+int  create_file_not_empty(const char *file_name, Eina_Tmpstr 
**test_file_path, Eina_Bool close_file)
+{
+   const char *data = "abcdefghijklmnopqrstuvwxyz";
+   int data_size = strlen(data);
+   int wr_size;
+   int fd = eina_file_mkstemp(file_name, test_file_path);
+   fail_if(fd <= 0);
+   wr_size = write(fd, data, data_size);
+   if(close_file == EINA_TRUE)
+   {
+      close(fd);
+      fd = 0;
+   }
+   fail_if(wr_size != data_size);
+   return fd;
+}
+
+START_TEST(eina_test_file_unlink)
+{
+   int fd;
+   Eina_File *file;
+   Eina_Tmpstr *test_file_path;
+   const char *tmpfile = "eina_file_test_XXXXXX";
+
+   eina_init();
+
+   /*If file was not opened as 'eina'*/
+   fd = create_file_not_empty(tmpfile, &test_file_path, EINA_TRUE);
+   fail_if( !eina_file_unlink(test_file_path) );
+
+   /*If file was opened as 'eina'*/
+   fd = create_file_not_empty(tmpfile, &test_file_path, EINA_TRUE);
+   fail_if( !eina_file_open(test_file_path, EINA_FALSE) );
+   fail_if( !eina_file_unlink(test_file_path) );
+
+   eina_shutdown();
+}
+END_TEST
+
 void
 eina_test_file(TCase *tc)
 {
@@ -840,4 +879,6 @@ eina_test_file(TCase *tc)
    tcase_add_test(tc, eina_test_file_copy);
    tcase_add_test(tc, eina_test_file_statat);
    tcase_add_test(tc, eina_test_file_mktemp);
+   tcase_add_test(tc, eina_test_file_unlink);
+
 }

-- 


Reply via email to