diff --git a/CHANGELOG.md b/CHANGELOG.md index 770e7b5..1cf66cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,65 @@ # Drat changelog +## v0.1.3 (2021-08-29) + +### Functional changes + +- Linux support added (tested under Ubuntu 20.04.3). From this version onwards, + binaries for Linux on x86-64 will also be provided for versioned releases. + Some more general code portability provisions have also been made. + +- `drat inspect` now automatically detects the APFS block size, based on the + block size value provided by the container superblock found at block 0. + +- Extended fields (xfields) are now supported. + +- `drat recover` now gets the actual file size and thus outputs files of the + correct size rather than a multiple of the APFS block size. The tools in + `/supplemental-tools` have thus been removed. ([Issue #2](https://github.com/jivanpal/drat/issues/2)). + +- UUIDs are now printed in standard format. + +- Fixed bug in `get_nx_incompatible_features_string()` and `get_nx_flags_string()` + that caused these functions to analyse the `nx_features` field instead. + +- `drat version` now outputs legal info (copyright notice, warranty, and + licence). + +### Other changes + +- Refactored libraries: + + - `/include` has been added to the compilation include path to avoid use of + relative paths. + + - `/src/apfs/struct` has moved to `/include/apfs`, and can thus be included + as ``. This library contains headers that define all data structures + detailed in Apple's APFS specfication. + + - The remainder of `/src/apfs` has moved to `/include/drat`, and can thus be + included as ``. This library contains functionality specific to Drat: + + - Headers in `` define functions that facilitate common + operations on data strctures provided by ``; + + - Headers in `` define functions that produce human-readable + strings/output detailing the data contained in data structures provided + by ``; and + + - Headers in `` define miscellaneous functions. + +- Refactored code: + + - String generation functions that operate on enum fields have had their + shared code factored into `` as + `get_single_enum_string()` and `get_flags_enum_string()`. + + - Use of `ctime()` for printing timestamps has been factored into + `get_apfs_timestamp_string()`. + +- Documentation for v0.2.x has been drafted in `/docs` using + [Sphinx](https://www.sphinx-doc.org/en/master/). + ## v0.1.2 (2021-02-05) - Renamed `src/apfs/struct/const.h` to `src/apfs/struct/jconst.h` diff --git a/README.md b/README.md index a7f2630..ef213bc 100644 --- a/README.md +++ b/README.md @@ -17,36 +17,35 @@ Currently, all of Drat's commands (except `modify`, which is currently disabled as it is not fit for use) operate in a read-only fashion, as they are intended to be used in situations involving data recovery or data forensics. -## Build instructions +### Running the software -If you're running macOS on an Intel Mac, precompiled binaries for versioned -releases are available on the [releases page](https://github.com/jivanpal/drat/releases). +If you're using an Intel machine that's running macOS or Linux, you can find +binaries for versioned releases on the [releases page](https://github.com/jivanpal/drat/releases). Documentation for versioned releases and as generated from the `main` branch [can be viewed online](https://drat.readthedocs.io/). -Compilation and execution has been tested on macOS Catalina 10.15.7 (19H524) on -an Intel x86-64 machine (MacBookPro9,2). - ### Compiling the software #### Requirements -- `gcc` — Required because we use `__attribute__((packed))`. Tested with - GCC 11.2.0, installed via [Homebrew](https://brew.sh) (Homebrew GCC 11.2.0). +- GNU C Compiler (`gcc`) — Required because we use `__attribute__((packed))`. + +- GNU Make (`make`). -- `make` — Tested with GNU Make 3.81, as included in Xcode Command Line Tools. +- GNU Argp library (``) — Part of the GNU C Library (glibc): -- `` (GNU Argp library) — If compiling on macOS, you can get this by - installing the [Homebrew](https://brew.sh) package `argp-standalone`; the - Makefile will handle this configuration automatically. If you acquire this - library any other way, you will need to configure `CFLAGS` and `LDFLAGS` as - appropriate (see lines in `Makefile` after `ifeq ($(shell uname -s),Darwin)`). + - On Ubuntu, ensure that the package `libc6-dev` is installed. + + - On macOS, you can install just Argp via the [Homebrew](https://brew.sh) + package `argp-standalone`. The Makefile will handle this configuration + automatically. If you acquire Argp any other way, such as by installing + glibc in its entirety, you may need to configure `CFLAGS` and `LDFLAGS` as + appropriate. #### Instructions -- Ensure that `gcc` is in your `$PATH`, or modify the `CC` and `LD` values in - `Makefile` to reflect the location of `gcc` on your system. +- Ensure that `gcc` is in your `$PATH`, or configure `CC` and `LD` as appropriate. - Run `make` from the project root (where this `README.md` file resides). An `out` directory will be created in which the object files will be stored. The @@ -55,6 +54,22 @@ an Intel x86-64 machine (MacBookPro9,2). - Run `make clean` to remove the compiled binary (`drat`) and other output files (`out` directory). +#### Tested platforms + +Compilation and execution has been tested on the following platforms: + +- macOS Catalina 10.15.7 (19H524) on an Intel x86-64 machine (MacBookPro9,2), using: + + - GCC 11.2.0 (Homebrew GCC 11.2.0) + - GNU Make 3.81 (as included in Xcode Command Line Tools) + - Homebrew package `argp-standalone`, version 1.3 + +- Ubuntu 20.04.3 on an Intel x86-64 machine (Intel Core i5-4288U), using: + + - GCC 9.3.0 + - GNU Make 4.2.1 + - GNU C Library (glibc) 2.31 + ### Generating the documentation [Sphinx](https://www.sphinx-doc.org/en/master/) is used to manage the diff --git a/src/legal.h b/src/legal.h index dcc8026..438acf2 100644 --- a/src/legal.h +++ b/src/legal.h @@ -2,7 +2,7 @@ #define DRAT_LEGAL_H #define VERSION_AND_COPYRIGHT_STRING \ - "Drat version 0.1.2\n" \ + "Drat version 0.1.3\n" \ "Copyright (C) 2019-2021 Jivan Pal\n" \ "\n"