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 <cedric@osg.samsung.com>
This commit is contained in:
Ivan Furs 2017-02-07 14:50:32 -08:00 committed by Cedric BAIL
parent b04fa2ddba
commit 808fcf4dae
4 changed files with 81 additions and 0 deletions

View File

@ -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)

View File

@ -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)
{

View File

@ -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;

View File

@ -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);
}