forked from enlightenment/efl
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.
|
||||
*
|
||||
* @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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue