Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/windirstat/ntfs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-01-14Apply suggestions from clippy.Colin Finck
2021-12-15Relicense everything as MIT OR Apache-2.0 to enable a broader usage.Colin Finck
2021-12-15Add the missing documentation and some final polishing.Colin Finck
2021-10-03`NtfsValue` -> `NtfsAttributeValue` and `Slice` -> `Resident`.Colin Finck
Turns out that we won't use this enum for anything else than attribute values, and `Slice` always corresponds to a resident attribute value, so reflect that in the naming. Index keys still use slices without this enum.
2021-10-03Refactor structured values to work on any type of `NtfsValue`.Colin Finck
This makes `NtfsFile::directory_index` and `NtfsFile::name` work even if the attributes they are looking for are part of an Attribute List. We keep a fast path for the few attribute types that are always resident.
2021-08-07Use `ArrayVec` over heap-allocated `Vec` for some structured values.Colin Finck
This greatly reduces the number of heap allocations when traversing an index.
2021-07-26NtfsStructuredValueFromData -> NtfsStructuredValueFromSliceColin Finck
This prevents naming collisions with NTFS fields called "data".
2021-07-21Implement Update Sequence Array parsing and record fixups.Colin Finck
This is where things get dirty. As NTFS requires us to fix up records, we can't continue our previous design of avoiding dynamic allocations and reading everything on demand via `io::Read`. Instead, we now read an entire record (usually not larger than 4 KiB), fix it up, and store it in a `Vec`. This required changes almost everywhere. It should be noted that many non-resident attributes are not part of a record, which is why structured values are now implemented differently depending on the attribute type. On the plus side, many structures need less borrowing now, which makes them more comfortable to use. I have also added missing sanity checks with precise errors where appropriate.
2021-06-05Pass an `&'n Ntfs` reference to `NewNtfsStructuredValue::new`Colin Finck
This enables all structured values to access filesystem-wide information such as the cluster size, which will soon be needed for `NtfsIndexAllocation`.
2021-06-04Make all structured values ready for indexes and non-resident attributesColin Finck
This introduces a `NewNtfsStructuredValue` trait for the `new` function of all structured values. Indexes later need that to return the structured value specified by a type parameter. We also have to pass an explicit length and can't just rely on the end of the passed `NtfsAttributeValue`/`NtfsAttributeValueAttached`. For structured values of non-resident attributes, we have to store an `NtfsAttributeValue` instead of an absolute byte position, in order to let a structured value read additional data (e.g. the name of an `NtfsFileName`). The `NtfsAttributeValue` properly moves between data runs while reading.
2021-05-05Implement `NtfsAttributeValue::len` and use it for the structured valuesColin Finck
2021-05-03Implement reading non-resident values, `NtfsIndexRoot`, clusters >64K, and ↵Colin Finck
refactor many affected parts.
2021-05-01Implement `NtfsString::read_from_fs` to simplify several functions.Colin Finck
2021-04-21Implement `NtfsVolumeInformation` and `NtfsVolumeName` structured valuesColin Finck
2021-04-20Initial implementation of an NTFS filesystem crate, with access to NTFS ↵Colin Finck
files, resident attributes, StandardInformation and FileName structures, string and time parsing, with real filesystem tests for all of that.