diff options
-rw-r--r-- | firmware/drivers/fat.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/firmware/drivers/fat.c b/firmware/drivers/fat.c index efb91cff33..4333f55d0d 100644 --- a/firmware/drivers/fat.c +++ b/firmware/drivers/fat.c | |||
@@ -756,6 +756,7 @@ int fat_create_file(unsigned int currdir, char *name) | |||
756 | 756 | ||
757 | static int parse_direntry(struct fat_direntry *de, unsigned char *buf) | 757 | static int parse_direntry(struct fat_direntry *de, unsigned char *buf) |
758 | { | 758 | { |
759 | int i=0,j=0; | ||
759 | memset(de, 0, sizeof(struct fat_direntry)); | 760 | memset(de, 0, sizeof(struct fat_direntry)); |
760 | de->attr = buf[FATDIR_ATTR]; | 761 | de->attr = buf[FATDIR_ATTR]; |
761 | de->crttimetenth = buf[FATDIR_CRTTIMETENTH]; | 762 | de->crttimetenth = buf[FATDIR_CRTTIMETENTH]; |
@@ -766,8 +767,15 @@ static int parse_direntry(struct fat_direntry *de, unsigned char *buf) | |||
766 | de->filesize = BYTES2INT32(buf,FATDIR_FILESIZE); | 767 | de->filesize = BYTES2INT32(buf,FATDIR_FILESIZE); |
767 | de->firstcluster = BYTES2INT16(buf,FATDIR_FSTCLUSLO) | | 768 | de->firstcluster = BYTES2INT16(buf,FATDIR_FSTCLUSLO) | |
768 | (BYTES2INT16(buf,FATDIR_FSTCLUSHI) << 16); | 769 | (BYTES2INT16(buf,FATDIR_FSTCLUSHI) << 16); |
769 | strncpy(de->name, &buf[FATDIR_NAME], 11); | ||
770 | 770 | ||
771 | /* fix the name */ | ||
772 | for (i=0; (i<8) && (buf[FATDIR_NAME+i] != ' '); i++) | ||
773 | de->name[j++] = buf[FATDIR_NAME+i]; | ||
774 | if ( buf[FATDIR_NAME+8] != ' ' ) { | ||
775 | de->name[j++] = '.'; | ||
776 | for (i=8; (i<11) && (buf[FATDIR_NAME+i] != ' '); i++) | ||
777 | de->name[j++] = buf[FATDIR_NAME+i]; | ||
778 | } | ||
771 | return 1; | 779 | return 1; |
772 | } | 780 | } |
773 | 781 | ||