summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrii Kroitor <an.kroitor@samsung.com>2016-11-11 17:38:24 +0200
committerAndrii Kroitor <an.kroitor@samsung.com>2016-11-29 16:05:28 +0200
commit03db53bbdf190d2604d5423eb10ea45f2d382eb8 (patch)
tree1fce688a015d7ed66f32df2a5c8e485cadda8d61
parent355bc0e61b02d8bb150735003c090b3a9a8829b6 (diff)
downloadefl-03db53bbdf190d2604d5423eb10ea45f2d382eb8.tar.gz
Eina_File: use Eina_Binbuf in writable API
-rw-r--r--src/lib/eina/eina_file_common.c35
-rw-r--r--src/lib/eina/eina_file_common.h6
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 */