diff options
author | Cedric Bail <cedric@osg.samsung.com> | 2017-10-17 16:14:26 -0700 |
---|---|---|
committer | Cedric Bail <cedric@osg.samsung.com> | 2017-10-17 16:15:19 -0700 |
commit | 6e64a104a639097627072a8aea7575461ec68448 (patch) | |
tree | a82aba22a10d9855f1685533848c035b7543df1c /src/lib/eina/eina_file_common.c | |
parent | e0807ce79796a20f5b88dea9a3e748e28b0c9497 (diff) | |
download | efl-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.c | 25 |
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."); |