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();