ObjFW  ChangeLog at tip

File ChangeLog from the latest check-in


Legend:
 * Changes of existing features or bugfixes
 + New features

This file only contains the most significant changes.

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 collission 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 SecureTransport
   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 bugfixes, 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 bugfixes 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