fix compilation on later glibc/gcc versions with stricter checks
authorFelix Fietkau <nbd@openwrt.org>
Mon, 23 Feb 2009 14:57:12 +0000 (15:57 +0100)
committerFelix Fietkau <nbd@openwrt.org>
Mon, 23 Feb 2009 14:57:12 +0000 (15:57 +0100)
file.c
history.c
libuci.c

diff --git a/file.c b/file.c
index 1abe8ff..a58e392 100644 (file)
--- a/file.c
+++ b/file.c
@@ -454,7 +454,8 @@ void uci_file_commit(struct uci_context *ctx, struct uci_package **package, bool
        }
 
        rewind(f);
        }
 
        rewind(f);
-       ftruncate(fileno(f), 0);
+       if (ftruncate(fileno(f), 0) < 0)
+               UCI_THROW(ctx, UCI_ERR_IO);
 
        uci_export(ctx, f, p, false);
        UCI_TRAP_RESTORE(ctx);
 
        uci_export(ctx, f, p, false);
        UCI_TRAP_RESTORE(ctx);
index a31dbfa..e3e19de 100644 (file)
--- a/history.c
+++ b/history.c
@@ -250,7 +250,10 @@ static int uci_load_history(struct uci_context *ctx, struct uci_package *p, bool
        changes = uci_load_history_file(ctx, p, filename, &f, flush);
        if (flush && f && (changes > 0)) {
                rewind(f);
        changes = uci_load_history_file(ctx, p, filename, &f, flush);
        if (flush && f && (changes > 0)) {
                rewind(f);
-               ftruncate(fileno(f), 0);
+               if (ftruncate(fileno(f), 0) < 0) {
+                       uci_close_stream(f);
+                       UCI_THROW(ctx, UCI_ERR_IO);
+               }
        }
        if (filename)
                free(filename);
        }
        if (filename)
                free(filename);
@@ -308,7 +311,8 @@ static void uci_filter_history(struct uci_context *ctx, const char *name, const
 
        /* rebuild the history file */
        rewind(f);
 
        /* rebuild the history file */
        rewind(f);
-       ftruncate(fileno(f), 0);
+       if (ftruncate(fileno(f), 0) < 0)
+               UCI_THROW(ctx, UCI_ERR_IO);
        uci_foreach_element_safe(&list, tmp, e) {
                fprintf(f, "%s\n", e->name);
                uci_free_element(e);
        uci_foreach_element_safe(&list, tmp, e) {
                fprintf(f, "%s\n", e->name);
                uci_free_element(e);
index bc68462..947b029 100644 (file)
--- a/libuci.c
+++ b/libuci.c
@@ -167,13 +167,15 @@ uci_get_errorstr(struct uci_context *ctx, char **dest, const char *prefix)
        default:
                break;
        }
        default:
                break;
        }
-       if (dest)
-               asprintf(dest, format,
+       if (dest) {
+               err = asprintf(dest, format,
                        (prefix ? prefix : ""), (prefix ? ": " : ""),
                        (ctx->func ? ctx->func : ""), (ctx->func ? ": " : ""),
                        uci_errstr[err],
                        error_info);
                        (prefix ? prefix : ""), (prefix ? ": " : ""),
                        (ctx->func ? ctx->func : ""), (ctx->func ? ": " : ""),
                        uci_errstr[err],
                        error_info);
-       else {
+               if (err < 0)
+                       *dest = NULL;
+       } else {
                strcat(error_info, "\n");
                fprintf(stderr, format,
                        (prefix ? prefix : ""), (prefix ? ": " : ""),
                strcat(error_info, "\n");
                fprintf(stderr, format,
                        (prefix ? prefix : ""), (prefix ? ": " : ""),