Legend:
 * Changes of existing features or bug fixes
 + New features

This file only contains the most significant changes.

ObjFW 1.5.3 -> ObjFW 1.5.4, 2026-05-23
 * Fixes a buffer overflow caused by integer promotion rules in
   OFBMPImageFormatHandler and OFQOIImageFormatHandler.

ObjFW 1.5.2 -> ObjFW 1.5.3, 2026-05-20
 * Fixes OFForwardingTests on Windows with GCC.
 * Fixes OFHTTPCookieManager which was completely broken.
 * OFHTTPServer refuses to send responses that contain a newline in the
   headers or the server name now.
 * Fixes setting the Amiga Comment to nil in OFMutableTarArchiveEntry.
 * Improves handling of truncated archives in OFLHAArchiveEntry.
 * OFThread no longer inherits the priority on AmigaOS.
 * Uses better source for randomness now to find a free port on platforms that
   can't bind to port 0.
 * ofarc now strips drives from the paths it stores inside the archive.
 * Fixes ofarc failing to create ZIP archives with specific paths on AmigaOS.
 * Fixes ofarc incorrectly storing Amiga Protection in ZIP archives.

ObjFW 1.5.1 -> ObjFW 1.5.2, 2026-05-08
 * Makes ObjFWConfig.cmake work on MSYS2.
 * ObjFWConfig.cmake now also adds the flags for OBJCXX.
 * OFFile no longer uses O_EXLOCK for "x" modes.
 * Fixes the `OF_AMD64` define on Windows.
 * ofhttp now removes the terminal's progress indicator on abort.

ObjFW 1.5 -> ObjFW 1.5.1, 2026-02-24
 * Fixes a regression introduced in 1.5 that made weak references deadlock.
 * Improves the unit test for weak references.

ObjFW 1.4.4 -> ObjFW 1.5, 2026-02-22
 + Adds OFColorSpace and adds support for color spaces to OFColor. Supports
   sRGB, linear sRGB, BT.709, Display-P3, linear Display-P3, BT.2020, linear
   BT.2020, Adobe RGB and linear Adobe RGB.
 + Adds OFImage to store an image in various pixel formats and color spaces.
 + Adds OFCanvas to create (draw) images, including bilinear image scaling and
   alpha blending in linear color space and pixel format and color space
   transformations when source and destination use a different pixel format
   and/or color space.
 + Adds OFImageFormatHandler as a generic interface to handle image formats
   including a registry for image formats so that it can be extended by 3rd
   parties.
 + Adds an OFImageFormatHandler for BMP and QOI images.
 + Adds support for CMake projects using ObjFW.
 + Adds support for Unicode 17.
 + Adds methods to OFString and OFMutableString to remove control characters.
 + OFLocale now escapes all control characters in variables unless the
   variable name starts with an `@`.
 * OFStdOut and OFStdErr now allow writing with a lossy encoding if they have
   an underlying terminal.
 + OFStdOut and OFStdErr now support setting the terminal's progress
   indicator.
 * Revives support for AmigaOS 4 that had bitrotten over the years.
 + OFFileIRIHandler now supports nanosecond precision on operating systems
   that support it.
 + OFFileIRIHandler now supports setting file owner and group on UNIX systems.
 + OFFileIRIHandler now supports retrieving and setting of MS-DOS attributes,
   Amiga file protection and Amiga file comments.
 + OFArchiveEntry now has a file type property shared by all archive formats.
 + OFLHAArchiveEntry now supports MS-DOS attributes, Amiga file protection and
   Amiga file comments.
 * OFLHAArchiveEntry now handles \xFF in level 0 header filenames.
 * OFLHAArchiveEntry now works around Amiga LHA using broken UNIX time.
 + OFTarArchive now supports PAX extended headers to allow for files > 8 GB.
 + OFTarArchive now supports Amiga file protection and Amiga file comments.
 * Fixes OFZIPArchiveEntry not correctly copying the comment when performing a
   mutable copy.
 + Adds a new type OFFloat16 for 16-bit floating point that is always
   available, even when the platform does not support float16.
 * OFHTTPClient now has improved logic when to use keep-alive connections.
 + OFHTTPClient now supports custom run loop modes.
 * OFHTTPClient now explicitly removes "Authorization" headers on redirects to
   other hosts.
 * OFHTTPClient no longer allows newline characters in headers.
 * OFINIFile now rejects section names with newlines and merges repeated
   sections.
 * OFInflateStream has been renamed to OFDeflateStream in anticipation for
   compression support.
 * Fixes +[OFSystemInfo networkInterfaces] on MorphOS.
 * objfw-config now includes flags for Stack Protector & RELRO in LDFLAGS to
   avoid linker errors if ObjFW has been built with Stack Protector & RELRO.
 * Fixes a potential race condition for weak references in the runtime.
 * Removes support for Secure Transport.
 + Adds support for Mbed TLS 4.
 * openssl4.library is now lazily loaded on MorphOS to avoid a dependency on
   it until it is actually needed.
 + ObjFWHID adds support for the following controllers: GameCube controller
   via adapter (Linux & macOS), DualShock 1/2 via adapter (Linux), DualShock 3
   (Linux), MOCUTE-053X-M35-HID (Linux)
 * ObjFWHID and ObjFWTLS now have proper version information in their .dll
   files.
 + ofarc now supports files > 8 GB in Tar files.
 + ofarc now stores UNIX permissions in ZIP files.
 + ofarc now preserves Amiga file protection and Amiga file comments in LHA,
   Tar and ZIP files (creation and extraction).
 + ofarc now preserves MS-DOS attributes for LHA and ZIP files (creation and
   extraction).
 * ofarc now removes all escape codes from output to stderr (except those used
   for its own formatting).
 + ofdns now supports passing a name server as a domain name itself to
   --server=.
 * ofhash now removes all escape codes from output to stderr (except those used
   for its own formatting).
 + ofhttp now uses color, bold and underlined for improved formatting and sets
   the terminal's progress indicator.
 * ofhttp no longer follows 301/302/307 redirects as a result of a non-GET and
   non-HEAD request.
 * ofhttp now removes all escape codes from output to stderr (except those used
   for its own formatting).

ObjFW 1.4.3 -> ObjFW 1.4.4, 2026-02-01
 * Fixes Swift interoperability.
 * Fixes building for Wii with new devkitPro.
 * Fixes missing background color rounding in OFStdIOStream.
 * Adds iso8859-* as an alias for iso-8859-*.
 * Fixes objfw-compile not passing -f* and -m* to the linker
 * Makes ofhttp always send an Accept header to avoid being flagged as
   suspicious by some websites.
 * Fixes ObjFWTLS with OpenSSL when using Apple GCC 4.0.1.
 * Fixes a few missing OF_RETURNS_INNER_POINTER.
 * Fixes some OFMutableStringTests not being run.

ObjFW 1.4.2 -> ObjFW 1.4.3, 2025-12-20
 * Fixes a bug where calling -[OFTimer invalidate] multiple times would also
   release its block multiple times.
 * Fixes incomplete initialization in OFHuffmanTree, which is used by Deflate,
   LHA and Zoo.
 * Fixes OFLHAArchiveEntry accidentally doing bit shifts on signed integers,
   resulting in being unable to list or extract some archives.
 * Fixes -[OFTarArchive compressedSize] being too big when the file size is a
   multiple of 512.
 * +[OFSystemInfo networkInterfaces] makes sure now sockets are initialized.
 * Fixes ofarc waiting for user confirmation even if there is no TTY.

ObjFW 1.4.1 -> ObjFW 1.4.2, 2025-10-05
 * Fixes compatibility with C++ 20 and up.
 * Fixes +[alloc] being able to return nil.
 * Fixes -[canBlock] being inherited for sockets returned by
   -[OFStreamSocket accept] being OS-dependent.
 * Fixes MPTCP being used on old macOS versions that don't support it.
 * Fixes parsing of ZIP64 local headers in OFZIPArchive when only some values
   in the regular local header are set to -1.
 * Fixes handling of 0 byte ZIP64 extra field in OFZIPArchiveEntry.
 * OFZIPArchive no longer verifies the local header date to better deal with
   broken archives.
 * Fixes parsing of header level 0/1 dates in OFLHAArchiveEntry.
 * Fixes OFZooArchiveEntry emitting the wrong length for the variable length.
 * Fixes ofarc setting directory permissions before extracting its files.
 * Fixes setting OFStdIOStream colors to `nil` on MS-DOS.
 + Adds support for aarch64_be in the runtime lookup assembly.

ObjFW 1.4 -> ObjFW 1.4.1, 2025-08-25
 * Optimizes CRC16 and CRC32 calculation, thereby fixing bad extraction speed
   for OFGZIPStream, OFLHAArchive, OFZIPArchive & OFZooArchive. This speeds up
   extracting a ZIP archive using ofarc from being significantly slower than
   unzip to being noticeably faster than unzip.
 + Adds missing man page for ofgctester.
 * Fixes compiling with the upcoming MorphOS SDK.
 * Uses SetFilePosixDate on MorphOS if available to avoid incorrect dates
   during DST transitions.

ObjFW 1.3.2 -> ObjFW 1.4, 2025-08-03
 * Memory management for objects was moved to the runtime, making many
   optimizations possible.
 * Many runtime optimizations were added.
 + Adds new classes: OFIndexSet, OFMutableIndexSet.
 + Adds new methods using OFIndexSet to OFArray, OFMutableArray and
   OFMutableData.
 + OFStream now supports setting a default encoding for the stream that will
   be used for all string operations that don't specify an encoding.
 + Adds support for asynchronously opening an item to OFIRIHandler.
 + Adds support for building the runtime as a .library on MorphOS.
 + Adds support for abstract UNIX sockets on Linux.
 + Adds basic math operations for OFVector3D and OFVector4D.
 + Adds support for hiding / showing the cursor to OFStdIOStream.
 + Adds support for compressed localizations to OFLocale.
 + Adds new util ofgctester to test game controllers using ObjFWHID.
 + Starts using OF_DIRECT with the ObjFW runtime when using Clang >= 21.
 + OFTLSSocket now supports client certificates officially instead of being an
   unsupported byproduct of support for server certificates (the only change
   is that this fixes Mbed TLS using the certificate chain to verify the server
   when it should only be used for the client certificate).
 * Many fixes for AmigaOS and MorphOS.
 * Everything is built with RELRO, _FORTIFY_SOURCE=3 and -fstack-protector by
   default now.
 * Utils are now always built as PIE if possible.
 * Utils now write status messages to stderr instead of stdout.

ObjFW 1.3.1 -> ObjFW 1.3.2, 2025-06-08
 * Fixes handling of truncated writes in OFRunLoop.
 * Makes OFHTTPServer more reliable.
 * Fixes handling of write errors when using OpenSSL.
 * Fixes reporting of written bytes in OFWriteFailedException when using GnuTLS.
 * Fixes reporting of written bytes in OFWriteFailedException when using
   Mbed TLS.
 * Fixes handling of EPIPE and ECONNRESET when using Secure Transport.

ObjFW 1.3 -> ObjFW 1.3.1, 2025-06-07
 * Fixes OpenSSL TLS streams being reported as ready for reading when they are
   not.
 * Fixes using async I/O on OFHTTPServer's request body or response.
 * Fixes configure on Solaris / Illumos.
 * Improves configure check for GameController.framework.
 * Removes unnecessary promotion to double in OFColor.
 * Fixes handling the last disk number on ZIP64 archives.
 * Fixes OFLHAArchiveEntry on big endian systems.
 * Fixes inconsistent nullability in OFMutablePair and OFMutableTriple.

ObjFW 1.2.4 -> ObjFW 1.3, 2025-03-22
 + OFStdIOStream adds support for true color, 256 colors, bold, italic,
   underlined and italic.
 * OFStdIOStream now keeps track of state to reduce the amount of escape codes
   used.
 + Adds support for getting peer credentials to UNIX sockets.
 + Adds support for MPTCP.
 + Adds more functions to parse integers to OFString.
 + Adds range checks to OFNumber instead of truncating values.
 * Deprecates OFPlugin in favor of OFModule.
 * Deprecates a few methods in various classes, their replacements are
   specified in the deprecation message.
 * Optimizes lookup for embedded files.
 * Improves EINTR handling throughout the entire code base.
 + ObjFWRT calls +[load] on categories now.
 * Adds and uses more error codes for OFTLSStream.
 + Adds OFX509Certificate with support for PKCS #12 and PEM files.
 + Adds server mode for OFTLSStream.
 + Adds support for TLS to OFHTTPServer.
 + Adds support for Mbed TLS 3 to ObjFWTLS.
 * Fixes handling of unexpected stream end in OFOpenSSLTLSStream.
 + OFRunLoop now supports interacting with foreign run loops.
 + ObjFWBridge now provides an OFKernelEventObserver implementation that uses
   CFRunLoop to allow running code that needs a CFRunLoop inside an OFRunLoop.
 + ObjFWBridge now bridges OFDate/NSDate and OFData/NSData.
 * Fixes ObjFWBridge on macOS 10.5 (Leopard).
 + Adds documentation for ObjFWBridge.
 + Adds support for game controllers on macOS & iOS to ObjFWHID.
 + Adds OFNotifications for changes values to ObjFWHID.
 * ObjFWHID now uses more consistent names for game controller elements.
 + Adds game controller-specific profiles on Linux to ObjFWHID for the following
   controllers: Switch Pro Controller, Nintendo Switch Online SNES gamepad,
   8BitDo Ultimate 2C Wireless, 8BitDo NES30.
 + Adds game controller-specific profiles on macOS & iOS to ObjFWHID for the
   following controllers: DualSense, DualShock 4, pair of Joy-Cons, Switch Pro
   Controller, Nintendo Switch Online N64 controller, Nintendo Switch Online
   SNES gamepad, Stadia gamepad, 8BitDo NES30.
 * ObjFWHID now filters spurious extra buttons with the Xbox 360 Wireless
   Receiver on Linux.
 * ObjFWHID now assumes a single Joy-Con to be rotated and handles it
   accordingly.
 * ofarc now quarantines files before setting permissions, preventing an issue
   where the permissions would no longer allow quarantining files.

ObjFW 1.2.3 -> ObjFW 1.2.4, 2025-02-20
 * Fixes OFPlainConditionTimedWait(), which as a result fixes OFRunLoop
   spinning in some situations.
 * Fixes OFMutableUTF8Strings containing `\0`.
 * Fixes OFHTTPServer using an IPv6 address as host.

ObjFW 1.2.2 -> ObjFW 1.2.3, 2024-12-15
 * Fixes OFRunLoop not draining the autorelease pool after firing a timer.
 * Adds -fno-constant-ns{number,array,dictionary}-literals to OBJCFLAGS, which
   is required to have literals work with ObjFW with recent Xcode versions.

ObjFW 1.2.1 -> ObjFW 1.2.2, 2024-12-07
 * Fixes OFTLSSocket not sending shutdown when using OpenSSL.
 * Fixes OFTLSSocket initialization when using Mbed TLS.
 * Fixes imports in ObjFWTLS.h.
 * OFINIFile now properly quotes ; and #.
 * Ensures ofarc and ofhash link ObjFWTLS.
 * Makes OFEmbeddedIRIHandler public, as it's required for objfw-embed.
 * Fixes compiling on Haiku r1beta5.
 * Adds compatibility with latest devkitARM.

ObjFW 1.2 -> ObjFW 1.2.1, 2024-11-09
 * Fixes exceptions in ObjC++.
 * Fixes compiling ObjC++ on Windows.
 * Fixes compiling tests on Haiku.
 * Properly hides private methods in ObjFWHID.

ObjFW 1.1.7 -> ObjFW 1.2, 2024-11-02
 + Adds a new framework for game controllers called ObjFWHID.
 + Adds support for tagged pointer strings.
 + Strings are now allowed to contain `\0`, while preventing such strings from
   being passed to anything that expects a C string.
 * `\u0000` and `\x??` are now allowed in JSON.
 + Adds a new option `OFJSONRepresentationOptionSorted` to create sorted,
   reproducible JSON representations.
 * Socket initialization is now delayed until sockets are used for the first
   time to significantly speed up startup on some systems, in particular game
   consoles.
 + Adds -[readString], -[tryReadString] and -[asyncReadString] to OFStream to
   read until a `\0` is found.
 + Adds support for SCTP sockets.
 + Adds support for UNIX sequenced packet sockets.
 + Adds assembly lookup for the following platforms: ARM64/Win64, RISC-V 64/ELF,
   LoongArch 64/ELF.
 + Adds -[forwardingTargetForSelector:] for the following platforms:
   MIPS64-N64/ELF, RISC-V 64/ELF, LoongArch 64/ELF, PowerPC 64/ELF v1,
   PowerPC 64/ELF v2, ARM64/Win64
 + Adds support for the following encodings: Windows-1250, Codepage 852.
 + Adds support for extended attributes on Solaris.
 * OFPlugin now falls back to loading .dylibs on macOS/iOS when no .bundle was
   found.
 * OFINICategory was renamed to OFINISection.
 * The API for async I/O handlers was changed to contain more arguments, which
   results in new methods that take a handler instead of a block and deprecating
   the old ones.
 * -[attributesOfItemAtIRI:] now works for embedded files.
 * `OF_APPLICATION_DELEGATE()` now works with `-mwindows`.
 + Adds man pages for all utilities.
 * ofdns now defaults to query AAAA and A, not ALL.
 * ofhash now accepts --rmd160 as an alias for --ripemd160.

ObjFW 1.1.6 -> ObjFW 1.1.7, 2024-08-25
 * Fixes creating OFStrings from C strings with some encodings.
 * Fixes creating an ASCII C string from an OFString that has been initialized
   by passing an instance of a custom string class.
 * Fixes OFINIFile not parsing `=` within `"` correctly.
 * OFINIFile now allows comments and pairs before the first category.
 * OFINIFile now allows # for comments.
 * Hides some private symbols in the runtime library.
 * Disables UNIX datagram sockets on Hurd as Hurd has incomplete support for
   UNIX datagram sockets.

ObjFW 1.1.5 -> ObjFW 1.1.6, 2024-08-11
 * Fixes ObjC++ with GCC.
 * Adds handling of EINTR in OFKernelEventObserver.
 * Fixes overriding / reusing stack arguments in super calls on x86.
 * Makes headers compatible with -Wunused-parameter.

ObjFW 1.1.4 -> ObjFW 1.1.5, 2024-07-06
 * Fixes MIPS32.
 * Properly hides private symbols in the runtime so they can't be used
   accidentally anymore.

ObjFW 1.1.3 -> ObjFW 1.1.4, 2024-05-22
 * Fixes ofarc failing to extract from stdin on macOS.
 * Fixes the workaround for missing blx on ARM.
 * Avoids Clang's integrated assembler on MIPS64 for .S files (as it cannot
   calculate the offset between two labels).
 * Fixes X32 being mistaken for AMD64.

ObjFW 1.1.2 -> ObjFW 1.1.3, 2024-05-12
 * Fixes +[OFSystemInfo networkInterfaces] on NetBSD.
 * Properly hides private symbols so they can't be used accidentally anymore.
 * Adds missing documentation for various functions and macros.
 * Uses RtlGenRandom to get proper randomness on Windows now.
 * No longer uses _wutime64, which is buggy in some MinGW distributions.
 * Only uses blx on ARM if it is available now.
 * Adds a workaround for OFSubprocess tests on Windows 9x.
 * Skips symlink tests if symlinks are unavailable.

ObjFW 1.1.1 -> ObjFW 1.1.2, 2024-04-20
 * Fixes configure script on systems using BusyBox for tr.
 * Fixes compiling for Haiku.
 * Fixes -[contentsOfDirectoryAtIRI:] corrupting the stack on Solaris.
 * Fixes compiling for Wii with newer SDK.
 * Fixes missing endbr / bti.
 * Minor optimizations to ARM64 assembly.

ObjFW 1.1 -> ObjFW 1.1.1, 2024-04-14
 * Fixes missing ${DESTDIR} in some Makefiles.

ObjFW 1.0.12 -> ObjFW 1.1, 2024-04-14
 * ObjFW is now licensed under LGPLv3.0-only.
 + Adds a new framework for writing tests called ObjFWTest.
 * All tests were migrated to ObjFWTest.
 + The runtime now supports associated objects.
 + OFDNSResolver now caches responses.
 + OFDNSResolver now supports URI and LOC DNS resource records.
 + Adds methods to handle path extension to OFIRI.
 + Adds support for Mbed TLS.
 + Adds more methods to OFSystemInfo to check for CPU features.
 * OFSystemInfo now only indicates CPU features as supported if the OS also
   supports them.
 + OFLHAArchive now supports extracting and creating files > 4 GB.
 + OFLHAArchive now supports header level 3.
 + OFLHAArchive now supports extracting -lhx-, -lz4- and -pm0- files.
 * OFLHAArchive no longer defaults to ISO 8859-1.
 + New class OFZooArchive for extracting and creating Zoo files.
 * The schemes for archive IRI handlers have been renamed.
 * The schemes for archive IRI handlers now look for the rightmost `!`,
   which allows for chaining with less quoting.
 * Fixes -[OFMutableArray replaceObjectIdenticalTo:withObject:] being
   inconsistent with -[OFMutableArray replaceObject:withObject:].
 * Fixes getting non-existent xattrs in OFFileManager.
 * Objects on Windows, MS-DOS and 32 bit Solaris now get properly aligned so
   that SIMD can be used on ivars.
 * Fixes parsing of signed numbers in MessagePack.
 * Fixes a memory leak in OFTarArchive.
 + Adds support for typed extended file attributes (only on Haiku).
 + Adds support for extended file attributes on Haiku, NetBSD and FreeBSD.
 + OFStdIOStream now supports cursor movement and colors on MS-DOS.
 * All headers are now compatible with -masm=intel.
 + OFMatrix4x4 can now transform multiple vectors at once.
 + OFMatrix4x4 has a 3DNow! implementation for multiplication and vector
   transformations now.
 + OFMatrix4x4 has an SSE implementation for vector transformations now.
 * Updates Unicode support to 15.1.
 * Fixes compatibility with LibreSSL.
 * Fixes two linker warnings on macOS.
 * Fixes compiling on QNX.
 * OFLocale now supports automatic initialization.
 + ofarc now supports extracting and creating Zoo archives.
 + ofarc now has an --iri option to directly work on local and remote IRIs.
 + ofarc now prints the archive comment with -lv.
 + ofarc can now add an archive comment with --archive-comment=.
 + ofarc now propagates the quarantine xattr on macOS when extracting an
   archive.

ObjFW 1.0.11 -> ObjFW 1.0.12, 2024-03-11
 * Fixes a regression in OFZIPArchive that was introduced in 1.0.11 that
   resulted in failing to extract archives and creating broken archives.
 * Fixes a rare condition where OFInflateStream could end up in an endless
   loop.
 * Fixes OFTarArchiveEntry not having a default date, which could result in
   messaging nil on a FP return, which yielded invalid results on 32-bit x86
   with GCC.

ObjFW 1.0.10 -> ObjFW 1.0.11, 2024-03-09
 * Fixes -[OFHTTPClientResponse isAtEndOfStream] and
   -[OFGZIPStream isAtEndOfStream].
 * Fixes how OFZIPArchive handles disk 0 vs. disk 1.
 * OFLHAArchive and OFZIPArchive create more compatible archives now.
 * OFLHAArchive ignores padding in level 2 headers now.
 * ofarc correctly sets modification dates of directories now by delaying
   setting those until after all files have been extracted.
 * Fixes a linker warning on macOS/iOS.
 * Several minor documentation fixes.
 * OFFileIRIHandler correctly transforms exceptions now so that they use an IRI
   and not a path.

ObjFW 1.0.9 -> ObjFW 1.0.10, 2024-02-24
 * Fixes objc_getClassList() not releasing the global runtime mutex.
 * Improves OFLHAArchive's compatibility with non-standard archives.
 + Adds endbr32 / endbr64 / bti instructions for compatibility with Control
   Flow Integrity.

ObjFW 1.0.8 -> ObjFW 1.0.9, 2024-02-18
 * Fixes OFGZIPStream reading the size and CRC32 incorrectly when either spans
   multiple reads.
 * Fixes a type mismatch in OFMapTable that could cause problems on big endian
   systems when uint32_t and unsigned long have a different size.
 * Fixes the default implementation of -[initWithKeys:arguments:] for custom
   dictionaries.
 * Improves detection of mutation during enumeration in
   -[enumerateKeysAndObjectsUsingBlock:].
 * Minor documentation fixes.

ObjFW 1.0.7 -> ObjFW 1.0.8, 2024-01-21
 * Fixes compilation on NetBSD, OpenBSD, OpenIndiana etc. which was broken by
   1.0.7.

ObjFW 1.0.6 -> ObjFW 1.0.7, 2024-01-21
 * Fixes inheriting the environment in OFSubprocess.
 * Fixes dealloc in OFSubprocess when -[closeForWriting] was called.
 + Adds tests for OFSubprocess.
 * Changes the key for +[OFSystemInfo networkInterfaces] to the adapter name
   on Windows XP and newer to avoid a possible collision on the adapter index.
 * Fixes compilation with old MinGW versions.
 * Fixes the documentation for OFSRVDNSResourceRecord.

ObjFW 1.0.5 -> ObjFW 1.0.6, 2024-01-15
 * Fixes compatibility with autoconf 2.72.
 * Fixes OFDNSResolver's handling of types, classes and lengths > 255.

ObjFW 1.0.4 -> ObjFW 1.0.5, 2023-11-05
 * Fixes the calculation of the extra alignment in OFAllocObject()
 * Fixes +[OFSystemInfo networkInterfaces] on OpenBSD and Windows 98
 * Fixes OFSocketAddressString() for AppleTalk addresses
 * Uses GetModuleHandle() instead of LoadLibrary() where possible on Windows
 * Disables tests for global blocks on Win64 due to broken compilers
 * Adds PGP keys to verify tarballs and commits in the code repository

ObjFW 1.0.3 -> ObjFW 1.0.4, 2023-10-08
 * Fixes OFFile closing fd 0 when initialization fails
 * Fixes -[stringByAppendingPathComponent:] on empty strings
 * Fixes +[OFSystemInfo operatingSystemName] and
   +[OFSystemInfo operatingSystemVersion] returning nil on some systems
 * Adds a license for localizations

ObjFW 1.0.2 -> ObjFW 1.0.3, 2023-09-14
 * Fixes -[OFConcreteData initWithItemSize:] not setting freeWhenDone to true,
   which resulted in a memory leak
 * Fixes -[OFData initWithContentsOfIRI:] freeing the buffer in @catch instead
   of @finally, which resulted in a memory leak

ObjFW 1.0.1 -> ObjFW 1.0.2, 2023-09-11
 * The build system has been updated to fix building .frameworks and to build
   them differently for macOS and iOS

ObjFW 1.0 -> ObjFW 1.0.1, 2023-09-10
 * Hanging connections with OFTLSStream have been fixed when using OpenSSL
 * The same fix as for OpenSSL has been applied to GnuTLS and Secure Transport
   out of caution, even though there have been no hangs in practice
 * The build system has been updated to fix building .frameworks among other
   minor changes
 * Some headers have been changed to fix compatibility with ObjC++
 * Warnings about empty .o files on x86_64 Darwin have been fixed
 * The OFDate documentation has been improved to list supported formats

ObjFW 0.90.2 -> ObjFW 1.0, 2023-08-29
 + First stable release with stable API and ABI
 * Too many changes to list, as it has been almost 6 years since the last
   release. See commits in the repository for details.

ObjFW 0.90.1 -> ObjFW 0.90.2, 2017-10-23
 * Fix shadowed variables which caused many bugs (e.g. using the wrong object)
 * Many, many nullability fixes
 * OFTCPSocket: Fix exception not being retained for async connect
 * OFThread: Fix setting the name on the wrong thread
 * OFMutableSet: Fix missing override for -[copy]
 * configure: Fix posix_spawnp check
 * Xcode project: Set the correct version for the bridge
 * Better check for iOS
 * tests: Fix testing the wrong OFKernelEventObserver

ObjFW 0.90 -> ObjFW 0.90.1, 2017-08-20
 * OFData: Fix -[description]
 * OFFileManager: Set errno to 0 before readdir()
 * OFDate: Add -[localMinute]
 * OFTarArchiveEntry: Fix prefix handling for ustar
 * OFZIPArchive: Fix uncompressed + data descriptor
 * OFArray: Fix MessagePack encoding
 * of_asprintf: Don't require set up OFLocalization
 * OFGZIPStream: Add missing documentation
 * Fix a linker warning on OpenBSD/SPARC64
 * Remove the OFFile b modes from MorphOS
   (they were already removed for all other OSes)

ObjFW 0.8.1 -> ObjFW 0.90, 2017-08-01
 + New classes: OFFileManager, OFGZIPStream, OFTarArchive, OFTarArchiveEntry
		OFHMAC, OFSandbox, OFHTTPCookie, OFHTTPCookieManager,
		OFLocalization
 + New platforms: Nintendo 3DS, MorphOS
 + New lookup assembly for platforms: SPARC64/ELF, ARM64/ELF
 + New forwarding for: ARM64/ELF
 + New tools: objfw-new (to create boilerplate code)
 + New options: --disable-unicode-tables
 * Required GCC version increased to 4.6
 * OFDataArray was split into OFData and OFMutableData
 * OFURL was split into OFURL and OFMutableURL
 * Most properties are now nonatomic
   (this changes from returned retained + autoreleased to +0 retained)
 * Correct handling of encoding on Win32 console
   (stream is read and written in UTF-8 and translated to UTF-16 on the fly)
 * Runtime is now built as a separate library
 + More encodings for strings
 * Reworked OFOptionsParser API
 * Refactored OFKernelEventObserver
 * Better randomization of HTTP header order
 * Allow overriding all HTTP headers
 * Definition of thread priorities changed
 + Key Value Coding
 + Exceptions in ObjC++
 * OFHash was renamed to OFCryptoHash
 + PBKDF2
 + scrypt
 + Xcode project to build for iOS
 + String decomposition to NFD
 * OFFile modes simplified ('b' removed)

ObjFW 0.8 -> ObjFW 0.8.1, 2015-10-04
 * Adjust to __nullable / __nonnull being changed to _Nullable / _Nonnull in
   Clang 3.7 (this fixes compilation with Clang 3.7)
 * Blocks: Proper handling when called from a byref handler
 * Fix compilation on Solaris
 * Fix compilation for Wii, PSP and Nintendo DS
 * OFProcess: Send SIGTERM on close instead of SIGKILL
 * OFZIPArchive: Throw invalid format exception on failed seeks
 * Make sure of_hash_seed is never initialized to 0
 * Special cases for the Wii's weird network stack (fixes the tests)
 * Better length checks for write / send calls
 * Don't use -pedantic on platforms where it's broken by the system headers
 * Documentation fixes

ObjFW 0.7.1 -> ObjFW 0.8, 2015-08-14

 + An insanely huge amount of new APIs
 + New classes: OFHTTPServer, OFINICategory, OFINIFile, OFInflate64Stream,
   OFInflateStream, OFMapTable, OFRIPEMD160Hash, OFSHA224Hash, OFSHA256Hash,
   OFSHA384Hash, OFSHA512Hash, OFSettings, OFStdIOStream, OFSystemInfo,
   OFUDPSocket, OFZIPArchive, OFZIPArchiveEntry
 + New utils: ofzip, ofhash, ofhttp
 + Support for -[forwardingTargetForSelector:] on a lot of platforms
   (see PLATFORMS.md)
 * OFHTTPRequest: Split into OFHTTPRequest and OFHTTPClient
 * Rename OFHTTPRequestReply to OFHTTPResponse
 * OFDictionary now uses OFMapTable internally
 + Highly randomized, DoS-resistant hashtables (different seed per hashtable,
   additionally rotated by a random number of bits)
 * Reworked exceptions API that explicitly passes errno around
 + OFHTTPClient: Keep-alive and Basic Authorization support
 + Support for (and use of) ObjC generics, nullability and kindof
 + Fast path for resolving classes when using GCC (Clang doesn't need the fast
   path, as it directly references classes)
 * OFStreamObserver: Refactored and renamed to OFKernelEventObserver (as it is
   no longer limited to streams)
 + Support for SjLj and SEH exceptions
 + Support for DOS/DJGPP, Nintendo Wii, Nintendo DS and PlayStation Portable
 + Support for bare metal (in other words: running without any OS; tested on
   ARM)
 + Full support for ARM64 on iOS
 + Full MessagePack implementation (the new MessagePack version that supports
   strings)
 + Backtraces for uncaught exceptions
 + Bridge to Cocoa now part of ObjFW
 * Default depth limit for XML and JSON parser
 + Optional support for outputting JSON5 (default is JSON)
 * 16 bit selector UIDs are now the default
 * BOOL replaced with bool everywhere (except where required by the ABI)
 * Fix for a nasty bug in -[replaceCharactersInRange:withString:]
 * Fix for a nasty bug in atomic ops
 * OFTLSKey replaced with +[OFThread threadDictionary]
 * Documentation improvements (for example, imports should now be shown
   correctly everywhere and many APIs have been documented in more detail)
 + Property introspection
 * OFProcess: Use posix_spawnp if available
 * OFProcess improvements for Win32
 + epoll support for OFKernelEventObserver
 * Rewritten OFMD5Hash and OFSHA1Hash
 * Reworked OFTLSSocket API (easier verification)
 * Unicode support updated to Unicode 8.0
 * OFURL: Proper escaping and unescaping

ObjFW 0.7 -> ObjFW 0.7.1, 2012-11-12
 + Support for Haiku
 * Autorelease pools now work properly without __thread
 * Incorrect framework version in Xcode project fixed
 * Documentation fixes and improvements
 * Blocks now only use 16 bits for the reference count in order to avoid
   problems with newer Clang versions
 * More use of OF_SENTINEL

ObjFW 0.6 -> ObjFW 0.7, 2012-10-27
 Again, the differences are more than in any release before, thus listing them
 all would be too much. The major differences are:
 + ObjFW now comes with its own runtime, which greatly increases performance
   compared to the GNU runtime and is even faster than the Apple runtime
   (using Clang >= 3.2 is recommended, but not necessary)
 * Support for the GNU runtime has been dropped
 + New, much faster autorelease pool implementation (now inside the runtime)
 + Support for Automatic Reference Counting (requires Clang >= 3.2)
 + Forwarding has been implemented
 + Asynchronous stream handling
 + New classes: OFThreadPool, OFRecursiveMutex, OFSortedList, OFTimer, OFRunLoop
 + New protocols: OFLocking, OFTLSSocket
 * Lots of API changes to make APIs more future-proof
 + Support for the new Objective-C literals
 * OFHTTPRequest now implements HTTP/1.1
 * OFObject's memory handling has been improved, leading to better performance
 * Strings are allocated faster now
 + Support for JSON5
 * All private methods use the prefix OF_ now instead of _, making it possible
   to use the _ prefix in applications
 * Most ObjC compiler feature checks are not part of configure anymore, making
   it possible to use the same installation with different compilers

ObjFW 0.5.4 -> ObjFW 0.6, 2012-02-27
 The differences between 0.5.4 and 0.6 are too big to list them all. However,
 the major new features are:
 * OFString, OFArray, OFDictionary, OFSet and OFCountedSet are now class
   clusters
 + Serialization and deserialization of objects into/from XML and JSON
 + New class OFIntrospection for introspecting classes
 + New class OFProcess for working with and controlling child processes
 * Lots of OFXMLParser and OFXMLElement improvements
 + OFHTTPRequests can have a delegate now for status updates and processing
   data as soon as it arrives
 + There are several backends for OFStreamObserver now, including kqueue, poll
   and select
 + SOCKS5 support for OFTCPSockets (client only)
 * Several API changes

ObjFW 0.5.3 -> ObjFW 0.5.4, 2011-08-30
 * The blocks runtime is now working correctly
 * Documentation fixes
 * -framework works with objfw-compile now
 + Support for QNX
 * Various small fixes

ObjFW 0.5.2 -> ObjFW 0.5.3, 2011-07-01
 * Lots of bug fixes, see Git log for details

ObjFW 0.5.1 -> ObjFW 0.5.2, 2011-04-25
 * Fix double-retain in OFList
 * Don't ignore the timeout in OFStreamObserver when using select()
 * Do -[OFURL copy] in a try block to prevent a leak when an exception occurs
 * Fix too big buffer in -[OFMutableString _applyTable:withSize:]
 * Call madvise() on the correct length variable so it covers the whole string
 * Fix a warning when sizeof(size_t) < sizeof(long long)
 * Skip possible BOMs when appending strings

ObjFW 0.5 -> ObjFW 0.5.1, 2011-04-21
 * Work around a wrong warning produced by Apple GCC 4.0.1 which would cause
   the build to fail due to -Werror
 * Call objc_thread_{add,remove} when using the GNU runtime to make sure the
   runtime knows about our thread
 * Detach a thread before restarting if it was never joined
 * Release the old return value when restarting a thread

ObjFW 0.4-alpha1 -> 0.5, 2011-04-09
 + %@ is now allowed in format strings
 + Added of_log for easy logging
 * Exceptions have one header per exception now
 * Lots of exception improvements
 * Huge improvements in XML handling
 * Improvements in socket handling, including improved API
 * OFStreamObserver is now thread-safe and stops the current observe call when
   the set of streams to observe is modified
 + New class OFURL
 + New class OFHTTPRequest
 + New class OFCondition
 * Improvements in objfw-compile
 + Blocks can be used together with Cocoa now
 + When linking ObjFW and Cocoa, OFAutoreleasePools are used by both now
 + Support for Base64
 + Use a real Xcode project instead of just calling make
 + Add Haiku to the list of supported platforms
 * Lots of small bug fixes and countless small changes. Read the commits!

ObjFW 0.3.1 -> 0.4-alpha1, 2011-01-03
 * ObjFW is now available under the terms of the QPL, GPLv2 and GPLv3
 + Support for blocks was added, including a blocks runtime
 + Added support for the new GNU runtime, introduced in GCC 4.6
 * Objects returned from collections are no longer retained and autoreleased
 + Added new classes OFXMLParser, OFXMLElement, OFXMLAttribute and
   OFXMLElementBuilder
 + Added new class OFStreamObserver to observe streams
 + Added new class OFDate for storing dates
 + Many new methods in almost all classes
 * OFAutoreleasePool was optimized
 * Handling of ASCII strings was optimized
 * OFSocket was renamed to OFStreamSocket
 * OFConstString was renamed to OFConstantString
 * objfw-compile now has a new syntax
 + objfw-compile can now compile libraries and plugins
 * Many small changes and new features that would be too much to list here
   The diff between 0.3.1 and 0.4-alpha1 has almost 24000 lines!

ObjFW 0.3 -> 0.3.1, 2010-06-19
 * Fix a typo in OFMutableDictionary that prevented termination in case
   the last bucket is already used when the dictionary is resized
 * The mutations pointer is now correctly initialized in enumerators for
   immutable collections
 * The objc_sync test was still using the old threads API and was
   updated to use the new one now
 * PLATFORMS has been updated to be more specific

ObjFW 0.2.1 -> 0.3, 2010-05-09
 + Many new methods were added to different classes
 + A huge amount of methods was added to OFStream, allowing easy binary
   stream handling and even mixing string-based and binary operations
 + An optional write buffer was added to OFStream
 + OFSeekableStream was added for streams that allow seeking, for example
   OFFiles
 * OFNumber was completely reworked and got many new features now
 * Large parts of OFDictionary were rewritten for better readability, better
   memory usage and to fix a bug with removing objects
 * OFThread has been greatly improved
 * Many small optimizations
 * Many documentation improvements
 * Method replacing was reworked and the methods renamed
 + Tests for OFStream were added
 * A bug with building ObjFW as a Universal Binary Framework was fixed
 + Support for ObjFW-RT, the ObjFW Objective C runtime, was added
 * Sockets are now properly closed before an exception is thrown
 * Error handling with sockets was improved
 * OFFile now uses open(), read() and write(), thus allowing -[readLine] to be
   used on of_stdin and fixing many other annoyances
 * A few misc methods were renamed
 + OFApplication was added
 * All tests and the table generator are now using OFApplication
 + It is now possible to get the remote address of an OFTCPSocket
 + OFString can now build paths in the OS-native format
 + It is now possible to create a string with the contents of a file
 + Many new file operations were added to OFFile
 * The existing file operations in OFFile were improved
 * Almost all functions that returned self before now return void
 + OFHash was added as a superclass for OFMD5Hash and OFSHA1Hash and OFHashes
   renamed to OFHash
 + objfw-compile was added for easy compilation of ObjFW projects, which
   includes dependency checking for headers etc.
 * The instance variable naming convention was changed so that properties work
 + Properties were added to the interfaces and are used if they are supported
   by the compiler
 + The library version is now included in the resulting dylib and libobjc is
   reexported now. Additionally, objfw-config offers --reexport now to produce
   libraries that link against ObjFW and reexport it

ObjFW 0.2 -> 0.2.1, 2010-03-14
 * Fix for OFNumbers not doing calculations
 * Improved -[hash] for OFNumbers with floats and doubles
 + Tests for OFNumber
 * Small optimization for OFArray's -[componentsJoinedByString:]
 * Documentation improvements
 * Updated copyright

ObjFW 0.1.2 -> 0.2, 2010-02-01
 + Support for ObjC 2 Fast Enumerations on every platform which has
   compiler support for fast enumerations
 + Support for ObjC 2 properties on every platform with compiler support
 + Fast Enumeration through arrays and dictionaries
 * OFIterator has been removed
 + OFEnumerator was added to replace OFIterator, which is more general
   and works with arrays and dictionaries
 + Portable implementation for atomic operations
 + Portable implementation for spinlocks. They use atomic operations if
   available, if not they fall back to pthread spinlocks. If both are
   unavailable, mutexes are used as a last fallback
 * -[retain] and -[release] are now atomic. If no atomic operations are
   available, spinlocks are used (which can fall back to mutexes, see
   above)
 * -[readLine] now handles \r\n without having the \r included in the
   returned line
 + OFThread now has -[tryLock]
 * Mutation methods have been removed from immutable interfaces, thus
   already giving an error at compilation instead of at runtime
 * Dependencies between headers have been reduced, leading to faster
   compile times
 * The interfaces of OFSocket and OFStream were cleaned up and some
   methods were moved to OFTCPSocket, as they make sense only there
 * File methods unavailable on Windows don't throw an exception at
   runtime anymore, but instead are not even in the interface on
   Windows. This way, it is a compile time error instead of a runtime
   error

ObjFW 0.1.1 -> 0.1.2, 2010-01-15
 * Fix a bug in OFMutableArray's -[removeObject:] and
   -[removeObjectIdenticalTo:] that could lead to not removing all
   occurrences of the object from the array and to out of bounds reads
 * Change the URL in the framework plist to the homepage

ObjFW 0.1 -> 0.1.1, 2010-01-04
 * Fix a missing out of range check for -[removeNItems:atIndex:] that
   allowed the programmer to specify too big ranges so it would crash
   instead of throwing an exception
 * Fix missing calls to -[retain] and -[autorelease] when getting
   objects from an OFArray or OFDictionary
 * Safer and more fault-tolerant way to remove objects from an
   OFMutableArray
 * Calling +[dealloc] throws an exception now. If someone really calls
   [SomeClass dealloc], this should be punished and not ignored, as
   this is a serious programmer error
 * -[readLineWithEncoding:] is more fault-tolerant now and does not
   lose data when it stumbles upon invalid encoding. Instead, it allows
   recalling with the correct encoding now

ObjFW 0.1, 2009-12-24
 + Initial release
