Enlightenment CVS committal
Author : cedric
Project : e17
Module : libs/eet
Dir : e17/libs/eet/src/lib
Modified Files:
eet_lib.c
Log Message:
Fix EET_FILE_MODE_READ_WRITE when file doesn't exist.
===================================================================
RCS file: /cvs/e/e17/libs/eet/src/lib/eet_lib.c,v
retrieving revision 1.102
retrieving revision 1.103
diff -u -3 -r1.102 -r1.103
--- eet_lib.c 10 Apr 2008 09:12:43 -0000 1.102
+++ eet_lib.c 16 May 2008 10:00:54 -0000 1.103
@@ -1163,18 +1163,23 @@
if ((mode == EET_FILE_MODE_READ) || (mode == EET_FILE_MODE_READ_WRITE))
{
fp = fopen(file, "rb");
- if (!fp) return NULL;
+ if (!fp) goto on_error;
if (fstat(fileno(fp), &file_stat))
{
fclose(fp);
- return NULL;
+ fp = NULL;
+ goto on_error;
}
if ((mode == EET_FILE_MODE_READ) &&
(file_stat.st_size < (sizeof(int) * 3)))
{
fclose(fp);
- return NULL;
+ fp = NULL;
+ goto on_error;
}
+
+ on_error:
+ if (fp == NULL && mode == EET_FILE_MODE_READ) return NULL;
}
else
{
@@ -1197,7 +1202,7 @@
if (ef)
{
/* reference it up and return it */
- fclose(fp);
+ if (fp != NULL) fclose(fp);
ef->references++;
return ef;
}
@@ -1221,8 +1226,11 @@
ef->data = NULL;
ef->data_size = 0;
- /* FIXME: Add new ed on EET_FILE_MODE_WRITE */
- ef->ed = mode == EET_FILE_MODE_WRITE ? eet_dictionary_add() : NULL;
+ ef->ed = (mode == EET_FILE_MODE_WRITE)
+ || (ef->fp == NULL && mode == EET_FILE_MODE_READ_WRITE) ?
+ eet_dictionary_add() : NULL;
+
+ if (ef->fp == NULL && mode == EET_FILE_MODE_READ_WRITE) goto empty_file;
/* if we can't open - bail out */
if (eet_test_close(!ef->fp, ef))
@@ -1241,12 +1249,14 @@
return NULL;
}
+ empty_file:
/* we need to delete the original file in read-write mode and re-open for
writing */
if (ef->mode == EET_FILE_MODE_READ_WRITE)
{
ef->readfp = ef->fp;
unlink(ef->path);
ef->fp = fopen(ef->path, "wb");
+ fcntl(fileno(ef->fp), F_SETFD, FD_CLOEXEC);
}
/* add to cache */
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs