eina: change eina_file_virtualize to be able to provide a fake name.
This commit is contained in:
parent
4f484b81d4
commit
861823848a
|
@ -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.
|
* @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 data The memory pointer to take data from
|
||||||
* @param length The length of the data in memory
|
* @param length The length of the data in memory
|
||||||
* @param copy #EINA_TRUE if the data must be copied
|
* @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
|
* @since 1.8
|
||||||
*/
|
*/
|
||||||
EAPI Eina_File *
|
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
|
* @brief Tell if a file is a real file or only exist in memory
|
||||||
|
|
|
@ -353,25 +353,31 @@ eina_file_path_sanitize(const char *path)
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Eina_File *
|
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_File *file;
|
||||||
Eina_Nano_Time tp;
|
Eina_Nano_Time tp;
|
||||||
long int ti;
|
long int ti;
|
||||||
const char *tmpname = "/dev/mem/virtual\\/%16x";
|
const char *tmpname = "/dev/mem/virtual\\/%16x";
|
||||||
|
int slen;
|
||||||
|
|
||||||
// Generate an almost uniq filename based on current nsec time.
|
// Generate an almost uniq filename based on current nsec time.
|
||||||
if (_eina_time_get(&tp)) return NULL;
|
if (_eina_time_get(&tp)) return NULL;
|
||||||
ti = _eina_time_convert(&tp);
|
ti = _eina_time_convert(&tp);
|
||||||
|
|
||||||
|
slen = virtual_name ? strlen(virtual_name) + 1 : strlen(tmpname) + 17;
|
||||||
|
|
||||||
file = malloc(sizeof (Eina_File) +
|
file = malloc(sizeof (Eina_File) +
|
||||||
strlen(tmpname) + 17 +
|
slen +
|
||||||
(copy ? length : 0));
|
(copy ? length : 0));
|
||||||
if (!file) return NULL;
|
if (!file) return NULL;
|
||||||
|
|
||||||
memset(file, 0, sizeof(Eina_File));
|
memset(file, 0, sizeof(Eina_File));
|
||||||
file->filename = (char*) (file + 1);
|
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);
|
eina_lock_new(&file->lock);
|
||||||
file->mtime = ti / 1000;
|
file->mtime = ti / 1000;
|
||||||
|
|
|
@ -377,7 +377,7 @@ evas_object_image_memfile_set(Evas_Object *eo_obj, void *data, int size, char *f
|
||||||
return;
|
return;
|
||||||
MAGIC_CHECK_END();
|
MAGIC_CHECK_END();
|
||||||
|
|
||||||
f = eina_file_virtualize(data, size, EINA_TRUE);
|
f = eina_file_virtualize(NULL, data, size, EINA_TRUE);
|
||||||
if (!f) return ;
|
if (!f) return ;
|
||||||
eo_do(eo_obj, evas_obj_image_mmap_set(f, key));
|
eo_do(eo_obj, evas_obj_image_mmap_set(f, key));
|
||||||
eina_file_close(f);
|
eina_file_close(f);
|
||||||
|
|
Loading…
Reference in New Issue