aboutsummaryrefslogtreecommitdiff
path: root/src/utils.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-08-05 09:15:29 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-08-05 09:15:29 +0000
commite2a9edf210f40519169a1169801df56fcb4ef0fc (patch)
tree7f7503780992d525b6eec18f1d9a2aff89dc67f9 /src/utils.c
parent3ec864159a1792df642a75611363c39fb1fd1cd3 (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.c25
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");