Commit Graph

40 Commits (c9c6857c7c3ecda233a4c3d5180954f52451dc32)

Author SHA1 Message Date
Martin Kojtal 8c78649078
Merge pull request #5829 from deepikabhavnani/fat_issue_5780_3
Fix: Sector/Size overflow from uint32_t
2018-01-15 15:22:11 +00:00
deepikabhavnani c86d757267 Fix: Sector/Size overflow from uint32_t
FATFilesystem declares sector count and size as uint32_t and block
device class arguments are addr and size which is uint64_t
While passing arguments to program/read/write API's of block device,
multiplication of uint32_t*uint32_t was not typecasted properly to
uint64_t which resulted in MSB truncation.

Eg. If block 0x800000 is accessed with block size 0x200, addr to be
passed (0x800000*0x200)0x100000000, but actual address passed was 0x0
which resulted in over-writting the root directory, and hence corrupted
filesystem
2018-01-12 11:12:34 -06:00
Christopher Haster f1a9815876 Moved squiggly bracket placement per mbed style 2018-01-03 12:30:50 -06:00
Deepika 7a90be0ce1 Added statvfs API to get storage statistics
The API is as per posix standard, but does not provide stats for file/directory.
Stats buffer (block size, total block count, free block count) is filled for
entire mounted filesystem.
2017-12-29 16:42:31 -06:00
Deepika a2a7c28191 Upgrade ChanFs to R0.13a 2017-11-20 16:02:39 -06:00
Colin Hogben 452e290821 FATFileSystem: provide working dir_rewind and dir_seek
The index field of FATFS_DIR does not encapsulate all the context
required to reposition the directory traversal.  ChaN provides
f_rewinddir() but no directory seek, so rewind if necessary then step
through until the desired index is reached.
2017-11-16 12:24:04 +00:00
Christopher Haster ee88097cb6 fatfs: Adopted the trim function in the FAT filesystem 2017-09-05 11:16:15 -05:00
Martin Kojtal 3f347ed290 Merge pull request #4843 from geky/fat-min-block
fatfs: Add lower bound to block sizes
2017-09-04 16:52:05 +01:00
Christopher Haster 626256e104 fatfs: Added some asserts on block device geometry 2017-08-28 14:54:33 -05:00
Christopher Haster a153dc625c fatfs: Changed documentation of format to emphasize byte clusters 2017-08-28 14:54:24 -05:00
Christopher Haster f927996275 fatfs: Added lower bound to block sizes
Some block devices (for example I2C EEPROM) can be erased at the byte
level. These aren't really block devices, but fall under the block
device API. For these devices, the fat filesystem needs to use a lower
bound on the block size. In this case we used 512 bytes is used since
it is already a standard.
2017-08-15 12:59:52 -05:00
Christopher Haster 0f8dffb7a4 fs: Added FileSystem::reformat
This function provides a shortcut to reformatting a mounted filesystem.

Also, since this function is a virtual member of the FileSystem class,
the user does not need to know the underlying filesystem to reformat
the underlying storage.
2017-08-14 17:05:40 -05:00
Martin Kojtal 1849370100 Merge pull request #4652 from geky/fat-fix-unaligned-ioctl
fatfs: Fix unaligned access in disk_ioctl
2017-07-13 16:49:01 +02:00
Christopher Haster 1775e1f782 fatfs: Added full support for multiple fs volume prefixes
This is only an issue when multiple fatfss are used simultaneously.
Repeated use of a single fatfs instance (even with different storages)
do not show this issue.

Full support requires path prefixes being applied for every function
that takes a path. Note: this is only required filesystems after the
first mounted filesystem. The first filesystem has no penalty.
2017-06-29 16:56:14 -05:00
Jimmy Brisson 9f829ffe26 Merge pull request #4559 from geky/fat-remove-fat_filesystem_set_errno
fatfs: Remove unused fat_filesystem_set_errno function
2017-06-29 11:06:22 -05:00
Christopher Haster a9f5d886fb fatfs: Fix unaligned access in disk_ioctl
Unlike the other disk_ioctl options, GET_SECTOR_SIZE is interpreted
as a 16-bit WORD, instead of a 32-bit DWORD. This caused an unaligned
access error on M0 platforms.
2017-06-27 15:44:04 -05:00
Christopher Haster d7fe4ff599 fatfs: Fixed initialization of block device in mount/unmount functions
At some point the "mount" parameter for "f_mount" was name "force". This
led to a bit of confusion that ended with the default mount function
never calling block device init.

This is fine, since the block device can be manually initialized, but
a better user experience is where the filesystem initializes the block
device for the user.

This is backwards compatible due to the repeatability of the block
device init functions.
2017-06-14 16:35:15 -05:00
Christopher Haster f158d81aab fatfs: Removed unused fat_filesystem_set_errno function
At some point this was replaced by fat_error_remap
2017-06-14 15:29:30 -05:00
Christopher Haster c0aa841ffd FAT: Added support for block sizes of 512-4096 bytes
This is necessary for support of block devices with >512 byte
blocks, such as most SPI flash parts.

- Enabled support of up to 4096 byte blocks
- Added support for heap-backed buffers using _FS_HEAPBUF
  - Necessary to avoid stack overflows
  - Avoids over-aggresive allocations of _MAX_SS
- Enabled _FS_TINY to further reduce memory footprint
  - Haven't found a downside for this yet except for possible
    thread contention
2017-06-03 07:10:48 +01:00
Kevin Bracey 533910cb87 Correct return type of FileHandle::size()
File size should be off_t, not size_t.
2017-05-31 15:02:11 +03:00
Christopher Haster 3f92a15960 FAT: Added support for multiple active filesystems
- Increased _VOLUMES to 4
- Fixed a few issues in the FATFileSystem's _fsid
- Added tests for multiple partitions of fatfs
2017-05-24 11:18:47 -05:00
Christopher Haster d1468a68ab FAT: Removed implicit MBR from FAT filesystem during format
- Implicit MBR still allowed during mount
  - maintains storage compatibility
- Not needed
  - MBR utility is not exposed through the FAT filesystem,
    so the only used partition was always the first. Omitting
    the MBR is functionally equivalent
  - Saves a few blocks on storage for MBR + offset
    for FAT alignment
- Duplicated with MBRBlockDevice
  - The implicit MBR actually prevents nesting a FAT filesystem
    in the MBRBlockDevice
2017-05-23 11:56:00 -05:00
Christopher Haster c4649afba5 Filesystem: Last minute changes due to feedback on directory iteration
- Changed to use dirent structure type
- Fixed memory leak in closedir
2017-02-24 12:03:14 -06:00
Christopher Haster b9122c73f9 Filesystem: Integrate error handling between c++/posix layers 2017-02-24 12:03:09 -06:00
Christopher Haster eea5c9f08a Filesystem: Integration with retarget code 2017-02-24 11:55:37 -06:00
Christopher Haster e5197ceaca Filesystem: Initial integration with the FATFileSystem 2017-02-24 11:53:17 -06:00
Simon Hughes 410c2f8dc0 STORAGE: rebased with master and fixed FATFileSystem.cpp merge conflicts. 2017-02-23 16:50:34 +00:00
Christopher Haster ea5ac4bb4d Storage: Last minute changes to the block device api
- Remove write set of functions
  - Caused confusion with small benefit
  - Trivial to add later
- Remove unused error codes
  - Initial expirementation indicates most of these may not be useful
  - Trivial to add later
- Removed bd_error_t
  - Carries to additional type information, int already carries
    sufficient connotation
  - Trivial to add later

per @c1728p9, @sg-
2017-02-23 16:39:49 +00:00
Simon Hughes 840c77793b STORAGE: Pull request 3762 review feedback changes.
- Fixing code formatting errors with astyle tool.
- Replaced use of TOOLCHAIN_xxx macros with compiler emitted macros.
- Added const to BlockDevice::get_xxx_size() member functions.
- Added documentation for FAT filesystem thread support.
- Added documentation for fat_filesystem_set_errno().
- Added documentation clarifying the reasons for errno/stat symbol definitions in retarget.h.
- Removed FAT filesystem from mbed 2 testing.
- Fixed FATMisc.h Copyright (c) 2016 year to 2017 as its a new file.
- Removed #ifndef NDEBUG from HeapBlockDevice.cpp.
- Removed unnecessary todo comment in retarget.cpp.
2017-02-23 16:39:42 +00:00
Simon Hughes 2b96c74f84 STORAGE: Pull Request 3704 requested minor changes including:
- renaming FATFileSystemSetErrno() fat_file_system_set_errno.
- changing FATFileSystem::format() to be mount fs internally in function, rather than expecting fs to be mounted.
- requested const char *filename change.
2017-02-23 16:39:21 +00:00
Simon Hughes 860d7f03f2 STORAGE: fixing error handling for fopen() and other upper edge filesystem API methods.
- integrated work with new block api.
- Conflicts: features/filesystem/fat/FATFileSystem.cpp
2017-02-23 16:39:11 +00:00
Simon Hughes 0b7a2ca030 STORAGE: fixes for merging in format test with new block device implementation of format. 2017-02-23 16:38:22 +00:00
Simon Hughes 01baa72ab9 STORAGE: change FATFileSystem::format() to include allocation_unit argument, to facilitate fixing of inconsistent file systems.
Conflicts:
	features/filesystem/fat/FATFileSystem.cpp
	features/filesystem/fat/FATFileSystem.h
2017-02-23 16:38:19 +00:00
Simon Hughes 4f5e94c746 STORAGE: test case fixes to support ARMCC and IAR toolchains.
Conflicts:
	features/TESTS/filesystem/fopen/fopen.cpp
2017-02-23 16:38:15 +00:00
Christopher Haster 0176450c5a bd: Adopted the block storage api in the FATFileSystem 2017-02-23 16:37:13 +00:00
Simon D Hughes aefb03ccd6 ARMCC temporary fixes for undefined errno symbols. 2017-02-23 16:36:16 +00:00
Simon Hughes 0c87537f10 Added errno codes to retarget, mkdir() and ftell() tests. 2017-02-23 16:36:03 +00:00
Christopher Haster 39a1eddb93 Filesystem: Added EEXIST reporting to mkdir through errno 2017-02-23 16:34:56 +00:00
Christopher Haster 9299a88e8f Filesystem: Add support for stat
Provided through FileSystemLike::stat
2017-02-23 16:30:42 +00:00
Simon Hughes 4acf33f436 FILESYSTEM: moved FAT filesystem implemenation to features/filesystem subdir, and fs-fat tests to features/TESTS. 2017-02-23 16:30:21 +00:00