diff options
Diffstat (limited to 'libasm/asm_end.c')
| -rw-r--r-- | libasm/asm_end.c | 17 |
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; } |
