file: add missing return code check for mktemp()
[project/uci.git] / file.c
diff --git a/file.c b/file.c
index f7061df..36bfdda 100644 (file)
--- a/file.c
+++ b/file.c
@@ -702,9 +702,13 @@ static void uci_file_commit(struct uci_context *ctx, struct uci_package **packag
        if ((asprintf(&filename, "%s/.%s.uci-XXXXXX", ctx->confdir, p->e.name) < 0) || !filename)
                UCI_THROW(ctx, UCI_ERR_MEM);
 
-       mktemp(filename);
-       if (!*filename)
+       if (!mktemp(filename))
+               *filename = 0;
+
+       if (!*filename) {
+               free(filename);
                UCI_THROW(ctx, UCI_ERR_IO);
+       }
 
        if ((stat(filename, &statbuf) == 0) && ((statbuf.st_mode & S_IFMT) != S_IFREG))
                UCI_THROW(ctx, UCI_ERR_IO);
@@ -755,10 +759,8 @@ static void uci_file_commit(struct uci_context *ctx, struct uci_package **packag
        UCI_TRAP_RESTORE(ctx);
 
 done:
-       if (name)
-               free(name);
-       if (path)
-               free(path);
+       free(name);
+       free(path);
        uci_close_stream(f1);
        if (do_rename && rename(filename, p->path)) {
                unlink(filename);