From 0ab0519c0178d9e3fb6016c2c98ae466ea8731ec Mon Sep 17 00:00:00 2001
From: PavelSindler <sindlerpa@gmail.com>
Date: Tue, 12 Jun 2018 14:35:25 +0200
Subject: [PATCH] power panic fix: short filenames

---
 Firmware/Marlin_main.cpp |  6 ++----
 Firmware/ultralcd.cpp    | 11 ++++++++++-
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp
index ab1ce505..a74d3cac 100644
--- a/Firmware/Marlin_main.cpp
+++ b/Firmware/Marlin_main.cpp
@@ -8631,7 +8631,7 @@ void restore_print_from_eeprom() {
 	for (int i = 0; i < depth; i++) {
 		for (int j = 0; j < 8; j++) {
 			dir_name[j] = eeprom_read_byte((uint8_t*)EEPROM_DIRS + j + 8 * i);
-			
+
 		}
 		dir_name[8] = '\0';
 		MYSERIAL.println(dir_name);
@@ -8640,15 +8640,13 @@ void restore_print_from_eeprom() {
 
 	for (int i = 0; i < 8; i++) {
 		filename[i] = eeprom_read_byte((uint8_t*)EEPROM_FILENAME + i);
-		
+
 	}
 	filename[8] = '\0';
 
 	MYSERIAL.print(filename);
 	strcat_P(filename, PSTR(".gco"));
 	sprintf_P(cmd, PSTR("M23 %s"), filename);
-	for (c = &cmd[4]; *c; c++)
-		 *c = tolower(*c);
 	enquecommand(cmd);
 	uint32_t position = eeprom_read_dword((uint32_t*)(EEPROM_FILE_POSITION));
 	SERIAL_ECHOPGM("Position read from eeprom:");
diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp
index 1a222803..c92e4835 100644
--- a/Firmware/ultralcd.cpp
+++ b/Firmware/ultralcd.cpp
@@ -7131,8 +7131,17 @@ static void menu_action_sdfile(const char* filename, char* longFilename)
   for (c = &cmd[4]; *c; c++)
     *c = tolower(*c);
 
+  const char end[5] = ".gco";
+
+  //we are storing just first 8 characters of 8.3 filename assuming that extension is always ".gco"
   for (int i = 0; i < 8; i++) {
-	  eeprom_write_byte((uint8_t*)EEPROM_FILENAME + i, filename[i]);
+	  if (strcmp((cmd + i + 4), end) == 0) { 
+		  //filename is shorter then 8.3, store '\0' character on position where ".gco" string was found to terminate stored string properly
+ 		  eeprom_write_byte((uint8_t*)EEPROM_FILENAME + i, '\0');
+	  }
+	  else {
+		  eeprom_write_byte((uint8_t*)EEPROM_FILENAME + i, cmd[i + 4]);
+	  }
   }
 
   uint8_t depth = (uint8_t)card.getWorkDirDepth();