Create new cache in a tmp file

SVN revision: 46730
This commit is contained in:
Sebastian Dransfeld 2010-03-01 19:05:49 +00:00
parent f2273a3f51
commit cadc12f955
1 changed files with 17 additions and 10 deletions

View File

@ -146,14 +146,13 @@ main(int argc, char **argv)
/* TODO:
* - Add file monitor on files, so that we catch changes on files
* during whilst this program runs.
* - When creating new cache, do it on a tmp file, then rename tmp file
* to cache file.
*/
char file[PATH_MAX];
char util_file[PATH_MAX];
Eina_List *dirs;
int priority = 0;
char *dir = NULL;
int fd = 0;
int fd = 0, tmpfd;
/* init external subsystems */
if (!eet_init()) goto eet_error;
@ -201,9 +200,18 @@ main(int argc, char **argv)
if (!edd) goto edd_error;
/* create cache */
ef = eet_open(efreet_desktop_cache_file(), EET_FILE_MODE_WRITE);
snprintf(file, sizeof(file), "%s.XXXXXX", efreet_desktop_cache_file());
tmpfd = mkstemp(file);
if (tmpfd < 0) goto error;
close(tmpfd);
ef = eet_open(file, EET_FILE_MODE_WRITE);
if (!ef) goto error;
util_ef = eet_open(efreet_util_cache_file(), EET_FILE_MODE_WRITE);
snprintf(util_file, sizeof(util_file), "%s.XXXXXX", efreet_util_cache_file());
tmpfd = mkstemp(util_file);
if (tmpfd < 0) goto error;
close(tmpfd);
util_ef = eet_open(util_file, EET_FILE_MODE_WRITE);
if (!util_ef) goto error;
file_ids = eina_hash_string_superfast_new(NULL);
@ -232,6 +240,10 @@ main(int argc, char **argv)
eet_close(util_ef);
eet_close(ef);
/* rename tmp files to real files */
if (rename(file, efreet_desktop_cache_file()) < 0) goto error;
if (rename(util_file, efreet_util_cache_file()) < 0) goto error;
efreet_desktop_edd_shutdown(edd);
efreet_shutdown();
eet_shutdown();
@ -239,20 +251,15 @@ main(int argc, char **argv)
close(fd);
return 0;
error:
printf("error\n");
IF_FREE(dir);
efreet_desktop_edd_shutdown(edd);
edd_error:
printf("error\n");
efreet_shutdown();
efreet_error:
printf("error\n");
eina_shutdown();
eina_error:
printf("error\n");
eet_shutdown();
eet_error:
printf("error\n");
if (fd > 0) close(fd);
return 1;
}