From 8c058b9ede5f7ac26f0bca05a71e6090c607d797 Mon Sep 17 00:00:00 2001 From: "prompt.ac/@jeffrey" Date: Fri, 10 Apr 2026 10:52:19 -0700 Subject: [PATCH] fix(native): fail install on format and copy errors --- fedac/native/src/ac-native.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/fedac/native/src/ac-native.c b/fedac/native/src/ac-native.c index 81f764f689..2107a5b7b2 100644 --- a/fedac/native/src/ac-native.c +++ b/fedac/native/src/ac-native.c @@ -750,16 +750,29 @@ static long copy_file(const char *src, const char *dst) { if (written != n) { ac_log("[copy_file] write failed at offset %ld: wanted %zu got %zu errno=%d\n", total, n, written, errno); - total += written; // count partial write - break; + fclose(out); + fclose(in); + return -1; } total += n; } + if (ferror(in)) { + ac_log("[copy_file] read failed from %s: errno=%d\n", src, errno); + fclose(out); + fclose(in); + return -1; + } if (fflush(out) != 0) { ac_log("[copy_file] fflush failed: errno=%d\n", errno); + fclose(out); + fclose(in); + return -1; } if (fsync(fileno(out)) != 0) { ac_log("[copy_file] fsync failed: errno=%d\n", errno); + fclose(out); + fclose(in); + return -1; } fclose(out); fclose(in); @@ -1014,6 +1027,16 @@ static int auto_install_to_hd(ACGraph *graph, ACFramebuffer *screen, snprintf(rcmd, sizeof(rcmd), "mkfs.vfat -F 32 -n AC-NATIVE %s 2>&1", devpath); rrc = system(rcmd); ac_log("[install] mkfs rc=%d\n", rrc); + if (rrc != 0) { + snprintf(install_fail_reason, sizeof(install_fail_reason), + "format failed on %s", devpath); + snprintf(install_fail_detail, sizeof(install_fail_detail), + "mkfs.vfat rc=%d after repartition", rrc); + if (display) + draw_boot_status(graph, screen, display, "format failed!", pixel_scale); + usleep(2000000); + continue; + } usleep(500000); // Remount and retry if (mount(devpath, "/tmp/hd", "vfat", 0, NULL) != 0) { -- 2.54.0