Only run the merge tool on files with differences
If the backup file and the data file are equal, there is no need to run the merge tool. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
This commit is contained in:
parent
7920e761c9
commit
ae7d2d4c6b
@ -290,13 +290,21 @@ static inline void key_generic_reload(void)
|
|||||||
io_save_todo(path_todo_backup);
|
io_save_todo(path_todo_backup);
|
||||||
io_save_mutex_unlock();
|
io_save_mutex_unlock();
|
||||||
|
|
||||||
const char *arg_apts[] = { conf.mergetool, path_apts,
|
if (!io_files_equal(path_apts, path_apts_backup)) {
|
||||||
path_apts_backup, NULL };
|
const char *arg_apts[] = { conf.mergetool,
|
||||||
|
path_apts,
|
||||||
|
path_apts_backup,
|
||||||
|
NULL };
|
||||||
wins_launch_external(arg_apts);
|
wins_launch_external(arg_apts);
|
||||||
|
}
|
||||||
|
|
||||||
const char *arg_todo[] = { conf.mergetool, path_todo,
|
if (!io_files_equal(path_todo, path_todo_backup)) {
|
||||||
path_todo_backup, NULL };
|
const char *arg_todo[] = { conf.mergetool,
|
||||||
|
path_todo,
|
||||||
|
path_todo_backup,
|
||||||
|
NULL };
|
||||||
wins_launch_external(arg_todo);
|
wins_launch_external(arg_todo);
|
||||||
|
}
|
||||||
|
|
||||||
xfree(path_apts_backup);
|
xfree(path_apts_backup);
|
||||||
xfree(path_todo_backup);
|
xfree(path_todo_backup);
|
||||||
|
@ -781,6 +781,7 @@ void io_stop_psave_thread(void);
|
|||||||
void io_set_lock(void);
|
void io_set_lock(void);
|
||||||
unsigned io_dump_pid(char *);
|
unsigned io_dump_pid(char *);
|
||||||
unsigned io_get_pid(char *);
|
unsigned io_get_pid(char *);
|
||||||
|
int io_files_equal(const char *, const char *);
|
||||||
int io_file_is_empty(char *);
|
int io_file_is_empty(char *);
|
||||||
int io_file_cp(const char *, const char *);
|
int io_file_cp(const char *, const char *);
|
||||||
void io_unset_modified(void);
|
void io_unset_modified(void);
|
||||||
|
26
src/io.c
26
src/io.c
@ -1332,6 +1332,32 @@ int io_file_is_empty(char *file)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check whether two files are equal.
|
||||||
|
*/
|
||||||
|
int io_files_equal(const char *file1, const char *file2)
|
||||||
|
{
|
||||||
|
FILE *fp1, *fp2;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
if (!file1 || !file2)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
fp1 = fopen(file1, "rb");
|
||||||
|
fp2 = fopen(file2, "rb");
|
||||||
|
|
||||||
|
while (!feof(fp1) && !feof(fp2)) {
|
||||||
|
if (fgetc(fp1) != fgetc(fp2))
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 1;
|
||||||
|
cleanup:
|
||||||
|
fclose(fp1);
|
||||||
|
fclose(fp2);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copy an existing file to a new location.
|
* Copy an existing file to a new location.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user