eina: change eina_file_virtualize to be able to provide a fake name.

This commit is contained in:
Cedric Bail 2013-08-09 20:35:02 +09:00
parent 4f484b81d4
commit 861823848a
3 changed files with 12 additions and 5 deletions

View File

@ -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

View File

@ -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;

View File

@ -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);