Browse Source

fix compilation on later glibc/gcc versions with stricter checks

Felix Fietkau 15 years ago
parent
commit
c60702b55c
3 changed files with 13 additions and 6 deletions
  1. 2 1
      file.c
  2. 6 2
      history.c
  3. 5 3
      libuci.c

+ 2 - 1
file.c

@@ -454,7 +454,8 @@ void uci_file_commit(struct uci_context *ctx, struct uci_package **package, bool
 	}
 
 	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);

+ 6 - 2
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);
-		ftruncate(fileno(f), 0);
+		if (ftruncate(fileno(f), 0) < 0) {
+			uci_close_stream(f);
+			UCI_THROW(ctx, UCI_ERR_IO);
+		}
 	}
 	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);
-	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);

+ 5 - 3
libuci.c

@@ -167,13 +167,15 @@ uci_get_errorstr(struct uci_context *ctx, char **dest, const char *prefix)
 	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);
-	else {
+		if (err < 0)
+			*dest = NULL;
+	} else {
 		strcat(error_info, "\n");
 		fprintf(stderr, format,
 			(prefix ? prefix : ""), (prefix ? ": " : ""),