forked from enlightenment/edi
elm_code file: add save method to write out lines
use a temporary file as we may have mapped the data directly.
This commit is contained in:
parent
a671101a09
commit
f7f257fca4
|
@ -71,6 +71,33 @@ static void _elm_code_file_line_insert_data(Elm_Code_File *file, const char *con
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI const char *elm_code_file_filename_get(Elm_Code_File *file)
|
||||||
|
{
|
||||||
|
return basename((char *)eina_file_filename_get(file->file));
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI const char *elm_code_file_path_get(Elm_Code_File *file)
|
||||||
|
{
|
||||||
|
return eina_file_filename_get(file->file);
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI char *_elm_code_file_tmp_path_get(Elm_Code_File *file)
|
||||||
|
{
|
||||||
|
const char *name, *path;
|
||||||
|
char *tmp;
|
||||||
|
size_t dirlen;
|
||||||
|
|
||||||
|
path = elm_code_file_path_get(file);
|
||||||
|
name = elm_code_file_filename_get(file);
|
||||||
|
dirlen = strlen(path) - strlen(name);
|
||||||
|
|
||||||
|
tmp = malloc(sizeof(char) * (strlen(path) + 6));
|
||||||
|
snprintf(tmp, dirlen + 1, "%s", path);
|
||||||
|
snprintf(tmp + dirlen, strlen(name) + 6, ".%s.tmp", name);
|
||||||
|
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
EAPI Elm_Code_File *elm_code_file_new(Elm_Code *code)
|
EAPI Elm_Code_File *elm_code_file_new(Elm_Code *code)
|
||||||
{
|
{
|
||||||
Elm_Code_File *ret;
|
Elm_Code_File *ret;
|
||||||
|
@ -128,6 +155,39 @@ EAPI Elm_Code_File *elm_code_file_open(Elm_Code *code, const char *path)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI void elm_code_file_save(Elm_Code_File *file)
|
||||||
|
{
|
||||||
|
Eina_List *item;
|
||||||
|
Elm_Code_Line *line_item;
|
||||||
|
const char *path, *content, *crchars;
|
||||||
|
char *tmp;
|
||||||
|
unsigned int length;
|
||||||
|
short crlength;
|
||||||
|
FILE *out;
|
||||||
|
|
||||||
|
path = elm_code_file_path_get(file);
|
||||||
|
tmp = _elm_code_file_tmp_path_get(file);
|
||||||
|
crchars = elm_code_file_line_ending_chars_get(file, &crlength);
|
||||||
|
|
||||||
|
out = fopen(tmp, "w");
|
||||||
|
if (out == NULL)
|
||||||
|
{
|
||||||
|
free(tmp);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH(file->lines, item, line_item)
|
||||||
|
{
|
||||||
|
content = elm_code_line_text_get(line_item, &length);
|
||||||
|
fwrite(content, sizeof(char), length, out);
|
||||||
|
fwrite(crchars, sizeof(char), crlength, out);
|
||||||
|
}
|
||||||
|
fclose(out);
|
||||||
|
|
||||||
|
ecore_file_mv(tmp, path);
|
||||||
|
free(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
EAPI void elm_code_file_free(Elm_Code_File *file)
|
EAPI void elm_code_file_free(Elm_Code_File *file)
|
||||||
{
|
{
|
||||||
Elm_Code_Line *l;
|
Elm_Code_Line *l;
|
||||||
|
@ -152,16 +212,6 @@ EAPI void elm_code_file_close(Elm_Code_File *file)
|
||||||
eina_file_close(file->file);
|
eina_file_close(file->file);
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI const char *elm_code_file_filename_get(Elm_Code_File *file)
|
|
||||||
{
|
|
||||||
return basename((char *)eina_file_filename_get(file->file));
|
|
||||||
}
|
|
||||||
|
|
||||||
EAPI const char *elm_code_file_path_get(Elm_Code_File *file)
|
|
||||||
{
|
|
||||||
return eina_file_filename_get(file->file);
|
|
||||||
}
|
|
||||||
|
|
||||||
EAPI Elm_Code_File_Line_Ending elm_code_file_line_ending_get(Elm_Code_File *file)
|
EAPI Elm_Code_File_Line_Ending elm_code_file_line_ending_get(Elm_Code_File *file)
|
||||||
{
|
{
|
||||||
return file->line_ending;
|
return file->line_ending;
|
||||||
|
|
|
@ -40,6 +40,8 @@ EAPI Elm_Code_File *elm_code_file_new(Elm_Code *code);
|
||||||
|
|
||||||
EAPI Elm_Code_File *elm_code_file_open(Elm_Code *code, const char *path);
|
EAPI Elm_Code_File *elm_code_file_open(Elm_Code *code, const char *path);
|
||||||
|
|
||||||
|
EAPI void elm_code_file_save(Elm_Code_File *file);
|
||||||
|
|
||||||
EAPI void elm_code_file_free(Elm_Code_File *file);
|
EAPI void elm_code_file_free(Elm_Code_File *file);
|
||||||
|
|
||||||
EAPI void elm_code_file_close(Elm_Code_File *file);
|
EAPI void elm_code_file_close(Elm_Code_File *file);
|
||||||
|
|
Loading…
Reference in New Issue