Rafał Harabień
e4b72836f0
Fix file-system corruption when creating directory entries
...
Corruption happens if:
* files are created in non-root directory
* directory size becomes greater or equal to cluster size
Creating last directory entry in the directory cluster corrupts the
cluster directly preceding the directory cluster.
For 512 bytes long cluster creating 8th directory entry (counted from 1)
will cause first corruption.
Directory entry that causes the corruption will not be updated correctly.
Fixes #42
2021-01-22 00:22:54 +01:00
Fabrice Desclaux
9b4c3548dc
Add regression test for short name generation
2019-07-17 17:41:29 +02:00
Rafał Harabień
812f61e393
Change rustfmt options and reformat code
...
Option 'use_small_heuristics' is too abstract for me.
Smaller lines and disabled heuristics should work better.
2018-12-29 20:21:24 +01:00
Rafał Harabień
dc128b7308
Refactor FAT type determination, rename and add option for format_volume
...
* FAT type should be properly selected even if custom cluster size is used.
* root_entries has been renamed to max_root_dir_entries in FormatVolumeOptions
* added option FormatVolumeOptions::fats
2018-12-29 19:37:46 +01:00
Rafał Harabień
8502edb7b8
feat: Make sector size and total sectors optional for format_volume
...
* moved bytes_per_sector and total_sectors from FormatVolumeOptions::new
to a dedicated methods (it is optional now)
* calculate total number of sectors using seek() to disk end if not provided
* added more doc comments
* added assertions about disk handle position being zero
2018-12-20 01:47:34 +01:00
Rafał Harabień
b4455a86a8
fix: Make backup boot-sector part of reserved region when formatting volume
...
Change number of reserved sectors to 8.
Previously backup boot-sector was over-written by FAT formatting code soon
after it was initialized.
2018-12-12 22:10:10 +01:00
Rafał Harabień
a88d751c47
refactor: apply most of rustfmt changes
2018-12-09 00:32:52 +01:00
Rafał Harabień
cf3256bfda
fix: clear directory returned from create_dir method
...
Previous implementation did not zero allocated cluster so created directory
could have garbage contents.
Bug exists in code since version 0.2 and all code using create_dir is
affected.
This commit also improves tests of volume formatting so a dirty partition
is used allowing to detect bugs like this.
2018-12-08 19:34:47 +01:00
Rafał Harabień
41c3d31ba2
New syntax for FormatVolumeOptions
2018-12-05 22:31:59 +01:00
Rafał Harabień
fd89185461
Add more format_volume tests and simlify code
2018-12-05 22:31:59 +01:00
Rafał Harabień
b9753248f7
Properly initialize file allocation table when formatting a volume
2018-12-05 22:31:59 +01:00
Rafał Harabień
df81d3b9fd
Volume format API
2018-12-05 22:31:59 +01:00
Rafał Harabień
1724a54536
Fix formatting
...
Immprovements by hand + rustfmt
2018-10-10 21:26:31 +02:00
Rafał Harabień
6f10042784
Support reading volume label from root directory
2018-08-05 00:14:49 +02:00
Rafał Harabień
5dea8b5f8a
Test dirty flags on all FAT variants
...
Flags field offset is different is it makes sense.
2018-06-29 15:38:27 +02:00
Rafał Harabień
dc1ad7d2f7
Mark volume dirty on first write and not-dirty on unmount
2018-06-29 15:35:37 +02:00
Rafał Harabień
30f3f96537
Improve code style using rustfmt
2018-06-28 18:13:07 +02:00
Rafał Harabień
8995a43bc4
Allow renaming to the same name
2018-06-17 22:26:07 +02:00
Rafał Harabień
8c1dae9f0c
Do not remove source file in Dir::rename if destination already exists
...
Previous code removed source file before returning an error.
It also caused a clusters leak. Now it returns error before doing any
modifications on the partition.
2018-06-17 22:25:22 +02:00
Rafał Harabień
674d1f8182
Fix failing in Dir::create_file/dir if existing destination entry has wrong type
2018-06-17 21:46:54 +02:00
Rafał Harabień
892c3974d3
Move BufStream to fscommon crate (BREAKING CHANGE)
...
BufStream is universal and can be used with any filesystem so its place is
in different crate. Also moved Partition struct from examples to
fscommon::StreamSlice struct (please note constructor arguments has changed).
2018-06-16 17:57:29 +02:00
Rafał Harabień
217b6046f1
Make disk object type generic (breaking change)
...
This change allows for moving an object ownership to FileSystem object
instead of borrowing it. It makes usage of library easier in some cases.
Unfortunately it is a breaking change.
2018-06-13 23:24:08 +02:00
Rafał Harabień
2304b13ec4
Take immutable self reference in Dir methods
...
Dir methods do not change Dir object itself. They usually clone inner
stream so no change really happens self struct. Underlying partition is
modified but it does not have to affect API. For example see
std::fs::File::set_len. This change greatly simplifies rename API usage.
2018-06-12 00:07:30 +02:00
Rafał Harabień
18b9d8c285
Do not panic if unexpected file type is found during path traversal
...
For example if in the middle of the path a file is found.
Return error in such case instead of panicking.
2018-06-07 23:26:11 +02:00
Rafał Harabień
85c48d6aec
Make FsStatusFlags struct fields non-public and add getters
...
This way new fields can be added later without losing backward compatibility.
2018-06-06 14:17:05 +02:00
Rafał Harabień
0b5b04aca6
Make FileSystemStats struct fields non-public and add getters
...
This way new fields can be added later without losing backward compatibility.
2018-06-06 14:01:19 +02:00
Rafał Harabień
66c976bc3b
Add method for renaming/moving a file
2018-06-06 13:56:59 +02:00
Rafał Harabień
9f5f070955
Allow opening files/dirs using short name
2018-05-31 00:23:32 +02:00
Rafał Harabień
282c40fad2
Implement proper short-name generation
2018-05-30 17:43:18 +02:00
Rafał Harabień
147b31fdcd
Update FSInfo sector on unmount/drop
2018-05-27 23:48:38 +02:00
Rafał Harabień
7709f5e6f6
Add FileSystem::stats method
...
It allows to get number of total and free clusters on FAT volume.
2018-05-26 17:09:13 +02:00
Rafał Harabień
3c52f35f6d
Update dependencies
2018-05-09 15:34:05 +02:00
Rafał Harabień
8bb24994e0
Add read_status_flags API for getting dirty and IO error volume flags.
2017-12-01 17:24:02 +01:00
Rafał Harabień
d5c37f2af5
Introduce FsOptions struct for providing options for library.
...
Old read_only flag in FileSystem::new was misleading.
2017-11-08 20:26:50 +01:00
Rafał Harabień
b38ea78f3e
Add automatic update of timestamps (created, accessed, modified).
...
Works only if chrono feature is enabled (default).
2017-11-08 00:18:31 +01:00
Rafał Harabień
cdde3ca468
When generating short name replace invalid characters with '?'.
2017-11-08 00:07:06 +01:00
Rafał Harabień
21bd2a0e8d
Zero new directory clusters after allocation.
2017-10-27 15:03:54 +02:00
Rafał
9ec23f1234
Add create_dir function. ( #5 )
2017-10-27 14:12:53 +02:00
Rafał
529d717e30
Add .editorconfig file and fix whitespaces in existing files. ( #4 )
2017-10-25 17:20:27 +02:00
Rafał
df98ca8779
Create file functionality ( #3 )
...
* Support removing files and directories.
* Add create_file functionality.
2017-10-21 15:35:26 +02:00
Rafał Harabień
ba5329edad
Support removing files and directories.
2017-10-20 16:18:17 +02:00
Rafał Harabień
da76625759
Replace commented out logging by log crate usage.
2017-10-15 00:55:19 +02:00
Rafał Harabień
0c6e9aec5b
Fix multiple corner cases and simplify code.
2017-10-10 16:05:19 +02:00
Rafał Harabień
13dd50bf61
Simplify BufStream implementation and use it in write test.
2017-10-10 14:48:57 +02:00
Rafał Harabień
d8eba51b88
Alloc and free clusters for file data.
2017-10-09 21:14:28 +02:00
Rafał Harabień
f32f1c7279
Basic write support for files.
...
No cluster management yet.
Also BufStream is broken when writing.
2017-10-09 14:59:52 +02:00
Rafał Harabień
6355db8073
Add tests for open_dir with '.' and '..'.
2017-10-07 16:37:15 +02:00
Rafał Harabień
d32ae0eef9
Allow seeking beyond end of file as documented in Seek trait.
...
Also fix possible panic when seeking in file without clusters.
2017-10-07 16:07:33 +02:00
Rafał Harabień
a1a2ffc2af
Remove unneeded Fat prefix for most structures.
2017-10-07 14:56:50 +02:00
Rafał Harabień
d97ab1d1e1
Rename crate to fatfs and add more info to Cargo.toml.
2017-10-06 17:00:38 +02:00