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