From cc35cb3876ed95163b4715bc29da96813906663a Mon Sep 17 00:00:00 2001
From: Giuliano Zaro <3684609+GMagician@users.noreply.github.com>
Date: Sun, 16 Apr 2023 03:26:08 +0200
Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Configuration=20Embedding?=
 =?UTF-8?q?=20(#25688)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Marlin/src/gcode/eeprom/M500-M504.cpp           | 16 ++++++++++++----
 buildroot/share/PlatformIO/scripts/signature.py |  3 ++-
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/Marlin/src/gcode/eeprom/M500-M504.cpp b/Marlin/src/gcode/eeprom/M500-M504.cpp
index 6da1d1cbd73..31da2c5adf8 100644
--- a/Marlin/src/gcode/eeprom/M500-M504.cpp
+++ b/Marlin/src/gcode/eeprom/M500-M504.cpp
@@ -66,11 +66,19 @@ void GcodeSuite::M502() {
 
     #if ENABLED(CONFIGURATION_EMBEDDING)
       if (parser.seen_test('C')) {
-        SdBaseFile file;
-        const uint16_t size = sizeof(mc_zip);
+        MediaFile file;
         // Need to create the config size on the SD card
-        if (file.open(card.getroot(), "mc.zip", O_WRITE|O_CREAT) && file.write(pgm_read_ptr(mc_zip), size) != -1 && file.close())
-          SERIAL_ECHO_MSG("Configuration saved as 'mc.zip'");
+        MediaFile root = card.getroot();
+        if (file.open(&root, "mc.zip", O_WRITE|O_CREAT)) {
+          bool success = true;
+          for (uint16_t i = 0; success && i < sizeof(mc_zip); ++i) {
+            const uint8_t c = pgm_read_byte(&mc_zip[i]);
+            file.write(c);
+          }
+          success = file.close() && success;
+
+          if (success) SERIAL_ECHO_MSG("Configuration saved as 'mc.zip'");
+        }
       }
     #endif
   }
diff --git a/buildroot/share/PlatformIO/scripts/signature.py b/buildroot/share/PlatformIO/scripts/signature.py
index 4fc0084e575..0da02f837b2 100644
--- a/buildroot/share/PlatformIO/scripts/signature.py
+++ b/buildroot/share/PlatformIO/scripts/signature.py
@@ -56,13 +56,14 @@ def compute_build_signature(env):
     files_to_keep = [ 'Marlin/Configuration.h', 'Marlin/Configuration_adv.h' ]
 
     build_path = Path(env['PROJECT_BUILD_DIR'], env['PIOENV'])
+    build_path_relative = Path('.pio', 'build', env['PIOENV'])
 
     # Check if we can skip processing
     hashes = ''
     for header in files_to_keep:
         hashes += get_file_sha256sum(header)[0:10]
 
-    marlin_json = build_path / 'marlin_config.json'
+    marlin_json = build_path_relative / 'marlin_config.json'
     marlin_zip = build_path / 'mc.zip'
 
     # Read existing config file