summaryrefslogtreecommitdiff
path: root/src/lib/eina/eina_file_common.c
diff options
context:
space:
mode:
authorCedric Bail <cedric@osg.samsung.com>2017-10-17 16:14:26 -0700
committerCedric Bail <cedric@osg.samsung.com>2017-10-17 16:15:19 -0700
commit6e64a104a639097627072a8aea7575461ec68448 (patch)
treea82aba22a10d9855f1685533848c035b7543df1c /src/lib/eina/eina_file_common.c
parente0807ce79796a20f5b88dea9a3e748e28b0c9497 (diff)
downloadefl-6e64a104a639097627072a8aea7575461ec68448.tar.gz
eina: use a stringshare to store the filename internally.
T6164
Diffstat (limited to 'src/lib/eina/eina_file_common.c')
-rw-r--r--src/lib/eina/eina_file_common.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/lib/eina/eina_file_common.c b/src/lib/eina/eina_file_common.c
index 69ae4f7ead..edebaed326 100644
--- a/src/lib/eina/eina_file_common.c
+++ b/src/lib/eina/eina_file_common.c
@@ -502,6 +502,7 @@ eina_file_clean_close(Eina_File *file)
// Generic destruction of the file
eina_hash_free(file->rmap); file->rmap = NULL;
eina_hash_free(file->map); file->map = NULL;
+ eina_stringshare_del(file->filename);
// Backend specific file resource close
eina_file_real_close(file);
@@ -515,7 +516,6 @@ EAPI void
eina_file_close(Eina_File *file)
{
Eina_Bool leave = EINA_TRUE;
- unsigned int length;
unsigned int key;
if (!file) return ;
@@ -529,13 +529,12 @@ eina_file_close(Eina_File *file)
eina_lock_release(&file->lock);
if (leave) goto end;
- length = strlen(file->filename) + 1;
- key = eina_hash_djb2(file->filename, length);
+ key = eina_hash_superfast((void*) &file->filename, sizeof (void*));
if (eina_hash_find_by_hash(_eina_file_cache,
- file->filename, length, key) == file)
+ file->filename, 0, key) == file)
{
eina_hash_del_by_key_hash(_eina_file_cache,
- file->filename, length, key);
+ file->filename, 0, key);
}
eina_file_clean_close(file);
@@ -564,6 +563,20 @@ eina_file_filename_get(const Eina_File *file)
return file->filename;
}
+Eina_Stringshare *
+eina_file_sanitize(const char *path)
+{
+ char *filename;
+ Eina_Stringshare *ss;
+
+ filename = eina_file_path_sanitize(path);
+ if (!filename) return NULL;
+
+ ss = eina_stringshare_add(filename);
+ free(filename);
+ return ss;
+}
+
/* search '\r' and '\n' by preserving cache locality and page locality
in doing a search inside 4K boundary.
*/
@@ -1055,7 +1068,7 @@ eina_file_init(void)
return EINA_FALSE;
}
- _eina_file_cache = eina_hash_string_djb2_new(NULL);
+ _eina_file_cache = eina_hash_stringshared_new(NULL);
if (!_eina_file_cache)
{
ERR("Could not create cache.");