diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2005-08-05 09:15:29 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2005-08-05 09:15:29 +0000 |
commit | e2a9edf210f40519169a1169801df56fcb4ef0fc (patch) | |
tree | 7f7503780992d525b6eec18f1d9a2aff89dc67f9 /src/utils.c | |
parent | 3ec864159a1792df642a75611363c39fb1fd1cd3 (diff) |
added rename_force().
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@470 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src/utils.c')
-rw-r--r-- | src/utils.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/utils.c b/src/utils.c index 26a43134..518b0737 100644 --- a/src/utils.c +++ b/src/utils.c @@ -2221,6 +2221,21 @@ leave: return ret; } +gint rename_force(const gchar *oldpath, const gchar *newpath) +{ +#ifndef G_OS_UNIX + if (!is_file_entry_exist(oldpath)) { + errno = ENOENT; + return -1; + } + if (is_file_exist(newpath)) { + if (unlink(newpath) < 0) + FILE_OP_ERROR(newpath, "unlink"); + } +#endif + return rename(oldpath, newpath); +} + gint copy_file(const gchar *src, const gchar *dest, gboolean keep_backup) { FILE *src_fp, *dest_fp; @@ -2235,7 +2250,7 @@ gint copy_file(const gchar *src, const gchar *dest, gboolean keep_backup) } if (is_file_exist(dest)) { dest_bak = g_strconcat(dest, ".bak", NULL); - if (rename(dest, dest_bak) < 0) { + if (rename_force(dest, dest_bak) < 0) { FILE_OP_ERROR(dest, "rename"); fclose(src_fp); g_free(dest_bak); @@ -2247,7 +2262,7 @@ gint copy_file(const gchar *src, const gchar *dest, gboolean keep_backup) FILE_OP_ERROR(dest, "fopen"); fclose(src_fp); if (dest_bak) { - if (rename(dest_bak, dest) < 0) + if (rename_force(dest_bak, dest) < 0) FILE_OP_ERROR(dest_bak, "rename"); g_free(dest_bak); } @@ -2268,7 +2283,7 @@ gint copy_file(const gchar *src, const gchar *dest, gboolean keep_backup) fclose(src_fp); unlink(dest); if (dest_bak) { - if (rename(dest_bak, dest) < 0) + if (rename_force(dest_bak, dest) < 0) FILE_OP_ERROR(dest_bak, "rename"); g_free(dest_bak); } @@ -2289,7 +2304,7 @@ gint copy_file(const gchar *src, const gchar *dest, gboolean keep_backup) if (err) { unlink(dest); if (dest_bak) { - if (rename(dest_bak, dest) < 0) + if (rename_force(dest_bak, dest) < 0) FILE_OP_ERROR(dest_bak, "rename"); g_free(dest_bak); } @@ -2346,7 +2361,7 @@ gint move_file(const gchar *src, const gchar *dest, gboolean overwrite) return -1; } - if (rename(src, dest) == 0) return 0; + if (rename_force(src, dest) == 0) return 0; if (EXDEV != errno) { FILE_OP_ERROR(src, "rename"); |