mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'bugfix/fatfsgen-enable-lfn-for-nonascii' into 'master'
fatfsgen.py: use lfn record when forbidden character detected in the file name Closes IDF-5981 See merge request espressif/esp-idf!20180
This commit is contained in:
commit
2dcb19515a
@ -12,8 +12,9 @@ from .fatfs_state import FATFSState
|
|||||||
from .long_filename_utils import (build_lfn_full_name, build_lfn_unique_entry_name_order,
|
from .long_filename_utils import (build_lfn_full_name, build_lfn_unique_entry_name_order,
|
||||||
get_required_lfn_entries_count, split_name_to_lfn_entries,
|
get_required_lfn_entries_count, split_name_to_lfn_entries,
|
||||||
split_name_to_lfn_entry_blocks)
|
split_name_to_lfn_entry_blocks)
|
||||||
from .utils import (DATETIME, MAX_EXT_SIZE, MAX_NAME_SIZE, FATDefaults, build_lfn_short_entry_name, build_name,
|
from .utils import (DATETIME, INVALID_SFN_CHARS_PATTERN, MAX_EXT_SIZE, MAX_NAME_SIZE, FATDefaults,
|
||||||
lfn_checksum, required_clusters_count, split_content_into_sectors, split_to_name_and_extension)
|
build_lfn_short_entry_name, build_name, lfn_checksum, required_clusters_count,
|
||||||
|
split_content_into_sectors, split_to_name_and_extension)
|
||||||
|
|
||||||
|
|
||||||
class File:
|
class File:
|
||||||
@ -235,6 +236,13 @@ class Directory:
|
|||||||
time=time)
|
time=time)
|
||||||
return free_cluster, free_entry, target_dir
|
return free_cluster, free_entry, target_dir
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _is_valid_sfn(name: str, extension: str) -> bool:
|
||||||
|
if INVALID_SFN_CHARS_PATTERN.search(name) or INVALID_SFN_CHARS_PATTERN.search(name):
|
||||||
|
return False
|
||||||
|
ret: bool = len(name) <= MAX_NAME_SIZE and len(extension) <= MAX_EXT_SIZE
|
||||||
|
return ret
|
||||||
|
|
||||||
def allocate_object(self,
|
def allocate_object(self,
|
||||||
name,
|
name,
|
||||||
entity_type,
|
entity_type,
|
||||||
@ -251,12 +259,10 @@ class Directory:
|
|||||||
target_dir: Directory = self if not path_from_root else self.recursive_search(path_from_root, self)
|
target_dir: Directory = self if not path_from_root else self.recursive_search(path_from_root, self)
|
||||||
free_entry: Entry = target_dir.find_free_entry() or target_dir.chain_directory()
|
free_entry: Entry = target_dir.find_free_entry() or target_dir.chain_directory()
|
||||||
|
|
||||||
name_fits_short_struct: bool = len(name) <= MAX_NAME_SIZE and len(extension) <= MAX_EXT_SIZE
|
|
||||||
|
|
||||||
fatfs_date_ = (object_timestamp_.year, object_timestamp_.month, object_timestamp_.day)
|
fatfs_date_ = (object_timestamp_.year, object_timestamp_.month, object_timestamp_.day)
|
||||||
fatfs_time_ = (object_timestamp_.hour, object_timestamp_.minute, object_timestamp_.second)
|
fatfs_time_ = (object_timestamp_.hour, object_timestamp_.minute, object_timestamp_.second)
|
||||||
|
|
||||||
if not self.fatfs_state.long_names_enabled or name_fits_short_struct:
|
if not self.fatfs_state.long_names_enabled or self._is_valid_sfn(name, extension):
|
||||||
free_entry.allocate_entry(first_cluster_id=free_cluster.id,
|
free_entry.allocate_entry(first_cluster_id=free_cluster.id,
|
||||||
entity_name=name,
|
entity_name=name,
|
||||||
entity_extension=extension,
|
entity_extension=extension,
|
||||||
|
@ -4,12 +4,16 @@
|
|||||||
import argparse
|
import argparse
|
||||||
import binascii
|
import binascii
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import List, Optional, Tuple
|
from typing import List, Optional, Tuple
|
||||||
|
|
||||||
from construct import BitsInteger, BitStruct, Int16ul
|
from construct import BitsInteger, BitStruct, Int16ul
|
||||||
|
|
||||||
|
# the regex pattern defines symbols that are allowed by long file names but not by short file names
|
||||||
|
INVALID_SFN_CHARS_PATTERN = re.compile(r'[.+,;=\[\]]')
|
||||||
|
|
||||||
FAT12_MAX_CLUSTERS: int = 4085
|
FAT12_MAX_CLUSTERS: int = 4085
|
||||||
FAT16_MAX_CLUSTERS: int = 65525
|
FAT16_MAX_CLUSTERS: int = 65525
|
||||||
RESERVED_CLUSTERS_COUNT: int = 2
|
RESERVED_CLUSTERS_COUNT: int = 2
|
||||||
|
Loading…
Reference in New Issue
Block a user