summaryrefslogtreecommitdiffstats
path: root/libasm/asm_end.c
diff options
context:
space:
mode:
Diffstat (limited to 'libasm/asm_end.c')
-rw-r--r--libasm/asm_end.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/libasm/asm_end.c b/libasm/asm_end.c
index ced24f50..7891fbb5 100644
--- a/libasm/asm_end.c
+++ b/libasm/asm_end.c
@@ -512,23 +512,32 @@ asm_end (AsmCtx_t *ctx)
if (result != 0)
return result;
+#if HAVE_DECL_FCHMOD
/* Make the new file globally readable and user/group-writable. */
if (fchmod (ctx->fd, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH) != 0)
{
__libasm_seterrno (ASM_E_CANNOT_CHMOD);
return -1;
}
+#endif
+
+ char *tmp_fname = strdup (ctx->tmp_fname);
+ char *fname = strdup (ctx->fname);
+
+ /* Free the resources. */
+ __libasm_finictx (ctx);
/* Rename output file. */
- if (rename (ctx->tmp_fname, ctx->fname) != 0)
+ result = rename (tmp_fname, fname);
+ free (tmp_fname);
+ free (fname);
+
+ if (result != 0)
{
__libasm_seterrno (ASM_E_CANNOT_RENAME);
return -1;
}
- /* Free the resources. */
- __libasm_finictx (ctx);
-
return 0;
}