summaryrefslogtreecommitdiff
path: root/firmware/drivers/fat.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/fat.c')
-rw-r--r--firmware/drivers/fat.c10
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
757static int parse_direntry(struct fat_direntry *de, unsigned char *buf) 757static 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