@@ -41,19 +41,6 @@ static void fds_stop_writing();
41
41
static void fds_reset_reading ();
42
42
static void fds_stop ();
43
43
44
- /*
45
- // debug dumping
46
- void fds_dump(char *filename)
47
- {
48
- FIL fp;
49
- unsigned int l;
50
-
51
- f_open(&fp, filename, FA_CREATE_ALWAYS | FA_WRITE);
52
- f_write(&fp, (uint8_t*) fds_raw_data, FDS_MAX_SIDE_SIZE, &l);
53
- f_close(&fp);
54
- }
55
- */
56
-
57
44
// calculate block CRC
58
45
// source: https://forums.nesdev.org/viewtopic.php?p=194867#p194867
59
46
static uint16_t fds_crc (uint8_t * data , unsigned size )
@@ -530,8 +517,7 @@ FRESULT fds_load_side(char *filename, uint8_t side, uint8_t ro)
530
517
// start ready state waiting before file loaded
531
518
fds_not_ready_time = HAL_GetTick ();
532
519
533
- strncpy (fds_filename , filename , sizeof (fds_filename ) - 1 );
534
- filename [sizeof (fds_filename ) - 1 ] = 0 ;
520
+ strlcpy (fds_filename , filename , sizeof (fds_filename ));
535
521
fds_side = side ;
536
522
537
523
if (fdskey_settings .backup_original != SAVES_EVERDRIVE )
@@ -540,7 +526,6 @@ FRESULT fds_load_side(char *filename, uint8_t side, uint8_t ro)
540
526
} else {
541
527
// everdrive-style saves
542
528
char alt_filename [_MAX_LFN + 1 ];
543
- alt_filename [sizeof (alt_filename ) - 1 ] = 0 ;
544
529
FILINFO fno ;
545
530
char * filename_no_path = fds_filename + strlen (fds_filename );
546
531
while (filename_no_path >= fds_filename )
@@ -553,9 +538,9 @@ FRESULT fds_load_side(char *filename, uint8_t side, uint8_t ro)
553
538
if (filename_no_path > fds_filename )
554
539
filename_no_path -- ;
555
540
}
556
- strncpy (alt_filename , "EDN8\\gamedata\\" , _MAX_LFN );
557
- strncat (alt_filename , filename_no_path , _MAX_LFN );
558
- strncat (alt_filename , "\\bram.srm" , _MAX_LFN );
541
+ strlcpy (alt_filename , "EDN8\\gamedata\\" , sizeof ( alt_filename ) );
542
+ strlcat (alt_filename , filename_no_path , sizeof ( alt_filename ) );
543
+ strlcat (alt_filename , "\\bram.srm" , sizeof ( alt_filename ) );
559
544
fr = f_stat (alt_filename , & fno );
560
545
if (fr == FR_OK )
561
546
fr = f_open (& fp , alt_filename , FA_READ );
@@ -745,15 +730,14 @@ FRESULT fds_save()
745
730
}
746
731
747
732
char alt_filename [_MAX_LFN + 1 ];
748
- alt_filename [sizeof (alt_filename ) - 1 ] = 0 ;
749
733
if (fdskey_settings .backup_original == SAVES_REWRITE_BACKUP || fdskey_settings .backup_original == SAVES_EVERDRIVE )
750
734
{
751
735
// combine backup filename
752
736
if (fdskey_settings .backup_original == SAVES_REWRITE_BACKUP )
753
737
{
754
- // just add ".bad " to filename
755
- strncpy (alt_filename , fds_filename , _MAX_LFN );
756
- strncat (alt_filename , ".bak" , _MAX_LFN );
738
+ // just add ".bak " to filename
739
+ strlcpy (alt_filename , fds_filename , sizeof ( alt_filename ) );
740
+ strlcat (alt_filename , ".bak" , sizeof ( alt_filename ) );
757
741
} else {
758
742
// get filename without path
759
743
char * filename_no_path = fds_filename + strlen (fds_filename );
@@ -781,16 +765,16 @@ FRESULT fds_save()
781
765
return fr ;
782
766
}
783
767
// this directory name contains filename
784
- strncpy (alt_filename , "EDN8\\gamedata\\" , _MAX_LFN );
785
- strncat (alt_filename , filename_no_path , _MAX_LFN );
768
+ strlcpy (alt_filename , "EDN8\\gamedata\\" , sizeof ( alt_filename ) );
769
+ strlcat (alt_filename , filename_no_path , sizeof ( alt_filename ) );
786
770
fr = f_mkdir (alt_filename );
787
771
if (fr != FR_OK && fr != FR_EXIST )
788
772
{
789
773
fds_state = FDS_IDLE ;
790
774
return fr ;
791
775
}
792
776
// add save filename
793
- strncat (alt_filename , "\\bram.srm" , _MAX_LFN );
777
+ strlcat (alt_filename , "\\bram.srm" , sizeof ( alt_filename ) );
794
778
}
795
779
// check if exists
796
780
fr = f_stat (alt_filename , & fno );
@@ -810,17 +794,28 @@ FRESULT fds_save()
810
794
fds_state = FDS_IDLE ;
811
795
return fr ;
812
796
}
813
- if (( fno . fsize % FDS_ROM_SIDE_SIZE == FDS_ROM_HEADER_SIZE ) && ( fdskey_settings .backup_original == SAVES_EVERDRIVE ) )
797
+ if (fdskey_settings .backup_original == SAVES_EVERDRIVE )
814
798
{
815
- // skip header if any for everdrive save
816
- fr = f_lseek (& fp , FDS_ROM_HEADER_SIZE );
799
+ fr = f_stat (fds_filename , & fno );
817
800
if (fr != FR_OK )
818
801
{
819
802
f_close (& fp );
820
803
f_close (& fp_backup );
821
804
fds_state = FDS_IDLE ;
822
805
return fr ;
823
806
}
807
+ if (fno .fsize % FDS_ROM_SIDE_SIZE == FDS_ROM_HEADER_SIZE )
808
+ {
809
+ // skip header if any for everdrive save
810
+ fr = f_lseek (& fp , FDS_ROM_HEADER_SIZE );
811
+ if (fr != FR_OK )
812
+ {
813
+ f_close (& fp );
814
+ f_close (& fp_backup );
815
+ fds_state = FDS_IDLE ;
816
+ return fr ;
817
+ }
818
+ }
824
819
}
825
820
// copy file
826
821
do
0 commit comments