From 861823848a853ae2646f45180f597775896e680e Mon Sep 17 00:00:00 2001 From: Cedric Bail Date: Fri, 9 Aug 2013 20:35:02 +0900 Subject: [PATCH] eina: change eina_file_virtualize to be able to provide a fake name. --- src/lib/eina/eina_file.h | 3 ++- src/lib/eina/eina_file_common.c | 12 +++++++++--- src/lib/evas/canvas/evas_object_image.c | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/lib/eina/eina_file.h b/src/lib/eina/eina_file.h index 0e43d2acb8..234cb2ace4 100644 --- a/src/lib/eina/eina_file.h +++ b/src/lib/eina/eina_file.h @@ -462,6 +462,7 @@ EAPI Eina_File *eina_file_open(const char *name, Eina_Bool shared) EINA_WARN_UNU /** * @brief Create a virtual file from a memory pointer. * + * @param virtual_name A virtual name for Eina_File, if #NULL, a generated one will be given * @param data The memory pointer to take data from * @param length The length of the data in memory * @param copy #EINA_TRUE if the data must be copied @@ -470,7 +471,7 @@ EAPI Eina_File *eina_file_open(const char *name, Eina_Bool shared) EINA_WARN_UNU * @since 1.8 */ EAPI Eina_File * -eina_file_virtualize(const void *data, unsigned long long length, Eina_Bool copy) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); +eina_file_virtualize(const char *virtual_name, const void *data, unsigned long long length, Eina_Bool copy) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); /** * @brief Tell if a file is a real file or only exist in memory diff --git a/src/lib/eina/eina_file_common.c b/src/lib/eina/eina_file_common.c index 2039f97c70..a75015bf51 100644 --- a/src/lib/eina/eina_file_common.c +++ b/src/lib/eina/eina_file_common.c @@ -353,25 +353,31 @@ eina_file_path_sanitize(const char *path) } EAPI Eina_File * -eina_file_virtualize(const void *data, unsigned long long length, Eina_Bool copy) +eina_file_virtualize(const char *virtual_name, const void *data, unsigned long long length, Eina_Bool copy) { Eina_File *file; Eina_Nano_Time tp; long int ti; const char *tmpname = "/dev/mem/virtual\\/%16x"; + int slen; // Generate an almost uniq filename based on current nsec time. if (_eina_time_get(&tp)) return NULL; ti = _eina_time_convert(&tp); + slen = virtual_name ? strlen(virtual_name) + 1 : strlen(tmpname) + 17; + file = malloc(sizeof (Eina_File) + - strlen(tmpname) + 17 + + slen + (copy ? length : 0)); if (!file) return NULL; memset(file, 0, sizeof(Eina_File)); file->filename = (char*) (file + 1); - sprintf((char*) file->filename, tmpname, ti); + if (virtual_name) + strcpy(file->filename, virtual_name); + else + sprintf((char*) file->filename, tmpname, ti); eina_lock_new(&file->lock); file->mtime = ti / 1000; diff --git a/src/lib/evas/canvas/evas_object_image.c b/src/lib/evas/canvas/evas_object_image.c index df5772149c..fb34549a75 100644 --- a/src/lib/evas/canvas/evas_object_image.c +++ b/src/lib/evas/canvas/evas_object_image.c @@ -377,7 +377,7 @@ evas_object_image_memfile_set(Evas_Object *eo_obj, void *data, int size, char *f return; MAGIC_CHECK_END(); - f = eina_file_virtualize(data, size, EINA_TRUE); + f = eina_file_virtualize(NULL, data, size, EINA_TRUE); if (!f) return ; eo_do(eo_obj, evas_obj_image_mmap_set(f, key)); eina_file_close(f);