cedric pushed a commit to branch master.

commit 861823848a853ae2646f45180f597775896e680e
Author: Cedric Bail <[email protected]>
Date:   Fri Aug 9 20:35:02 2013 +0900

    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 0e43d2a..234cb2a 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 2039f97..a75015b 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 df57721..fb34549 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);

-- 

------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk

Reply via email to