aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libibex/ChangeLog4
-rw-r--r--libibex/ibex_block.c13
2 files changed, 12 insertions, 5 deletions
diff --git a/libibex/ChangeLog b/libibex/ChangeLog
index 4f85c3845e..5c17fab03e 100644
--- a/libibex/ChangeLog
+++ b/libibex/ChangeLog
@@ -1,3 +1,7 @@
+2001-10-29 <NotZed@Ximian.com>
+
+ * ibex_block.c (ibex_move): Always rename file even if mv failed.
+
2001-10-28 <NotZed@Ximian.com>
* ibex_block.c (ibex_move): New api entry to move an ibex file in
diff --git a/libibex/ibex_block.c b/libibex/ibex_block.c
index 3c96885f4f..5ac538346b 100644
--- a/libibex/ibex_block.c
+++ b/libibex/ibex_block.c
@@ -494,23 +494,26 @@ int ibex_close (ibex *ib)
/* rename/move the ibex file */
int ibex_move(ibex *ib, const char *newname)
{
- int ret = -1;
+ int ret = 0, error;
IBEX_LOCK(ib);
if (ib->blocks)
close_backend(ib);
- if (rename(ib->name, newname) == -1)
- goto error;
+ if (rename(ib->name, newname) == -1) {
+ ret = -1;
+ error = errno;
+ }
g_free(ib->name);
ib->name = g_strdup(newname);
- ret = 0;
-error:
IBEX_UNLOCK(ib);
+ if (ret == -1)
+ errno = error;
+
return ret;
}