Index: .fossil-settings/clean-glob
==================================================================
--- .fossil-settings/clean-glob
+++ .fossil-settings/clean-glob
@@ -37,10 +37,11 @@
tests/EBOOT.PBP
tests/Info.plist
tests/PARAM.SFO
tests/objc_sync/objc_sync
tests/plugin/Info.plist
+tests/subprocess/subprocess
tests/terminal/terminal_tests
tests/testfile_bin.m
tests/testfile_ini.m
tests/tests
tests/tests.3dsx
Index: .fossil-settings/ignore-glob
==================================================================
--- .fossil-settings/ignore-glob
+++ .fossil-settings/ignore-glob
@@ -42,10 +42,11 @@
tests/iOS.xcodeproj/*.pbxuser
tests/iOS.xcodeproj/project.xcworkspace
tests/iOS.xcodeproj/xcuserdata
tests/objc_sync/objc_sync
tests/plugin/Info.plist
+tests/subprocess/subprocess
tests/terminal/terminal_tests
tests/testfile_bin.m
tests/testfile_ini.m
tests/tests
tests/tests.3dsx
Index: .github/workflows/dragonflybsd.yml
==================================================================
--- .github/workflows/dragonflybsd.yml
+++ .github/workflows/dragonflybsd.yml
@@ -1,19 +1,19 @@
name: dragonflybsd
on: [push, pull_request]
jobs:
tests:
- runs-on: macos-12
+ runs-on: ubuntu-latest
strategy:
matrix:
configure_flags:
-
- --disable-shared
- --with-tls=gnutls
steps:
- - uses: actions/checkout@v3
- - uses: vmactions/dragonflybsd-vm@v0
+ - uses: actions/checkout@v4
+ - uses: vmactions/dragonflybsd-vm@v1
with:
usesh: true
copyback: false
prepare: |
pkg install -y autoconf automake gnutls llvm pkgconf
Index: .github/workflows/freebsd.yml
==================================================================
--- .github/workflows/freebsd.yml
+++ .github/workflows/freebsd.yml
@@ -1,19 +1,19 @@
name: freebsd
on: [push, pull_request]
jobs:
tests:
- runs-on: macos-12
+ runs-on: ubuntu-latest
strategy:
matrix:
configure_flags:
-
- --disable-shared
- --with-tls=gnutls
steps:
- - uses: actions/checkout@v3
- - uses: vmactions/freebsd-vm@v0
+ - uses: actions/checkout@v4
+ - uses: vmactions/freebsd-vm@v1
with:
usesh: true
copyback: false
prepare: |
pkg install -y autoconf automake gnutls pkgconf
Index: .github/workflows/netbsd-gcc.yml
==================================================================
--- .github/workflows/netbsd-gcc.yml
+++ .github/workflows/netbsd-gcc.yml
@@ -1,24 +1,24 @@
name: netbsd-gcc
on: [push, pull_request]
jobs:
tests:
- runs-on: macos-12
+ runs-on: ubuntu-latest
strategy:
matrix:
configure_flags:
-
- --disable-shared
- --with-tls=gnutls
steps:
- - uses: actions/checkout@v3
- - uses: vmactions/netbsd-vm@v0
+ - uses: actions/checkout@v4
+ - uses: vmactions/netbsd-vm@v1
with:
usesh: true
copyback: false
prepare: |
- pkg_add autoconf automake gnutls pkgconf
+ /usr/sbin/pkg_add autoconf automake gnutls pkgconf
run: |
./autogen.sh
./configure OBJC=gcc ${{ matrix.configure_flags }}
make -j4
make check
Index: .github/workflows/netbsd.yml
==================================================================
--- .github/workflows/netbsd.yml
+++ .github/workflows/netbsd.yml
@@ -1,24 +1,24 @@
name: netbsd
on: [push, pull_request]
jobs:
tests:
- runs-on: macos-12
+ runs-on: ubuntu-latest
strategy:
matrix:
configure_flags:
-
- --disable-shared
- --with-tls=gnutls
steps:
- - uses: actions/checkout@v3
- - uses: vmactions/netbsd-vm@v0
+ - uses: actions/checkout@v4
+ - uses: vmactions/netbsd-vm@v1
with:
usesh: true
copyback: false
prepare: |
- pkg_add autoconf automake clang gnutls pkgconf
+ /usr/sbin/pkg_add autoconf automake clang gnutls pkgconf
run: |
./autogen.sh
./configure OBJC=clang ${{ matrix.configure_flags }}
make -j4
make check
Index: .github/workflows/openbsd.yml
==================================================================
--- .github/workflows/openbsd.yml
+++ .github/workflows/openbsd.yml
@@ -1,19 +1,19 @@
name: openbsd
on: [push, pull_request]
jobs:
tests:
- runs-on: macos-12
+ runs-on: ubuntu-latest
strategy:
matrix:
configure_flags:
-
- --disable-shared
- --with-tls=gnutls
steps:
- - uses: actions/checkout@v3
- - uses: vmactions/openbsd-vm@v0
+ - uses: actions/checkout@v4
+ - uses: vmactions/openbsd-vm@v1
with:
usesh: true
copyback: false
prepare: |
pkg_add autoconf-2.71 automake-1.16.5 gnutls pkgconf
Index: .gitignore
==================================================================
--- .gitignore
+++ .gitignore
@@ -42,10 +42,11 @@
tests/iOS.xcodeproj/*.pbxuser
tests/iOS.xcodeproj/project.xcworkspace
tests/iOS.xcodeproj/xcuserdata
tests/objc_sync/objc_sync
tests/plugin/Info.plist
+tests/subprocess/subprocess
tests/terminal/terminal_tests
tests/testfile_bin.m
tests/testfile_ini.m
tests/tests
tests/tests.3dsx
Index: ChangeLog
==================================================================
--- ChangeLog
+++ ChangeLog
@@ -2,10 +2,52 @@
* Changes of existing features or bugfixes
+ New features
This file only contains the most significant changes.
+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
Index: README.md
==================================================================
--- README.md
+++ README.md
@@ -53,11 +53,11 @@
* GNUstep already provides a reimplementation of Foundation, which is only
compatible to a certain degree. This means that a developer still needs to
care about differences between frameworks if they want to be portable. The
idea behind ObjFW is that a developer does not need to concern themselves
- with portablility and making sure their code works with multiple
+ with portability and making sure their code works with multiple
frameworks: Instead, if it works it ObjFW on one platform, they can
reasonably expect it to also work with ObjFW on another platform. ObjFW
behaving differently on different operating systems (unless inevitable
because it is a platform-specific part, like the Windows Registry) is
considered a bug and will be fixed.
@@ -79,23 +79,26 @@
Installation
ObjFW packages are available for various operating systems and can be
installed as following:
- Operating System | Command
- -----------------|---------------------------------------------
- Alpine Linux | `doas apk add objfw`
- CRUX | `sudo prt-get depinst objfw`
- Fedora | `sudo dnf install objfw`
- FreeBSD | `sudo pkg install objfw`
- Haiku | `pkgman install objfw`
- Haiku (gcc2h) | `pkgman install objfw_x86`
- macOS (Homebrew) | `brew install objfw`
- macOS (pkgsrc) | `cd $PKGSRCDIR/devel/objfw && make install`
- NetBSD | `cd /usr/pkgsrc/devel/objfw && make install`
- OpenBSD | `doas pkg_add objfw`
- OpenIndiana | `sudo pkg install developer/objfw`
+ Operating System | Command
+ ---------------------------|---------------------------------------------
+ Alpine Linux | `doas apk add objfw`
+ CRUX | `sudo prt-get depinst objfw`
+ Fedora | `sudo dnf install objfw`
+ FreeBSD | `sudo pkg install objfw`
+ Haiku | `pkgman install objfw`
+ Haiku (gcc2h) | `pkgman install objfw_x86`
+ macOS (Homebrew) | `brew install objfw`
+ macOS (pkgsrc) | `cd $PKGSRCDIR/devel/objfw && make install`
+ NetBSD | `cd /usr/pkgsrc/devel/objfw && make install`
+ OpenBSD | `doas pkg_add objfw`
+ OpenIndiana | `sudo pkg install developer/objfw`
+ Windows (MSYS2/MINGW32) | `pacman -S mingw-w64-i686-objfw`
+ Windows (MSYS2/CLANG64) | `pacman -S mingw-w64-clang-x86_64-objfw`
+ Windows (MSYS2/CLANGARM64) | `pacman -S mingw-w64-clang-aarch64-objfw`
If your operating system is not listed, you can
build ObjFW from source.
@@ -385,20 +388,18 @@
If you have any questions about ObjFW or would like to talk to other ObjFW
users, the following venues are available:
* The [forum](https://objfw.nil.im/forum)
* A [Matrix room](https://matrix.to/#/%23objfw:nil.im)
+ * A [Discord room](https://objfw.nil.im/discord), bridged to the Matrix
+ room above
+ * A [Telegram room](https://t.me/objfw), bridged to the Matrix room above
+ * A [Slack room](https://objfw.nil.im/slack), bridged to the Matrix room
+ above
* An IRC channel named `#objfw` on `irc.oftc.net`
([Web chat](https://webchat.oftc.net/?channels=%23objfw)), bridged to the
Matrix room above
- * A [Slack channel](https://objfw.nil.im/slack), bridged to the Matrix room
- above
- * A [Discord channel](https://objfw.nil.im/discord), bridged to the Matrix
- room above
- * A [Telegram room](https://t.me/objfw), bridged to the Matrix room above
- * A [Gitter room](https://gitter.im/ObjFW/ObjFW), bridged to the Matrix room
- above
Please don't hesitate to join any or all of those!
Donating
Index: configure.ac
==================================================================
--- configure.ac
+++ configure.ac
@@ -1,14 +1,13 @@
-AC_INIT(ObjFW, 1.1dev, js@nil.im, objfw, https://objfw.nil.im/)
+AC_INIT(ObjFW, 1.0.10, js@nil.im, objfw, https://objfw.nil.im/)
AC_CONFIG_SRCDIR(src)
AC_CONFIG_AUX_DIR(build-aux)
AC_CONFIG_MACRO_DIR(build-aux/m4)
AC_DEFINE(OBJFW_VERSION_MAJOR, 1, [The major version of ObjFW])
-AC_DEFINE(OBJFW_VERSION_MINOR, 1, [The minor version of ObjFW])
-dnl This may only be set to 1.1 once 1.1 is released
-AC_SUBST(BUNDLE_VERSION, 1.0.0)
+AC_DEFINE(OBJFW_VERSION_MINOR, 0, [The minor version of ObjFW])
+AC_SUBST(BUNDLE_VERSION, 1.0.10)
AC_SUBST(BUNDLE_SHORT_VERSION, 1.0)
for i in configure.ac build-aux/m4/*; do
AS_IF([test $i -nt configure], [
AC_MSG_ERROR([$i is newer than configure! Run ./autogen.sh!])
@@ -150,10 +149,11 @@
potential_compilers="clang egcc gcc"
;;
esac
AC_PROG_OBJC($potential_compilers)
AC_PROG_OBJCPP
+AC_PROG_EGREP
AC_PROG_LN_S
BUILDSYS_CHECK_IOS
AC_ARG_WITH(wii,
@@ -476,29 +476,25 @@
esac
objc_runtime="ObjFW runtime"
AC_CHECK_HEADER(objc/objc.h)
AC_MSG_CHECKING(which Objective C runtime to use)
-AC_ARG_ENABLE(runtime,
- AS_HELP_STRING([--enable-runtime], [use the included runtime]))
AC_ARG_ENABLE(seluid24,
AS_HELP_STRING([--enable-seluid24],
[use 24 bit instead of 16 bit for selector UIDs]))
-AS_IF([test x"$enable_runtime" != x"yes"], [
- AS_IF([test x"$ac_cv_header_objc_objc_h" = x"yes"], [
- AC_EGREP_CPP(egrep_cpp_yes, [
- #import
-
- #ifdef OBJC_BOOL_DEFINED
- egrep_cpp_yes
- #endif
- ], [
- objc_runtime="Apple runtime"
- ], [
- dnl We don't want the GNU runtime
- :
- ])
+AS_IF([test x"$ac_cv_header_objc_objc_h" = x"yes"], [
+ AC_EGREP_CPP(egrep_cpp_yes, [
+ #import
+
+ #ifdef OBJC_BOOL_DEFINED
+ egrep_cpp_yes
+ #endif
+ ], [
+ objc_runtime="Apple runtime"
+ ], [
+ dnl We don't want the GNU runtime
+ :
])
])
AC_MSG_RESULT($objc_runtime)
case "$objc_runtime" in
@@ -846,10 +842,26 @@
AC_MSG_RESULT(yes)
], [
AC_MSG_RESULT(no)
])
;;
+aarch64* | arm64*)
+ AC_MSG_CHECKING(for bti)
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([], [
+ __asm__ __volatile__ ("bti c");
+ ])
+ ], [
+ AC_DEFINE(HAVE_BTI, 1, [Whether we have bti])
+ AC_MSG_RESULT(yes)
+ ], [
+ AC_MSG_RESULT(no)
+ ])
+ ;;
+i?86 | x86_64)
+ AC_CHECK_HEADERS(cet.h)
+ ;;
esac
AC_CHECK_LIB(m, fmod, LIBS="$LIBS -lm")
AC_CHECK_LIB(complex, creal, TESTS_LIBS="$TESTS_LIBS -lcomplex")
@@ -1380,10 +1392,21 @@
esac
AC_CHECK_HEADER(sys/socket.h, [
AC_DEFINE(OF_HAVE_SYS_SOCKET_H, 1,
[Whether we have sys/socket.h])
+ ])
+ AC_CHECK_MEMBERS([struct sockaddr.sa_len], [], [], [
+ #ifdef OF_HAVE_SYS_TYPES_H
+ # include
+ #endif
+ #ifdef OF_HAVE_SYS_SOCKET_H
+ # include
+ #endif
+ #ifdef _WIN32
+ # include
+ #endif
])
AC_CHECK_TYPE([struct sockaddr_storage], [
AC_DEFINE(OF_HAVE_SOCKADDR_STORAGE, 1,
[Whether we have struct sockaddr_storage])
], [], [
@@ -1459,12 +1482,10 @@
#ifdef AF_INET6
egrep_cpp_yes
#endif
], [
AC_DEFINE(OF_HAVE_IPV6, 1, [Whether we have IPv6])
-
- AC_CHECK_FUNCS(inet6_getscopeid)
])
], [
dnl Work around a bug in autoconf 2.61 that creates a broken
dnl configure if this branch is empty.
:
@@ -1949,11 +1970,12 @@
break
])
])
])
AS_IF([test x"$have_subprocesses" = x"yes"], [
- AC_SUBST(OF_SUBPROCESS_M, "OFSubprocess.m")
+ AC_SUBST(USE_SRCS_SUBPROCESS, '${SRCS_SUBPROCESS}')
+ AC_SUBST(SUBPROCESS, "subprocess")
AC_DEFINE(OF_HAVE_SUBPROCESSES, 1, [Whether we have subprocesses])
])
AC_CHECK_HEADERS_ONCE([complex.h sys/ioctl.h sys/ttycom.h])
AC_CHECK_FUNCS(ioctl isatty)
@@ -2005,11 +2027,11 @@
AS_IF([test x"$GOBJC" = x"yes"], [
OBJCFLAGS="$OBJCFLAGS -Wwrite-strings -Wpointer-arith"
AC_ARG_ENABLE(werror,
AS_HELP_STRING([--disable-werror], [do not build with -Werror]))
- AS_IF([test x"$enable_werror" != x"no"], [
+ AS_IF([test x"$enable_werror" = x"yes"], [
OBJCFLAGS="$OBJCFLAGS -Werror"
])
old_OBJCFLAGS="$OBJCFLAGS"
OBJCFLAGS="$OBJCFLAGS -Werror"
Index: extra.mk.in
==================================================================
--- extra.mk.in
+++ extra.mk.in
@@ -1,19 +1,19 @@
OBJFW_SHARED_LIB = @OBJFW_SHARED_LIB@
OBJFW_STATIC_LIB = @OBJFW_STATIC_LIB@
OBJFW_FRAMEWORK = @OBJFW_FRAMEWORK@
OBJFW_LIB_MAJOR = 1
OBJFW_LIB_MINOR = 0
-OBJFW_LIB_PATCH = 2
+OBJFW_LIB_PATCH = 7
OBJFW_LIB_MAJOR_MINOR = ${OBJFW_LIB_MAJOR}.${OBJFW_LIB_MINOR}
OBJFWRT_SHARED_LIB = @OBJFWRT_SHARED_LIB@
OBJFWRT_STATIC_LIB = @OBJFWRT_STATIC_LIB@
OBJFWRT_FRAMEWORK = @OBJFWRT_FRAMEWORK@
OBJFWRT_LIB_MAJOR = 1
OBJFWRT_LIB_MINOR = 0
-OBJFWRT_LIB_PATCH = 0
+OBJFWRT_LIB_PATCH = 1
OBJFWRT_LIB_MAJOR_MINOR = ${OBJFWRT_LIB_MAJOR}.${OBJFWRT_LIB_MINOR}
OBJFWBRIDGE_SHARED_LIB = @OBJFWBRIDGE_SHARED_LIB@
OBJFWBRIDGE_STATIC_LIB = @OBJFWBRIDGE_STATIC_LIB@
OBJFWBRIDGE_FRAMEWORK = @OBJFWBRIDGE_FRAMEWORK@
@@ -60,11 +60,10 @@
OF_KQUEUE_KERNEL_EVENT_OBSERVER_M = @OF_KQUEUE_KERNEL_EVENT_OBSERVER_M@
OF_OPENSSL_TLS_STREAM_M = @OF_OPENSSL_TLS_STREAM_M@
OF_POLL_KERNEL_EVENT_OBSERVER_M = @OF_POLL_KERNEL_EVENT_OBSERVER_M@
OF_SECURE_TRANSPORT_TLS_STREAM_M = @OF_SECURE_TRANSPORT_TLS_STREAM_M@
OF_SELECT_KERNEL_EVENT_OBSERVER_M = @OF_SELECT_KERNEL_EVENT_OBSERVER_M@
-OF_SUBPROCESS_M = @OF_SUBPROCESS_M@
REEXPORT_RUNTIME = @REEXPORT_RUNTIME@
REEXPORT_RUNTIME_FRAMEWORK = @REEXPORT_RUNTIME_FRAMEWORK@
RUNTIME = @RUNTIME@
RUNTIME_ARC_TESTS_M = @RUNTIME_ARC_TESTS_M@
RUNTIME_AUTORELEASE_M = @RUNTIME_AUTORELEASE_M@
@@ -72,10 +71,11 @@
RUNTIME_INSTANCE_M = @RUNTIME_INSTANCE_M@
RUNTIME_LIBS = @RUNTIME_LIBS@
SFDC_INLINE_H = @SFDC_INLINE_H@
SFDC_TARGET = @SFDC_TARGET@
SFD_FILE = @SFD_FILE@
+SUBPROCESS = @SUBPROCESS@
TESTPLUGIN = @TESTPLUGIN@
TESTPLUGIN_LIBS = @TESTPLUGIN_LIBS@
TESTS_LIBS = @TESTS_LIBS@
TESTS_STATIC_LIB = @TESTS_STATIC_LIB@
TLS = @TLS@
@@ -86,10 +86,11 @@
USE_SRCS_APPLETALK = @USE_SRCS_APPLETALK@
USE_SRCS_FILES = @USE_SRCS_FILES@
USE_SRCS_IPX = @USE_SRCS_IPX@
USE_SRCS_PLUGINS = @USE_SRCS_PLUGINS@
USE_SRCS_SOCKETS = @USE_SRCS_SOCKETS@
+USE_SRCS_SUBPROCESS = @USE_SRCS_SUBPROCESS@
USE_SRCS_TAGGED_POINTERS = @USE_SRCS_TAGGED_POINTERS@
USE_SRCS_THREADS = @USE_SRCS_THREADS@
USE_SRCS_UNIX_SOCKETS = @USE_SRCS_UNIX_SOCKETS@
USE_SRCS_WINDOWS = @USE_SRCS_WINDOWS@
WRAPPER = @WRAPPER@
Index: generators/unicode/TableGenerator.h
==================================================================
--- generators/unicode/TableGenerator.h
+++ generators/unicode/TableGenerator.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: generators/unicode/TableGenerator.m
==================================================================
--- generators/unicode/TableGenerator.m
+++ generators/unicode/TableGenerator.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: generators/unicode/copyright.h
==================================================================
--- generators/unicode/copyright.h
+++ generators/unicode/copyright.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
@@ -15,11 +15,11 @@
#import "OFString.h"
#define COPYRIGHT \
@"/*\n" \
- @" * Copyright (c) 2008-2023 Jonathan Schleifer \n" \
+ @" * Copyright (c) 2008-2024 Jonathan Schleifer \n" \
@" *\n" \
@" * All rights reserved.\n" \
@" *\n" \
@" * This file is part of ObjFW. It may be distributed under the terms " \
@"of the\n" \
ADDED misc/keys.asc
Index: misc/keys.asc
==================================================================
--- /dev/null
+++ misc/keys.asc
@@ -0,0 +1,196 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mDMEWtyz7hYJKwYBBAHaRw8BAQdAsw2r74WiB54Nr73sY2sxBLu0RUges2iPeBor
+1Wc6Cre0O0pvbmF0aGFuIFNjaGxlaWZlciAoQ29tbWl0IFNpZ25pbmcgS2V5IDIw
+MTgpIDxqc0BoZWFwLnpvbmU+iJkEExYKAEECGwMHCwoNDAgLBwYVCgkICwMFFgMC
+AQACHgECF4AWIQTGxY7C74kJHg4TzVjYOna/43Y0XgUCXESzpAUJAWlRNgAKCRDY
+Ona/43Y0XhA1AP4nIiBUL2nMtkDJSbSb0/kbyIoTNhRXtlI4crYIqfs07gD+NMdH
+HzMnGtHkpaX7GAqVTeTiThZUnTGNMwnV9aerQQe0OkpvbmF0aGFuIFNjaGxlaWZl
+ciAoT2JqRlcgU2lnbmluZyBLZXkgMjAxOCkgPGpzQGhlYXAuem9uZT6ImQQTFgoA
+QQIbAwcLCg0MCAsHBhUKCQgLAwUWAwIBAAIeAQIXgBYhBMbFjsLviQkeDhPNWNg6
+dr/jdjReBQJcRLOoBQkBaVE2AAoJENg6dr/jdjReDVoBANvkIYUTLemog3UhjZYh
+Zdvq9Axd63L2lnpzm+For3tNAP9GmJwbq/oi8E0mAwesbvQYY/R4NOOKIdV7rkVj
+JzoeCJgzBFxA+ccWCSsGAQQB2kcPAQEHQIe0NK4nnagyINx6Z2DJt4lUzv7a7e6x
+PLifEvo1iQVptDpKb25hdGhhbiBTY2hsZWlmZXIgKE9iakZXIFNpZ25pbmcgS2V5
+IDIwMTkpIDxqc0BoZWFwLnpvbmU+iJkEExYKAEEWIQQtKx7sQXauZ6pvl2B50hGJ
+otRwjQUCXED55wIbAwUJAeEzgAcLCg0MCAsHBhUKCQgLAwUWAwIBAAIeAQIXgAAK
+CRB50hGJotRwjeuIAP9wQ8r+13S0ZHPmOkeVQNqpVdvszisfszQKNRrkKrS7fgEA
+AF4eI4IXb13x5hHvzYn2DMMe2ugx6LoCdzYcVlvFFQ60O0pvbmF0aGFuIFNjaGxl
+aWZlciAoQ29tbWl0IFNpZ25pbmcgS2V5IDIwMTkpIDxqc0BoZWFwLnpvbmU+iJkE
+ExYKAEEWIQQtKx7sQXauZ6pvl2B50hGJotRwjQUCXED5xwIbAwUJAeEzgAcLCg0M
+CAsHBhUKCQgLAwUWAwIBAAIeAQIXgAAKCRB50hGJotRwjXTdAP4oYHIg5+LBhfO+
+SNSQl008KH35KmyO4xtZPKfcbWjXcgD/dWVqZDjUYkCs/0oprdJDZPRBIB5QQhjc
+1un38+eCiAeYMwReJFsBFgkrBgEEAdpHDwEBB0CjTf7buaAeNxgLpbv9/j4UgcjJ
+Z97STkAaM7Xac+Dg1rQ3Sm9uYXRoYW4gU2NobGVpZmVyIChPYmpGVyBTaWduaW5n
+IEtleSAyMDIwKSA8anNAbmlsLmltPoiZBBMWCgBBFiEEMOaUj6yAQrWMtKlu4rzO
+azXhr4sFAl4kWykCGwMFCQHhM4AHCwoNDAgLBwYVCgkICwMFFgMCAQACHgECF4AA
+CgkQ4rzOazXhr4tQAgD+P45Nx/YGk2Q/JzBz+cbsdtcha7IehgXulltd3xLjdwsB
+AMoefVWwHOJa7q10ZRxDN48kDGD+kiqvSdIvKRGuLmMAiQIzBBMBCgAdFiEEbR7C
+JpvAtUWci6kgz9q0H4KSzu4FAl6KMHcACgkQz9q0H4KSzu7HLBAAo2it0ci2HuJT
+1+x1n74dBI5nwKak15OoABW37vxt10gMdm1wo9hq0cJorXdQmE07pMWpMmz883Yg
+ayqTXyEJJydVqq3rgR1zcEKOGpiJT6azRfGxcvsNh8bMto9dC6cVVmknydyvNTg7
+3TpofPmRlH8W8gt8w55EiO3Lk4RJODzGhCOrDxbR1o9rF39fUHj+g3NB7grK/TTt
+dZvomOS+mcM+pANYivOTmMc5mn0mEVua3F6wRvUck8ij2JFTvJ5GV3xie6JIDa2h
+l/hM2BLx2XRrwjnD+kig/CjpoFEP8bzc+epHb6ODAt2SQ5i4Zx30TFWiVeeljX1Q
+zFq5pfJr3nbHQNhkzsu3uWXfqUu1M6mBadzYmLYLDgVFLFKdwhBgbvInr39UAtwE
+Yl70NoqgVswPzWSkAyrLWs0+2XUXZlyhFxNaOqheWE7VQv/DPYDBPXrim3f5Alv2
+PtQJ2BXDvl1PyDg6Ckg6Pe6XoVKPJwMYsiWZOrsnRRJzeQWa1zFsVWX+CYINPiEY
+v4Ls2OFGZj67tzNU8Wf2EFbNmm/V82sXrPeu0iqcJ99aaxZw+tk+h5WS0BiXceZ9
+J6dRKo2qHJJAq0FJnAt+6NRam1KYAknd9y6g5S2bRqiI1wJminmksbSLQ5wmeunl
+EynylSIJx+UbXBYVbvmpLWZFFRUKBM60OEpvbmF0aGFuIFNjaGxlaWZlciAoQ29t
+bWl0IFNpZ25pbmcgS2V5IDIwMjApIDxqc0BuaWwuaW0+iJkEExYKAEEWIQQw5pSP
+rIBCtYy0qW7ivM5rNeGviwUCXiRbAQIbAwUJAeEzgAcLCg0MCAsHBhUKCQgLAwUW
+AwIBAAIeAQIXgAAKCRDivM5rNeGvi4HuAPsEi38R7E8716m2ua2KvFB3CClSCsVT
+tZjbIQBEHzQ/iAD/UEZtjaNUW/Mf8vFExbnqFes0dwF0p6PzQ0GLix12JQKJAjME
+EwEKAB0WIQRtHsImm8C1RZyLqSDP2rQfgpLO7gUCXoowgQAKCRDP2rQfgpLO7jtA
+D/403WskqoPnw+woWaeCPZcTU1LQ/o5baUUxbQDWTAUNav3hzDxBDQ1yPacZhwBu
+ea6SNnrEZwc5wd5TPozh9sXday3vqDe6R9/AT+MokxJT3EWptTXmcawRSyDdFNZr
+V8KJqfDjRNkv9Iqxsjjp9fD5Vw8zVC/KIr0JOq2oxzjU+Wukk94NhSOU2LDRaQLV
+8vMpXZRpVJh30+7rq46sTzhZqB5AsTdBykFOsTl9LRmRJXnLjdK/4U7uhoj5ntfR
+QzPUG3mmbHf5RlGoQIFq2Byop0MiGVWjHI93C5OU7fyjfnARnENOqCgUxs+yXauY
+J+wngqdJroGEo/5kgbJxpTksuK9zQ3DDtE1p5y48qct0gvw3hYz1UGvpEQ2/Prcy
+1q0Nc4hzQ2zrG9jO5971KW2alUT5lrILos17ZJlN5pI8NHhat7T9RX82ziB1fQKG
+OzbSjxT8gXasy9gbMh8w9zm1prZ1+VRQT8JGLYPHM6mZID20F1q5cRLT41UyTjSe
+zzStci/zo/dQKFKaTX9KesTSwVS9Zlo7yldUgH+lWyaSjF9VCrjyNI3YbEJ+/Fqt
+rwxAp8kzFviOd7R5F4zAJBRwgfQNI46v9F3X9KpaTeuuJhm4KvyqPRE/0G0ond8G
+yJYePoL3jMhfl50163cO69TGXyJmvKwATEa1xRU8n9lE9bg4BF4kWwESCisGAQQB
+l1UBBQEBB0Cc6UB0PD0kppdYyeJV3uXSuXk7stS6si393JPKFX2wMgMBCAeIfgQY
+FgoAJhYhBDDmlI+sgEK1jLSpbuK8zms14a+LBQJeJFsBAhsMBQkB4TOAAAoJEOK8
+zms14a+L7UoBAJkNXZsY3zHeiSQ23YeaABQUTtpjWb0o6xljq3PXR/hEAP44Rvf3
+hTkPPDuMCJelOxzkvr83upYCIyIpP5HpzqFWBpkCDQReih1/ARAAuXxV9zzoO2UY
+YlXdNlNSxu9iJKH/RySUzIPtCWVxUfsI1NOo2ByhxxGWpATRye61Lm6cAU+tvEXj
+saKpTi4i9WSy6m6xuLLqQrpDrbVOlazzM1MRQcqGK2wFPtNKV9qz+oOdPXK9a2Rl
+gI2iwQh6AjCjq8oa3T1MtDF4D3uGBE+Fn9g+gryAf/TZ8gKWyYd8UZwtrlFLC7nq
+8gSj2hFiRYTAPGy8GhcdyKvD0cP2xiFlpJmzCn5B+i9a5i3EJDcbfcc0BSyqxkz2
+BY8bymw4kTt5e8Bmf4KdzK5OE4w3PFPiMq+Z3LVohQCI2CRh1wGw6lzntU5nqJ0c
+eD2YV9C8dHwVEN1Vu2M5mXkoe9q4iLWETppxchrQWVAWZWCOeElNxdOrW/uhxpdX
+RmzTMuCIHolB4VhszS+Wr3Uj98DWa9n/cPZpvRdVdXmy95G9ocp+uBozQEjdmLOm
+rqPUUbE/WLUO/tRFqp6w6QVfh81G5omLo5VWlxCODK8OjOR4/rfCH28I75bjrm9H
+pIYtSasVG1/XSV+ilv3PCwadftz8BR5iE0JJtk8NtI1jOvPrIe5d9hJ9109xk/r9
+one51VLFFQDsNJexCswjD25xgpqnhZBd0yOtcE9+6hiENLZ0DFrKZSJjNC7xY/ts
+K9usWwm3CBx2VFi+GpjL04Apo9ooPA0AEQEAAbQeSm9uYXRoYW4gU2NobGVpZmVy
+IDxqc0BuaWwuaW0+iQJbBBMBCgBFAhsDAh4BAheACAsJCg0MCAsHBhUKCQgLAwUW
+AwIBAAIZARYhBG0ewiabwLVFnIupIM/atB+Cks7uBQJj6WbtBQkJIbBuAAoJEM/a
+tB+Cks7u1qUP+gLBceY67YURSNLLCO+L537Xukf2eYlzJzUvBI1nYv8C94dQcmSa
+sBcAsg2ELfKE6GD1/7VwHQHwclpa3kSX55V6+Ep3VUSR7+2fqz4Ahr10FeOpjS5C
+Ir51C44mAjeTkkmPIqhOWSoZyg2RxUZOAUZyFqpLDPFGrRTGmuEFnP1tXOAn3TR2
+xllK9iAbB9ZcJ+MHEz+rVW5yj3XY8/QW1kcsWIA6qV7eHPP4Y8tEIoefvsU5g188
+uHIhxWhB0Xd52VMxd32yiKRgPp9z+6e4PQ+XULv5oGiqR17XKMtMIfAe6kiDYXWT
+HpqOHnOekVPuqTsjAFttgKeCEzbyit6HIFlqoXjoj23eTFQEi2qiSLCRDm2uGZJI
+hAL5YeHPaNa82dg6YNCGD8FFSwP+hhXMaQ7zB2jB8smX9A9C+nHCKCFF4ba1RRNq
+sFRziE2YuY+KX6bQKz6AZ7OxB16YAx75e4J/H/Si8bqm+1EKc6Xpg7uVjYYNH+dr
+j4qvNsTf4tLr3FAm5tSRCdZkSlilS+565J4PInBVjcLnlRAxh1X1RJGVuFuueVdM
+6joGmsPDnwdv8NOvy+4LvBHWkPLm3FVZE9fyDem+0SDooTpvFEuSRfna8agJB5kH
+zA532hu1dEX/XJMCCJT4RBYy7KOVXqcjrLn/TqRiBZKPK4QbmC/JjdKJiQEiBBAB
+CAAMBQJj6WgVBQMAEnUAAAoJEJcQuJvKV618c0IIAKLZVwWsgQWBjtjaIsXKUhoo
+5HBwNpsNCnWAyUj0ayspkvM+hh5fa70s4Mj4oRdCd44X1iDHQw2bV6PVA+TvqkY2
+NV7iL30Vqpyt50qreUz9qCdEittaFIkRNk2qkQB89cKTrrLDu2k80NZdV4sAAJKu
+XFUOEecZVv5D3gYSKDQJ0lTUzSyS4cC5wdSpeEFRTVXpOQOI32mRM9BxmjtDSBct
+fnHSWYoE+IoC+OPqDvbbP4TRz3UYjAz5lbLSL5BnlHxZDG2NryH9tUn+/wnJd41m
+weKZidDO/AUQ9eKKaIsgzCXAjrLjKcgBBANn1yXl+YAr7J8GFdiGkVznYhGjmAW0
+IkpvbmF0aGFuIFNjaGxlaWZlciA8anNATmV0QlNELm9yZz6JAlgEEwEKAEICGwMI
+CwkKDQwICwcGFQoJCAsDBRYDAgEAAh4BAheAFiEEbR7CJpvAtUWci6kgz9q0H4KS
+zu4FAmPpZvIFCQkhsG4ACgkQz9q0H4KSzu4/nRAAk5+6zavoleNtZ0/l9xs0lwwq
+sENTfdWqp19YvkiQTWz0gDvRoxKbXHI4HK25th0rBu77ryQYjKrRjXhEZrNq2k6f
+hTBwJ1sbsDceksaHRlUlVgn112gf6B/iKG3JpLxuFxuMS4ndN9z7H67t2RWDY/+M
+qSgaNFWXQtfmtC3tfV8e5etZScVO8w+0Wed6MjGjA76crgVWXm2hGCokEk7+0uNd
+VmFC+cPEBMixgAHqZvM+Gu3pZvHgV50Ybczalx/6KV2W37MsaX6iRUCCpnnoAAxN
+pWo2Z2LIBVaoO9nuzO8pgF8dRdxwq3Px/RpseHtEUY4v1/aylB4z1joI7sWPqXOR
+3QlRmCd2O36kCiLIvm9OQ5tmjmW9T+t/gcCzq5pHDNIx8D50urqnUH+WU/WaT5fp
+uM6VifBpSZslTuRavc6kxa7kuGCrsBtVOzlMCxSVAqSgMMm4vVxJm20pYIItHHTZ
+TXEehnLEst/EdEAmLmHO2Qch/qUh2i0w5+4pwjY1pIOVP8Si3xbxtoN6PIM/UBEP
+fBQGB4NzljQwISdUUSGiWn7pcun350IsCjnC2c+tJQ/lHjhrJjZ+aMAi7OSV6g9P
+pjFrz+z9UmTP0QUeBSNGBqAWgvC4okGgFr4cf9H01FbZPNkWIfZYPZ1Nv3apxNOx
+lpzSHcURnFhXPJDlqNC0IkpvbmF0aGFuIFNjaGxlaWZlciA8anNAcGtnc3JjLm9y
+Zz6JAlgEEwEKAEICGwMICwkKDQwICwcGFQoJCAsDBRYDAgEAAh4BAheAFiEEbR7C
+JpvAtUWci6kgz9q0H4KSzu4FAmPpZvcFCQkhsG4ACgkQz9q0H4KSzu4TrxAAnWBr
+gJnU96KbYRS7KkpUzeLeaLrHK5LIhaJ7rVxVrOo+x5Ey2NjGJKoTxC9UAfITCfO9
+9vsycp3Gb9fJnowieuQ1y1MFCrYLPPLOfNxh4Jc9GZK64DlexrsXvDhx84wgN+el
+rnjuatm9LUJWe5czWKiAnoki/u+SGFVxwOUtND205I4go/8FtY8rZ1P3VEGiXeZq
+hjNOodDoGEGZJwQIycN5YCrweYPwM+p80ZbzkWGB+Ov3lOO+omMf7NQ3LFtueV0J
+Nq7SjmNESYLm1Gg2NFHZp4D12sSUfHTvNVJBr1qCJggQs2mefRB/aKcS4i9Ajmfk
+i7TkEwutDMX6rOCZRppYpS8N6aYoiAOZHQmffk8bdi0RBGVSxR+04IwpYObUbDIZ
+US2exkiaDB0tFeguIlgHU/V+3GWEUDF4AhQLbSYkEwUc65FstULrDCRfegFoUBsY
+9D+qPYnsNOlTRlalR8hZaQlwZLAuZx0kn+YGxs+9z2UhgMExRtCM/3FRpDuiFJGs
+QML2DUArYZeh7JyJy0m9PIt59wg5wnHUyCLop8g1gn6Wh22/R/Le6CEusJsO2qiM
+oE6PSB89g3nhsvUadRpYOP9eZS0aoRgNPLp+qigthgEV9fvSADHtAvsaLYpQ+wjr
+O+Ih57Y2MrU8mPehwqGz17Ur58VcI65qXTkZpni5Ag0EXoodfwEQAPc4JUVqZGxS
+KtipZKGewKuNyqASMq8gNwL7ToSni5cTuQLa9YU+5Zo/BX3OEJkXp+MNN3Y1wFxV
+cPBZsYpBAx3apWhi0Fki+zdPjTmRE7QcFE+UE17OnnFReb93G2ErSiY+BzsfbW/3
+dMjLfLhrVjJktLA9pGMoR483jI6rIVEBa6TikoMo8b790Ulo0xicl6ehFhQVUGN4
+CfovBjCZ9CIX6dmRGaB/FMyOXgXWsx5+UilTgJhRHbJnggw6U1H8lk/WhJzCyLyY
+Tg+YkHx3WwAF37pR6g1XACMQEdumCLxW21ELC5D4aX0QejM8oIDf/xw5mHcgB0xg
+07FmRbyiZheg+CSPgwHWW/K6urw/G04SbYxnk1/kPA66x6Fss3BxTuJOYmEZqklV
+Np2KfJdEiBECftRRWIbZu2zFOMGK1olPIOgsKdJvaATkgeYSxjCu9+o4vY1yGXtz
+BEwBfIUkU2B33QzWLq+I61WeVbqRC6k0SYBKiQK/uQJSVYuEtNJ8pttYxdYkyY+r
+s0yCZHlTlJcYKhAdMi1Gbh2L6WbzsHIHfmdraWqcv7EEuVacjrgerdk3ezOQspC5
+Gfa6pLEmOoF/ctwg/uoGCyhnWBmHiuLdN7F4+z6BHBoqHU1i3z2oUJ3tHDoVnEmh
+jYNOgIs7UgKxXiuczMJT4gpNM35ym32hABEBAAGJAjwEGAEKACYCGwwWIQRtHsIm
+m8C1RZyLqSDP2rQfgpLO7gUCY+lnIwUJCSGwpAAKCRDP2rQfgpLO7oIlD/4oLDMH
+qTzdDIXjM9x5U4ENBeGwUKHEkKeRduXuj0pZTnWTHmdXD3RPbG1EfGJU3PVBudZU
+iEREibNaEYM5VFuDwMw51qw7Ox8j4r+RtP+8AI0zpRdababPP1/A4ap+xwReTWVM
+/CFF3VekqeElgxSjM6luFPNDdwyBNavOLtbrWhmyclw3DLB03ZtS0sPvu0hXTnp4
+nbuWdsPOxGIomb9UF0IplMPm5ChjkZaypKY75P1k5Il+AZFWEi5YB6y8yl1gmOxY
+3pnKCJWcoGsaEoxREqHH/tZAeI299u8aE8Gjl+ZxGunuPDMUd8OSlE8MI3osnWU4
+7rbVueWqJ4CG3OcYJP8Vj1Ygy68R5xBL5ku3ddv5oI2ZIDkqTBFKJQnhWMUX6Trz
+e7US0jSdVFv4fYf3aHDJ0afc9RsKebPgbfN3FWak03zInVqdXRrraa410qz8fKBI
+1CKalErJN7/dpXu3vfJJ2TgYcgAN9N0lY+YFQ834qpDk6KOTYzvIMJASVIJ1gjvl
+iE94hE6FYuHU9DlwYL3/qbOOb6lLIFHxaeQ95ZZR+raPyi1FGVGXV8oZI5f2Uzxo
+LYyioTRjgC0cr9aIK56ZQ5I/npwuEYSL/8oIWdRrYGQT0FFQQAnhhkd61DuPt3GA
+fhsY1fGkPo/YC3yulOJt98FIMg/lRlYfOrxIbLkCDQReiiM/ARAAwIzaby43las5
+ApAWVw4MxCIpdY9S0tKUBgF4koKKkgUQ20KzI395LctZ6TwRSaBp9df/Wi9JtXe3
+bkt46ASjq8CCMggVptq80KyhnVMYDJD8mH+gFjUdlxTgILg1tnYwt01oBIMh8T1c
+EUQ2kcWkDbIRnrrSkVxh+ntu8aqZaF9E9iScPbNO8V5qIGCTfeFti1IUfClQ10Cs
+dANPxVngzttHs7eg+ddwZdiwxb7vxKy1/juqWTNFcHYd4XQ8MIuedXliHpvI5quf
+MbFvOmX6xxxoXTL/efGoA/zCM6/BcM2ul1o/prJTauRuVKawE3mcMpTrubN+usf6
+QEUohxsxCvxVqGcJVAU5286Hv0Kc2jzqcWqEfiyjCJI0vwCzFk3sRbuawlDuC535
+paR23QC/ClSCghMzfRRnN4OpJQjzgc6yOZ3ydqmF5UeqGrgZhrW+O92jBb1XqGFV
+zTOYHvLNJCQ0Cj53fiYpju4Pdf2BWvDo1oSoKbrvSd3DUyXlgN2Ar6t3X2uz7HhL
+2496v3BoIOqzzcdvpCaDZjDdrw8SHpp45u9qrzMPKEIdqy4u5KjsKjuCZKczy4pc
+u44+JjDzNJRik0Ppf2AUJLBCnik6prZIttbCfGsvid7SR5sZZgjbGk/fuQCF/tQt
+aksvsIqb598/sTzNVBGkp6qWttTkPs8AEQEAAYkCPAQYAQoAJgIbIBYhBG0ewiab
+wLVFnIupIM/atB+Cks7uBQJj6WcnBQkJIarkAAoJEM/atB+Cks7uei8QAIa+BrMi
+fmLTSLe09CnGvacepKNao6UqSHwbmf6Tonv9rOU2EquKyCW/0YK53WGO6fnPE7FV
+8JYDWxecBvtLjj+hloEHJ/wliYwd4W3FOuGnb/E9mzQgyKdWcSBIxreZLdD7xZ5B
+iv3VLeKyx+xnJ99dC2+MBuL6CBk+gmzwri7/hkYG9GQW9TJEe7qi8D87iTN1YkXl
+cJXdDcqapEZxv8+nAa5E4gTmLlXnKYNidC6+9gtnGpCRZtSpLwX0pMVY27w9sthU
+Acnx5N3AwS7rCodqnU3ANa5a00wbWOmZ90qbofRX9RC3qkfoisr62bRELY7KFt7M
+VTV0YBTCPHFeP+bubyOOyUe1OJsCvWJfIhJm87qjS37WXxYDUU+KHGN4MX9LDvTS
+xy+h30Ba0XFfU1fgNtIvVR+MrrIGACq5VU2uSyBQLmIkgcusUComEx77mETE92Mw
+ROJfy1O5VGsNDr61xIu72MjKAlukwgwX/qQ7i8Flyf8N++J7fETf/4DHXxNS9imV
+JTVxHfvIWpclRfdUCZB6R1Ihv+n1T+yx/FroTxQ5wuilV7+0r2DhrW6Q0YISoWv5
+L1sfohVZCXF7EQgteax0/86WSboerrWQmfGk0k4SjKhBJK1O8Jhh2tk8OmlUz6Fs
+7MhFJ5NGASlFL7p0W5iB3qWYwn52sEBaI8VpmDMEYBW6BBYJKwYBBAHaRw8BAQdA
+WWTgOvzlX/x5OiYhMLK72aKOMvr0g6KIaynmN2YMp5O0M0pvbmF0aGFuIFNjaGxl
+aWZlciAoQ29tbWl0IFNpZ25pbmcgS2V5KSA8anNAbmlsLmltPoiaBBMWCgBCAhsD
+CAsJCg0MCAsHBhUKCQgLAwUWAwIBAAIeAQIXgBYhBAzGrFQcetxzPGQWEGNnA1dz
+lTEvBQJj6WYYBQkFtN+UAAoJEGNnA1dzlTEvXKQBAPQ4mbtEmbuMbfpeV3pMP8bO
+1OhOB4/Thx4tUrrV7JcjAQCveLdvBrB+cSh+DA7edl6/XWfafCT0qrzRFhaoEZhx
+Dbg4BGAVugQSCisGAQQBl1UBBQEBB0A2sxWorhv9BEE+urAmX5GBUfcCdta9Un6E
+t5wEG5jLVAMBCAeIfgQYFgoAJgIbDBYhBAzGrFQcetxzPGQWEGNnA1dzlTEvBQJj
+6WYtBQkFtN+pAAoJEGNnA1dzlTEvi+8BANiiPjamWJ3iSeMEaaYPoZXNZ7NAHlK0
+UUgQvB/osfQWAP9NKXMO7P5R/K+D2nRE/Ndmk0lqBykzumouPVuR21pYB5gzBGWW
+/sEWCSsGAQQB2kcPAQEHQAujl3ehBqKz3PFMW+rl8/d/1KS7Skx00xYU6xsLout+
+tDhKb25hdGhhbiBTY2hsZWlmZXIgKENvbW1pdCBTaWduaW5nIEtleSAyMDI0KSA8
+anNAbmlsLmltPoiaBBMWCgBCFiEEYy4qTb/j80NaLyG/lClu8uyb5oMFAmWW/sEC
+GwMFCQHhM4AICwkKDQwICwcGFQoJCAsDBRYDAgEAAh4FAheAAAoJEJQpbvLsm+aD
+g10BAP5MpkFbauicEGNTUJnmfbWZsGmmOTov7nG3ylVPp6UpAP4jIbm0Nz5L0+1B
+vA35PeZfJ8z2dIcuKPKkCgxbv55NAIkCNwQTAQoAIRYhBG0ewiabwLVFnIupIM/a
+tB+Cks7uBQJllwC0AwUBeAAKCRDP2rQfgpLO7sktEACdIKHR7vTHKgokw/6j2zwd
+Na3sBt0jC7tsqA7xbfobwMR3yoVnD49T4zHlW5MwKaQBsTkwI9pS4qbaPsX7VoXV
+5I8UpWPbXeDnofO9B+sO55ybVrGf1Fb2PmykZ85dgEe168hL0c5UX+9zCXjfFTHa
+GAxRmTrYKP0h+jYZJns1QK3KZEWh0pkqJz5oOLELqeZS2GMGn1PQjmbzz72/korZ
+sUswS5sDBbMVeusCWuNeY6FJZ6ziv97geu+uWe7ppwv25rebEKJgsuaIqDuAT2Gg
+3NgrubfXFVLlDxjuYdaO+ieBQur5z8UPaSzEYlF2p7/cut24A8WV/d3D5dX3XO/g
+AuEMkyAws9zOeY3NMMfkHEZsuX0AetH7cOQYyAUIlpye30OxeoZgO4Cl3G5q95sk
+Q4i/LpzNERq+JydmniPMbM/TL8p87RYr/bidO+0KeHwRzsesVu2ae1xO/ZRSyqny
+un5RZblS9QY1H3xUgKQWpMLxJGXr6n+9eRThRsrTK/JH6GFpkFnjmMpuxquAw32w
+PdxGWDUUE35pC4f0X/6rL8IBf32spXG+mKbBLTJkSkteSM26Uff4zVFludQU+N06
+c6XFX7eBpbhhHhsCabOskGFXXS0bdi6NcZgazm1I4rhqrT+pQFHDOZg/dgl5cND/
+Q4zqQ9Xrv/iV6ljHHAPYGrg4BGWW/sESCisGAQQBl1UBBQEBB0CTeGWS64rbAwJz
+Sioh6y0Urd5/pGIj5UEdyAFrjhiKDgMBCAeIfgQYFgoAJhYhBGMuKk2/4/NDWi8h
+v5QpbvLsm+aDBQJllv7BAhsMBQkB4TOAAAoJEJQpbvLsm+aDv0sBAIFCR1MA+d7V
+ll+AxWH/k2ghgfJ661e88iaoG7qUyve5APsFQbV5thutm99chCp8Sc+fulHNtrKJ
+WBymwZqetu7HBg==
+=mVJw
+-----END PGP PUBLIC KEY BLOCK-----
Index: src/Makefile
==================================================================
--- src/Makefile
+++ src/Makefile
@@ -87,11 +87,10 @@
OFString+JSONParsing.m \
OFString+PercentEncoding.m \
OFString+PropertyListParsing.m \
OFString+XMLEscaping.m \
OFString+XMLUnescaping.m \
- ${OF_SUBPROCESS_M} \
OFSystemInfo.m \
OFTarArchive.m \
OFTarArchiveEntry.m \
OFThread.m \
OFTimer.m \
@@ -110,10 +109,11 @@
OFZIPArchive.m \
OFZIPArchiveEntry.m \
${USE_SRCS_FILES} \
${USE_SRCS_PLUGINS} \
${USE_SRCS_SOCKETS} \
+ ${USE_SRCS_SUBPROCESS} \
${USE_SRCS_THREADS} \
${USE_SRCS_WINDOWS}
SRCS_FILES = OFFile.m \
OFString+PathAdditions.m
SRCS_PLUGINS = OFPlugin.m
@@ -142,10 +142,11 @@
SRCS_IPX = OFIPXSocket.m \
OFSPXSocket.m \
OFSPXStreamSocket.m
SRCS_UNIX_SOCKETS = OFUNIXDatagramSocket.m \
OFUNIXStreamSocket.m
+SRCS_SUBPROCESS = OFSubprocess.m
SRCS_THREADS = OFCondition.m \
OFMutex.m \
OFPlainCondition.m \
OFPlainMutex.m \
OFPlainThread.m \
Index: src/OFASPrintF.h
==================================================================
--- src/OFASPrintF.h
+++ src/OFASPrintF.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFASPrintF.m
==================================================================
--- src/OFASPrintF.m
+++ src/OFASPrintF.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFApplication.h
==================================================================
--- src/OFApplication.h
+++ src/OFApplication.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFApplication.m
==================================================================
--- src/OFApplication.m
+++ src/OFApplication.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFArchiveEntry.h
==================================================================
--- src/OFArchiveEntry.h
+++ src/OFArchiveEntry.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFArchiveIRIHandler.h
==================================================================
--- src/OFArchiveIRIHandler.h
+++ src/OFArchiveIRIHandler.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFArchiveIRIHandler.m
==================================================================
--- src/OFArchiveIRIHandler.m
+++ src/OFArchiveIRIHandler.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFArray+Private.h
==================================================================
--- src/OFArray+Private.h
+++ src/OFArray+Private.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFArray.h
==================================================================
--- src/OFArray.h
+++ src/OFArray.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFArray.m
==================================================================
--- src/OFArray.m
+++ src/OFArray.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFAsyncIPSocketConnector.h
==================================================================
--- src/OFAsyncIPSocketConnector.h
+++ src/OFAsyncIPSocketConnector.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFAsyncIPSocketConnector.m
==================================================================
--- src/OFAsyncIPSocketConnector.m
+++ src/OFAsyncIPSocketConnector.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFAtomic.h
==================================================================
--- src/OFAtomic.h
+++ src/OFAtomic.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFBase64.h
==================================================================
--- src/OFBase64.h
+++ src/OFBase64.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFBase64.m
==================================================================
--- src/OFBase64.m
+++ src/OFBase64.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFBitSetCharacterSet.h
==================================================================
--- src/OFBitSetCharacterSet.h
+++ src/OFBitSetCharacterSet.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFBitSetCharacterSet.m
==================================================================
--- src/OFBitSetCharacterSet.m
+++ src/OFBitSetCharacterSet.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFBlock.h
==================================================================
--- src/OFBlock.h
+++ src/OFBlock.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFBlock.m
==================================================================
--- src/OFBlock.m
+++ src/OFBlock.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFCRC16.h
==================================================================
--- src/OFCRC16.h
+++ src/OFCRC16.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFCRC16.m
==================================================================
--- src/OFCRC16.m
+++ src/OFCRC16.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFCRC32.h
==================================================================
--- src/OFCRC32.h
+++ src/OFCRC32.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFCRC32.m
==================================================================
--- src/OFCRC32.m
+++ src/OFCRC32.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFCharacterSet.h
==================================================================
--- src/OFCharacterSet.h
+++ src/OFCharacterSet.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFCharacterSet.m
==================================================================
--- src/OFCharacterSet.m
+++ src/OFCharacterSet.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFCollection.h
==================================================================
--- src/OFCollection.h
+++ src/OFCollection.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFColor.h
==================================================================
--- src/OFColor.h
+++ src/OFColor.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFColor.m
==================================================================
--- src/OFColor.m
+++ src/OFColor.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteArray.h
==================================================================
--- src/OFConcreteArray.h
+++ src/OFConcreteArray.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteArray.m
==================================================================
--- src/OFConcreteArray.m
+++ src/OFConcreteArray.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteColor.h
==================================================================
--- src/OFConcreteColor.h
+++ src/OFConcreteColor.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteColor.m
==================================================================
--- src/OFConcreteColor.m
+++ src/OFConcreteColor.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteCountedSet.h
==================================================================
--- src/OFConcreteCountedSet.h
+++ src/OFConcreteCountedSet.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteCountedSet.m
==================================================================
--- src/OFConcreteCountedSet.m
+++ src/OFConcreteCountedSet.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteData.h
==================================================================
--- src/OFConcreteData.h
+++ src/OFConcreteData.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteData.m
==================================================================
--- src/OFConcreteData.m
+++ src/OFConcreteData.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteDate.h
==================================================================
--- src/OFConcreteDate.h
+++ src/OFConcreteDate.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteDate.m
==================================================================
--- src/OFConcreteDate.m
+++ src/OFConcreteDate.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteDictionary.h
==================================================================
--- src/OFConcreteDictionary.h
+++ src/OFConcreteDictionary.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteDictionary.m
==================================================================
--- src/OFConcreteDictionary.m
+++ src/OFConcreteDictionary.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteMutableArray.h
==================================================================
--- src/OFConcreteMutableArray.h
+++ src/OFConcreteMutableArray.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteMutableArray.m
==================================================================
--- src/OFConcreteMutableArray.m
+++ src/OFConcreteMutableArray.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteMutableData.h
==================================================================
--- src/OFConcreteMutableData.h
+++ src/OFConcreteMutableData.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteMutableData.m
==================================================================
--- src/OFConcreteMutableData.m
+++ src/OFConcreteMutableData.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteMutableDictionary.h
==================================================================
--- src/OFConcreteMutableDictionary.h
+++ src/OFConcreteMutableDictionary.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteMutableDictionary.m
==================================================================
--- src/OFConcreteMutableDictionary.m
+++ src/OFConcreteMutableDictionary.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteMutableSet.h
==================================================================
--- src/OFConcreteMutableSet.h
+++ src/OFConcreteMutableSet.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteMutableSet.m
==================================================================
--- src/OFConcreteMutableSet.m
+++ src/OFConcreteMutableSet.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteNumber.h
==================================================================
--- src/OFConcreteNumber.h
+++ src/OFConcreteNumber.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteNumber.m
==================================================================
--- src/OFConcreteNumber.m
+++ src/OFConcreteNumber.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteSet.h
==================================================================
--- src/OFConcreteSet.h
+++ src/OFConcreteSet.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteSet.m
==================================================================
--- src/OFConcreteSet.m
+++ src/OFConcreteSet.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteSubarray.h
==================================================================
--- src/OFConcreteSubarray.h
+++ src/OFConcreteSubarray.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteSubarray.m
==================================================================
--- src/OFConcreteSubarray.m
+++ src/OFConcreteSubarray.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteValue.h
==================================================================
--- src/OFConcreteValue.h
+++ src/OFConcreteValue.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConcreteValue.m
==================================================================
--- src/OFConcreteValue.m
+++ src/OFConcreteValue.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFCondition.h
==================================================================
--- src/OFCondition.h
+++ src/OFCondition.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFCondition.m
==================================================================
--- src/OFCondition.m
+++ src/OFCondition.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConstantString.h
==================================================================
--- src/OFConstantString.h
+++ src/OFConstantString.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFConstantString.m
==================================================================
--- src/OFConstantString.m
+++ src/OFConstantString.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFCountedSet.h
==================================================================
--- src/OFCountedSet.h
+++ src/OFCountedSet.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFCountedSet.m
==================================================================
--- src/OFCountedSet.m
+++ src/OFCountedSet.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFCryptographicHash.h
==================================================================
--- src/OFCryptographicHash.h
+++ src/OFCryptographicHash.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFDDPSocket.h
==================================================================
--- src/OFDDPSocket.h
+++ src/OFDDPSocket.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFDDPSocket.m
==================================================================
--- src/OFDDPSocket.m
+++ src/OFDDPSocket.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFDNSQuery.h
==================================================================
--- src/OFDNSQuery.h
+++ src/OFDNSQuery.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFDNSQuery.m
==================================================================
--- src/OFDNSQuery.m
+++ src/OFDNSQuery.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFDNSResolver.h
==================================================================
--- src/OFDNSResolver.h
+++ src/OFDNSResolver.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFDNSResolver.m
==================================================================
--- src/OFDNSResolver.m
+++ src/OFDNSResolver.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
@@ -431,15 +431,15 @@
OFDNSResourceRecord *record;
if (*i + 10 > length)
@throw [OFTruncatedDataException exception];
- recordType = (buffer[*i] << 16) | buffer[*i + 1];
- DNSClass = (buffer[*i + 2] << 16) | buffer[*i + 3];
+ recordType = (buffer[*i] << 8) | buffer[*i + 1];
+ DNSClass = (buffer[*i + 2] << 8) | buffer[*i + 3];
TTL = (buffer[*i + 4] << 24) | (buffer[*i + 5] << 16) |
(buffer[*i + 6] << 8) | buffer[*i + 7];
- dataLength = (buffer[*i + 8] << 16) | buffer[*i + 9];
+ dataLength = (buffer[*i + 8] << 8) | buffer[*i + 9];
*i += 10;
if (*i + dataLength > length)
@throw [OFTruncatedDataException exception];
Index: src/OFDNSResolverSettings.h
==================================================================
--- src/OFDNSResolverSettings.h
+++ src/OFDNSResolverSettings.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFDNSResolverSettings.m
==================================================================
--- src/OFDNSResolverSettings.m
+++ src/OFDNSResolverSettings.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFDNSResourceRecord.h
==================================================================
--- src/OFDNSResourceRecord.h
+++ src/OFDNSResourceRecord.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
@@ -152,11 +152,11 @@
/**
* @class OFAAAADNSResourceRecord \
* OFDNSResourceRecord.h ObjFW/OFDNSResourceRecord.h
*
- * @brief A class represenging a DNS resource record.
+ * @brief A class representing a DNS resource record.
*/
OF_SUBCLASSING_RESTRICTED
@interface OFAAAADNSResourceRecord: OFDNSResourceRecord
{
OFSocketAddress _address;
@@ -390,11 +390,11 @@
domainName: (OFString *)domainName
TTL: (uint32_t)TTL OF_DESIGNATED_INITIALIZER;
@end
/**
- * @class OFRPNSResourceRecord \
+ * @class OFRPDNSResourceRecord \
* OFDNSResourceRecord.h ObjFW/OFDNSResourceRecord.h
*
* @brief A class representing an RP DNS resource record.
*/
OF_SUBCLASSING_RESTRICTED
@@ -559,11 +559,11 @@
recordType: (OFDNSRecordType)recordType
TTL: (uint32_t)TTL OF_UNAVAILABLE;
/**
* @brief Initializes an already allocated OFSRVDNSResourceRecord with the
- * specified name, class, preference, mail exchange and time to live.
+ * specified name, priority, weight, target, port and time to live.
*
* @param name The name for the resource record
* @param priority The priority for the resource record
* @param weight The weight for the resource record
* @param target The target for the resource record
Index: src/OFDNSResourceRecord.m
==================================================================
--- src/OFDNSResourceRecord.m
+++ src/OFDNSResourceRecord.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFDNSResponse.h
==================================================================
--- src/OFDNSResponse.h
+++ src/OFDNSResponse.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFDNSResponse.m
==================================================================
--- src/OFDNSResponse.m
+++ src/OFDNSResponse.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFData+CryptographicHashing.h
==================================================================
--- src/OFData+CryptographicHashing.h
+++ src/OFData+CryptographicHashing.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFData+CryptographicHashing.m
==================================================================
--- src/OFData+CryptographicHashing.m
+++ src/OFData+CryptographicHashing.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFData+MessagePackParsing.h
==================================================================
--- src/OFData+MessagePackParsing.h
+++ src/OFData+MessagePackParsing.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFData+MessagePackParsing.m
==================================================================
--- src/OFData+MessagePackParsing.m
+++ src/OFData+MessagePackParsing.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFData.h
==================================================================
--- src/OFData.h
+++ src/OFData.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
@@ -123,11 +123,11 @@
/**
* @brief Creates a new OFData with the specified `count` items of size 1 by
* taking over ownership of the specified items pointer.
*
* If initialization fails for whatever reason, the passed memory is *not*
- * free'd if `freeWhenDone` is true.
+ * freed if `freeWhenDone` is true.
*
* @param items The items to store in the OFData
* @param count The number of items
* @param freeWhenDone Whether to free the pointer when it is no longer needed
* by the OFData
@@ -140,11 +140,11 @@
/**
* @brief Creates a new OFData with the specified `count` items of the
* specified size by taking ownership of the specified items pointer.
*
* If initialization fails for whatever reason, the passed memory is *not*
- * free'd if `freeWhenDone` is true.
+ * freed if `freeWhenDone` is true.
*
* @param items The items to store in the OFData
* @param count The number of items
* @param itemSize The item size of a single item in bytes
* @param freeWhenDone Whether to free the pointer when it is no longer needed
@@ -242,11 +242,11 @@
* @brief Initializes an already allocated OFData with the specified `count`
* items of size 1 by taking over ownership of the specified items
* pointer.
*
* If initialization fails for whatever reason, the passed memory is *not*
- * free'd if `freeWhenDone` is true.
+ * freed if `freeWhenDone` is true.
*
* @param items The items to store in the OFData
* @param count The number of items
* @param freeWhenDone Whether to free the pointer when it is no longer needed
* by the OFData
@@ -260,11 +260,11 @@
* @brief Initializes an already allocated OFData with the specified `count`
* items of the specified size by taking ownership of the specified
* items pointer.
*
* If initialization fails for whatever reason, the passed memory is *not*
- * free'd if `freeWhenDone` is true.
+ * freed if `freeWhenDone` is true.
*
* @param items The items to store in the OFData
* @param count The number of items
* @param itemSize The item size of a single item in bytes
* @param freeWhenDone Whether to free the pointer when it is no longer needed
Index: src/OFData.m
==================================================================
--- src/OFData.m
+++ src/OFData.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFDatagramSocket.h
==================================================================
--- src/OFDatagramSocket.h
+++ src/OFDatagramSocket.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
@@ -185,11 +185,12 @@
*
* If the buffer is too small, the datagram is truncated.
*
* @param buffer The buffer to write the datagram to
* @param length The length of the buffer
- * @param runLoopMode The run loop mode in which to perform the async receive
+ * @param runLoopMode The run loop mode in which to perform the asynchronous
+ * receive
*/
- (void)asyncReceiveIntoBuffer: (void *)buffer
length: (size_t)length
runLoopMode: (OFRunLoopMode)runLoopMode;
@@ -219,11 +220,12 @@
*
* If the buffer is too small, the datagram is truncated.
*
* @param buffer The buffer to write the datagram to
* @param length The length of the buffer
- * @param runLoopMode The run loop mode in which to perform the async receive
+ * @param runLoopMode The run loop mode in which to perform the asynchronous
+ * receive
* @param block The block to call when the datagram has been received. If the
* block returns true, it will be called again with the same
* buffer and maximum length when more datagrams have been
* received. If you want the next method in the queue to handle
* the datagram received next, you need to return false from the
@@ -261,13 +263,14 @@
/**
* @brief Asynchronously sends the specified datagram to the specified address.
*
* @param data The data to send as a datagram
- * @param receiver A pointer to an @ref OFSocketAddress to which the datgram
+ * @param receiver A pointer to an @ref OFSocketAddress to which the datagram
* should be sent. The receiver is copied.
- * @param runLoopMode The run loop mode in which to perform the async send
+ * @param runLoopMode The run loop mode in which to perform the asynchronous
+ * send
*/
- (void)asyncSendData: (OFData *)data
receiver: (const OFSocketAddress *)receiver
runLoopMode: (OFRunLoopMode)runLoopMode;
@@ -290,11 +293,12 @@
* @brief Asynchronously sends the specified datagram to the specified address.
*
* @param data The data to send as a datagram
* @param receiver A pointer to an @ref OFSocketAddress to which the datagram
* should be sent. The receiver is copied.
- * @param runLoopMode The run loop mode in which to perform the async send
+ * @param runLoopMode The run loop mode in which to perform the asynchronous
+ * send
* @param block The block to call when the packet has been sent. It should
* return the data for the next send with the same callback or nil
* if it should not repeat.
*/
- (void)asyncSendData: (OFData *)data
Index: src/OFDatagramSocket.m
==================================================================
--- src/OFDatagramSocket.m
+++ src/OFDatagramSocket.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFDate.h
==================================================================
--- src/OFDate.h
+++ src/OFDate.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
@@ -187,20 +187,20 @@
format: (OFString *)format;
/**
* @brief Returns a date in the distant future.
*
- * The date is system-dependant.
+ * The date is system-dependent.
*
* @return A date in the distant future
*/
+ (instancetype)distantFuture;
/**
* @brief Returns a date in the distant past.
*
- * The date is system-dependant.
+ * The date is system-dependent.
*
* @return A date in the distant past
*/
+ (instancetype)distantPast;
Index: src/OFDate.m
==================================================================
--- src/OFDate.m
+++ src/OFDate.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
@@ -316,11 +316,11 @@
mutex = [[OFMutex alloc] init];
atexit(releaseMutex);
#endif
#ifdef OF_WINDOWS
- if ((module = LoadLibrary("msvcrt.dll")) != NULL)
+ if ((module = GetModuleHandle("msvcrt.dll")) != NULL)
_mktime64FuncPtr = (__time64_t (*)(struct tm *))
GetProcAddress(module, "_mktime64");
#endif
}
Index: src/OFDictionary.h
==================================================================
--- src/OFDictionary.h
+++ src/OFDictionary.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFDictionary.m
==================================================================
--- src/OFDictionary.m
+++ src/OFDictionary.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
@@ -317,10 +317,18 @@
count /= 2;
objects = OFAllocMemory(count, sizeof(id));
keys = OFAllocMemory(count, sizeof(id));
+
+ keys[i] = firstKey;
+ objects[i] = va_arg(arguments, id);
+
+ if (objects[i] == nil)
+ @throw [OFInvalidArgumentException exception];
+
+ i++;
while ((key = va_arg(arguments, id)) != nil &&
(object = va_arg(arguments, id)) != nil) {
OFEnsure(i < count);
Index: src/OFEmbeddedIRIHandler.h
==================================================================
--- src/OFEmbeddedIRIHandler.h
+++ src/OFEmbeddedIRIHandler.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFEmbeddedIRIHandler.m
==================================================================
--- src/OFEmbeddedIRIHandler.m
+++ src/OFEmbeddedIRIHandler.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFEnumerator.h
==================================================================
--- src/OFEnumerator.h
+++ src/OFEnumerator.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFEnumerator.m
==================================================================
--- src/OFEnumerator.m
+++ src/OFEnumerator.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFEpollKernelEventObserver.h
==================================================================
--- src/OFEpollKernelEventObserver.h
+++ src/OFEpollKernelEventObserver.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFEpollKernelEventObserver.m
==================================================================
--- src/OFEpollKernelEventObserver.m
+++ src/OFEpollKernelEventObserver.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFFile.h
==================================================================
--- src/OFFile.h
+++ src/OFFile.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFFile.m
==================================================================
--- src/OFFile.m
+++ src/OFFile.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFFileIRIHandler.h
==================================================================
--- src/OFFileIRIHandler.h
+++ src/OFFileIRIHandler.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFFileIRIHandler.m
==================================================================
--- src/OFFileIRIHandler.m
+++ src/OFFileIRIHandler.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
@@ -642,15 +642,15 @@
readdirMutex = [[OFMutex alloc] init];
atexit(releaseReaddirMutex);
#endif
#ifdef OF_WINDOWS
- if ((module = LoadLibrary("msvcrt.dll")) != NULL)
+ if ((module = GetModuleHandle("msvcrt.dll")) != NULL)
_wutime64FuncPtr = (int (*)(const wchar_t *,
struct __utimbuf64 *))GetProcAddress(module, "_wutime64");
- if ((module = LoadLibrary("kernel32.dll")) != NULL) {
+ if ((module = GetModuleHandleA("kernel32.dll")) != NULL) {
createSymbolicLinkWFuncPtr =
(WINAPI BOOLEAN (*)(LPCWSTR, LPCWSTR, DWORD))
GetProcAddress(module, "CreateSymbolicLinkW");
createHardLinkWFuncPtr =
(WINAPI BOOLEAN (*)(LPCWSTR, LPCWSTR,
Index: src/OFFileManager.h
==================================================================
--- src/OFFileManager.h
+++ src/OFFileManager.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
@@ -762,11 +762,11 @@
forName: (OFString *)name
ofItemAtIRI: (OFIRI *)IRI;
#ifdef OF_FILE_MANAGER_SUPPORTS_EXTENDED_ATTRIBUTES
/**
- * @brief Removes the extended attribute for the specified name wof the item at
+ * @brief Removes the extended attribute for the specified name of the item at
* the specified path.
*
* This method is not available on some systems.
*
* @param name The name of the extended attribute to remove
@@ -779,11 +779,11 @@
- (void)removeExtendedAttributeForName: (OFString *)name
ofItemAtPath: (OFString *)path;
#endif
/**
- * @brief Removes the extended attribute for the specified name wof the item at
+ * @brief Removes the extended attribute for the specified name of the item at
* the specified IRI.
*
* This method is not available for all IRIs.
*
* @param name The name of the extended attribute to remove
Index: src/OFFileManager.m
==================================================================
--- src/OFFileManager.m
+++ src/OFFileManager.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFFileManagerConstants.inc
==================================================================
--- src/OFFileManagerConstants.inc
+++ src/OFFileManagerConstants.inc
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFGZIPStream.h
==================================================================
--- src/OFGZIPStream.h
+++ src/OFGZIPStream.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFGZIPStream.m
==================================================================
--- src/OFGZIPStream.m
+++ src/OFGZIPStream.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
@@ -248,12 +248,13 @@
_inflateStream = nil;
_state++;
break;
case OFGZIPStreamStateCRC32:
- _bytesRead += [_stream readIntoBuffer: _buffer
- length: 4 - _bytesRead];
+ _bytesRead += [_stream
+ readIntoBuffer: _buffer + _bytesRead
+ length: 4 - _bytesRead];
if (_bytesRead < 4)
return 0;
CRC32 = ((uint32_t)_buffer[3] << 24) |
@@ -272,14 +273,18 @@
_bytesRead = 0;
_CRC32 = ~0;
_state++;
break;
case OFGZIPStreamStateUncompressedSize:
- _bytesRead += [_stream readIntoBuffer: _buffer
- length: 4 - _bytesRead];
+ _bytesRead += [_stream
+ readIntoBuffer: _buffer + _bytesRead
+ length: 4 - _bytesRead];
+
+ if (_bytesRead < 4)
+ return 0;
- uncompressedSize = ((uint32_t)_buffer[3] << 24) |
+ uncompressedSize = (_buffer[3] << 24) |
(_buffer[2] << 16) | (_buffer[1] << 8) | _buffer[0];
if (_uncompressedSize != uncompressedSize) {
OFString *actual = [OFString stringWithFormat:
@"%" PRIu32, _uncompressedSize];
OFString *expected = [OFString stringWithFormat:
Index: src/OFHMAC.h
==================================================================
--- src/OFHMAC.h
+++ src/OFHMAC.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFHMAC.m
==================================================================
--- src/OFHMAC.m
+++ src/OFHMAC.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFHTTPClient.h
==================================================================
--- src/OFHTTPClient.h
+++ src/OFHTTPClient.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFHTTPClient.m
==================================================================
--- src/OFHTTPClient.m
+++ src/OFHTTPClient.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFHTTPCookie.h
==================================================================
--- src/OFHTTPCookie.h
+++ src/OFHTTPCookie.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFHTTPCookie.m
==================================================================
--- src/OFHTTPCookie.m
+++ src/OFHTTPCookie.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFHTTPCookieManager.h
==================================================================
--- src/OFHTTPCookieManager.h
+++ src/OFHTTPCookieManager.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFHTTPCookieManager.m
==================================================================
--- src/OFHTTPCookieManager.m
+++ src/OFHTTPCookieManager.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFHTTPIRIHandler.h
==================================================================
--- src/OFHTTPIRIHandler.h
+++ src/OFHTTPIRIHandler.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFHTTPIRIHandler.m
==================================================================
--- src/OFHTTPIRIHandler.m
+++ src/OFHTTPIRIHandler.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFHTTPRequest.h
==================================================================
--- src/OFHTTPRequest.h
+++ src/OFHTTPRequest.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFHTTPRequest.m
==================================================================
--- src/OFHTTPRequest.m
+++ src/OFHTTPRequest.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFHTTPResponse.h
==================================================================
--- src/OFHTTPResponse.h
+++ src/OFHTTPResponse.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
@@ -72,11 +72,11 @@
* @return The response as a string
*/
- (OFString *)readString;
/**
- * @brief Rread the response as a string, trying to detect the encoding and
+ * @brief Read the response as a string, trying to detect the encoding and
* falling back to the specified encoding if not detectable.
*
* @return The response as a string
*/
- (OFString *)readStringWithEncoding: (OFStringEncoding)encoding;
Index: src/OFHTTPResponse.m
==================================================================
--- src/OFHTTPResponse.m
+++ src/OFHTTPResponse.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFHTTPServer.h
==================================================================
--- src/OFHTTPServer.h
+++ src/OFHTTPServer.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
@@ -56,11 +56,11 @@
* @param server The HTTP server which encountered an exception
* @param exception The exception which occurred on the HTTP server's listening
* socket
* @return Whether to continue listening. If you return false, existing
* connections will still be handled and you can start accepting new
- * connections again by calling @ref OFHTTPServer::start again.
+ * connections again by calling @ref OFHTTPServer#start again.
*/
- (bool)server: (OFHTTPServer *)server
didReceiveExceptionOnListeningSocket: (id)exception;
/**
Index: src/OFHTTPServer.m
==================================================================
--- src/OFHTTPServer.m
+++ src/OFHTTPServer.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFHostAddressResolver.h
==================================================================
--- src/OFHostAddressResolver.h
+++ src/OFHostAddressResolver.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFHostAddressResolver.m
==================================================================
--- src/OFHostAddressResolver.m
+++ src/OFHostAddressResolver.m
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer
+ * Copyright (c) 2008-2024 Jonathan Schleifer
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
Index: src/OFHuffmanTree.h
==================================================================
--- src/OFHuffmanTree.h
+++ src/OFHuffmanTree.h
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2008-2023 Jonathan Schleifer