diff options
author | Andrii Kroitor <an.kroitor@samsung.com> | 2016-11-11 17:38:24 +0200 |
---|---|---|
committer | Andrii Kroitor <an.kroitor@samsung.com> | 2016-11-29 16:05:28 +0200 |
commit | 03db53bbdf190d2604d5423eb10ea45f2d382eb8 (patch) | |
tree | 1fce688a015d7ed66f32df2a5c8e485cadda8d61 | |
parent | 355bc0e61b02d8bb150735003c090b3a9a8829b6 (diff) | |
download | efl-03db53bbdf190d2604d5423eb10ea45f2d382eb8.tar.gz |
Eina_File: use Eina_Binbuf in writable API
-rw-r--r-- | src/lib/eina/eina_file_common.c | 35 | ||||
-rw-r--r-- | src/lib/eina/eina_file_common.h | 6 |
2 files changed, 9 insertions, 32 deletions
diff --git a/src/lib/eina/eina_file_common.c b/src/lib/eina/eina_file_common.c index 95a2fba412..344d1a1ae5 100644 --- a/src/lib/eina/eina_file_common.c +++ b/src/lib/eina/eina_file_common.c @@ -449,6 +449,7 @@ eina_file_virtualize_writable(const char *virtual_name, const void *data, unsign Eina_File *ret; ret = eina_file_virtualize(virtual_name, data, length, EINA_TRUE); ret->writable = EINA_TRUE; + ret->write_buf = eina_binbuf_manage_new(ret->global_map, length, EINA_TRUE); return ret; } @@ -462,8 +463,6 @@ eina_file_writable_get(const Eina_File *file) EAPI Eina_Bool eina_file_write(Eina_File *file, const void *data, size_t size) { - const unsigned char *data_to_write; - if (!file) return EINA_FALSE; @@ -473,28 +472,8 @@ eina_file_write(Eina_File *file, const void *data, size_t size) if (data == NULL || size == 0) return EINA_FALSE; - data_to_write = data; + eina_binbuf_append_length(file->write_buf, data, size); - if (file->write_pos + size >= file->write_buf_size) - { - if (file->write_buf_size == 0) - { - //alloc - file->write_buf_size = 1024; - file->write_buf = malloc(file->write_buf_size); - } - else - { - //realloc - file->write_buf_size = 2 * file->write_buf_size; - file->write_buf = realloc(file->write_buf, file->write_buf_size); - } - } - for(size_t i = 0; i < size; i++) - { - //memcopy? - file->write_buf[file->write_pos++] = data_to_write[i]; - } return EINA_TRUE; } @@ -507,10 +486,7 @@ eina_file_written_file_get(const Eina_File *file) if (!file->writable) return NULL; - if (file->write_pos == 0) - return NULL; - - return eina_file_virtualize_writable(file->filename, file->write_buf, file->write_pos); + return eina_file_virtualize_writable(file->filename, eina_binbuf_string_get(file->write_buf), eina_binbuf_length_get(file->write_buf)); } EAPI Eina_Bool @@ -522,7 +498,8 @@ eina_file_writable_reset_buf(Eina_File *file) if (!file->writable) return EINA_FALSE; - file->write_pos = 0; + eina_binbuf_reset(file->write_buf); + return EINA_TRUE; } @@ -554,7 +531,7 @@ eina_file_clean_close(Eina_File *file) eina_hash_free(file->rmap); file->rmap = NULL; eina_hash_free(file->map); file->map = NULL; - free(file->write_buf); + eina_binbuf_free(file->write_buf); // Backend specific file resource close eina_file_real_close(file); diff --git a/src/lib/eina/eina_file_common.h b/src/lib/eina/eina_file_common.h index ad95be487e..71edd312f9 100644 --- a/src/lib/eina/eina_file_common.h +++ b/src/lib/eina/eina_file_common.h @@ -24,6 +24,8 @@ #include "eina_lock.h" #include "eina_list.h" #include "eina_util.h" +#include "eina_slice.h" +#include "eina_binbuf.h" #define EINA_FILE_MAGIC 0xFEEDBEEF @@ -99,9 +101,7 @@ struct _Eina_File Eina_List *dead_map; /**< Tracks regions that get a failure from mmap(2). */ - unsigned char *write_buf; - size_t write_pos; - size_t write_buf_size; + Eina_Binbuf *write_buf; Eina_Bool shared : 1; /**< Indicates whether this file can be shared */ Eina_Bool delete_me : 1; /**< Indicates that this file should be deleted */ Eina_Bool global_faulty : 1; /**< Indicates whether #global_map is bad */ |