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
ADDED .github/workflows/fedora-mingw.yml
Index: .github/workflows/fedora-mingw.yml
==================================================================
--- .github/workflows/fedora-mingw.yml
+++ .github/workflows/fedora-mingw.yml
@@ -0,0 +1,29 @@
+name: fedora-mingw
+on: [push, pull_request]
+jobs:
+ tests:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ include:
+ - prefix: mingw32
+ triple: i686-w64-mingw32
+ - prefix: mingw64
+ triple: x86_64-w64-mingw32
+ container: fedora
+ steps:
+ - name: Install dependencies
+ run: |
+ sudo dnf upgrade --refresh -y
+ sudo dnf install -y ${{matrix.prefix}}-gcc ${{matrix.prefix}}-openssl clang autoconf automake make wine
+ - uses: actions/checkout@v4
+ - name: autogen.sh
+ run: ./autogen.sh
+ - name: configure
+ run: ./configure --host=${{matrix.triple}} OBJC="clang -target ${{matrix.triple}}"
+ - name: make
+ run: make -j$(nproc)
+ - name: make check
+ run: WINEPATH=/usr/${{matrix.triple}}/sys-root/mingw/bin WINEPREFIX=/tmp/wineprefix make check
+ - name: make install
+ run: sudo make install
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
DELETED .github/workflows/macos-12.yml
Index: .github/workflows/macos-12.yml
==================================================================
--- .github/workflows/macos-12.yml
+++ .github/workflows/macos-12.yml
@@ -1,31 +0,0 @@
-name: macos-12
-on: [push, pull_request]
-jobs:
- tests:
- runs-on: macos-12
- strategy:
- matrix:
- configure_flags:
- -
- - --disable-threads
- - --disable-threads --disable-sockets
- - --disable-threads --disable-files
- - --disable-threads --disable-sockets --disable-files
- - --disable-sockets
- - --disable-sockets --disable-files
- - --disable-files
- - --disable-shared
- steps:
- - name: Install dependencies
- run: brew install autoconf automake
- - uses: actions/checkout@v2
- - name: autogen.sh
- run: ./autogen.sh
- - name: configure
- run: ./configure ${{ matrix.configure_flags }}
- - name: make
- run: make -j$(sysctl -n hw.logicalcpu)
- - name: make check
- run: make check
- - name: make install
- run: sudo make install
ADDED .github/workflows/macos-14.yml
Index: .github/workflows/macos-14.yml
==================================================================
--- .github/workflows/macos-14.yml
+++ .github/workflows/macos-14.yml
@@ -0,0 +1,31 @@
+name: macos-14
+on: [push, pull_request]
+jobs:
+ tests:
+ runs-on: macos-14
+ strategy:
+ matrix:
+ configure_flags:
+ -
+ - --disable-threads
+ - --disable-threads --disable-sockets
+ - --disable-threads --disable-files
+ - --disable-threads --disable-sockets --disable-files
+ - --disable-sockets
+ - --disable-sockets --disable-files
+ - --disable-files
+ - --disable-shared
+ steps:
+ - name: Install dependencies
+ run: brew install autoconf automake
+ - uses: actions/checkout@v4
+ - name: autogen.sh
+ run: ./autogen.sh
+ - name: configure
+ run: ./configure ${{ matrix.configure_flags }}
+ - name: make
+ run: make -j$(sysctl -n hw.logicalcpu)
+ - name: make check
+ run: make check
+ - name: make install
+ run: sudo make install
ADDED .github/workflows/macos-latest.yml
Index: .github/workflows/macos-latest.yml
==================================================================
--- .github/workflows/macos-latest.yml
+++ .github/workflows/macos-latest.yml
@@ -0,0 +1,31 @@
+name: macos-latest
+on: [push, pull_request]
+jobs:
+ tests:
+ runs-on: macos-latest
+ strategy:
+ matrix:
+ configure_flags:
+ -
+ - --disable-threads
+ - --disable-threads --disable-sockets
+ - --disable-threads --disable-files
+ - --disable-threads --disable-sockets --disable-files
+ - --disable-sockets
+ - --disable-sockets --disable-files
+ - --disable-files
+ - --disable-shared
+ steps:
+ - name: Install dependencies
+ run: brew install autoconf automake
+ - uses: actions/checkout@v2
+ - name: autogen.sh
+ run: ./autogen.sh
+ - name: configure
+ run: ./configure ${{ matrix.configure_flags }}
+ - name: make
+ run: make -j$(sysctl -n hw.logicalcpu)
+ - name: make check
+ run: make check
+ - name: make install
+ run: sudo make install
ADDED .github/workflows/msys2.yml
Index: .github/workflows/msys2.yml
==================================================================
--- .github/workflows/msys2.yml
+++ .github/workflows/msys2.yml
@@ -0,0 +1,38 @@
+name: msys2
+on: [push, pull_request]
+jobs:
+ tests:
+ runs-on: windows-latest
+ strategy:
+ matrix:
+ sys:
+ # Broken: Exceptions with ARC fail. Works with other mingw-w64
+ # distributions.
+ #- mingw32
+ - mingw64
+ - ucrt64
+ - clang32
+ - clang64
+ steps:
+ - uses: actions/checkout@v4
+ - uses: msys2/setup-msys2@v2
+ with:
+ update: true
+ msystem: ${{matrix.sys}}
+ install: autoconf automake make
+ pacboy: clang:p openssl:p
+ - name: autogen.sh
+ shell: msys2 {0}
+ run: ./autogen.sh
+ - name: configure
+ shell: msys2 {0}
+ run: ./configure OBJC=clang
+ - name: make
+ shell: msys2 {0}
+ run: make -j4
+ - name: make check
+ shell: msys2 {0}
+ run: make check
+ - name: make install
+ shell: msys2 {0}
+ run: make install
Index: .github/workflows/netbsd-gcc.yml
==================================================================
--- .github/workflows/netbsd-gcc.yml
+++ .github/workflows/netbsd-gcc.yml
@@ -1,25 +1,25 @@
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
make install
Index: .github/workflows/netbsd.yml
==================================================================
--- .github/workflows/netbsd.yml
+++ .github/workflows/netbsd.yml
@@ -1,25 +1,25 @@
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
make install
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,74 @@
* Changes of existing features or bugfixes
+ New features
This file only contains the most significant changes.
+ObjFW 1.0.11 -> ObjFW 1.0.12, 2024-03-11
+ * Fixes a regression in OFZIPArchive that was introduced in 1.0.11 that
+ resulted in failing to extract archives and creating broken archives.
+ * Fixes a rare condition where OFInflateStream could end up in an endless
+ loop.
+ * Fixes OFTarArchiveEntry not having a default date, which could result in
+ messaging nil on a FP return, which yielded invalid results on 32-bit x86
+ with GCC.
+
+ObjFW 1.0.10 -> ObjFW 1.0.11, 2024-03-09
+ * Fixes -[OFHTTPClientResponse isAtEndOfStream] and
+ -[OFGZIPStream isAtEndOfStream].
+ * Fixes how OFZIPArchive handles disk 0 vs. disk 1.
+ * OFLHAArchive and OFZIPArchive create more compatible archives now.
+ * OFLHAArchive ignores padding in level 2 headers now.
+ * ofarc correctly sets modification dates of directories now by delaying
+ setting those until after all files have been extracted.
+ * Fixes a linker warning on macOS/iOS.
+ * Several minor documentation fixes.
+ * OFFileIRIHandler correctly transforms exceptions now so that they use an IRI
+ and not a path.
+
+ObjFW 1.0.9 -> ObjFW 1.0.10, 2024-02-24
+ * Fixes objc_getClassList() not releasing the global runtime mutex.
+ * Improves OFLHAArchive's compatibility with non-standard archives.
+ + Adds endbr32 / endbr64 / bti instructions for compatibility with Control
+ Flow Integrity.
+
+ObjFW 1.0.8 -> ObjFW 1.0.9, 2024-02-18
+ * Fixes OFGZIPStream reading the size and CRC32 incorrectly when either spans
+ multiple reads.
+ * Fixes a type mismatch in OFMapTable that could cause problems on big endian
+ systems when uint32_t and unsigned long have a different size.
+ * Fixes the default implementation of -[initWithKeys:arguments:] for custom
+ dictionaries.
+ * Improves detection of mutation during enumeration in
+ -[enumerateKeysAndObjectsUsingBlock:].
+ * Minor documentation fixes.
+
+ObjFW 1.0.7 -> ObjFW 1.0.8, 2024-01-21
+ * Fixes compilation on NetBSD, OpenBSD, OpenIndiana etc. which was broken by
+ 1.0.7.
+
+ObjFW 1.0.6 -> ObjFW 1.0.7, 2024-01-21
+ * Fixes inheriting the environment in OFSubprocess.
+ * Fixes dealloc in OFSubprocess when -[closeForWriting] was called.
+ + Adds tests for OFSubprocess.
+ * Changes the key for +[OFSystemInfo networkInterfaces] to the adapter name
+ on Windows XP and newer to avoid a possible collission on the adapter index.
+ * Fixes compilation with old MinGW versions.
+ * Fixes the documentation for OFSRVDNSResourceRecord.
+
+ObjFW 1.0.5 -> ObjFW 1.0.6, 2024-01-15
+ * Fixes compatibility with autoconf 2.72.
+ * Fixes OFDNSResolver's handling of types, classes and lengths > 255.
+
+ObjFW 1.0.4 -> ObjFW 1.0.5, 2023-11-05
+ * Fixes the calculation of the extra alignment in OFAllocObject()
+ * Fixes +[OFSystemInfo networkInterfaces] on OpenBSD and Windows 98
+ * Fixes OFSocketAddressString() for AppleTalk addresses
+ * Uses GetModuleHandle() instead of LoadLibrary() where possible on Windows
+ * Disables tests for global blocks on Win64 due to broken compilers
+ * Adds PGP keys to verify tarballs and commits in the code repository
+
ObjFW 1.0.3 -> ObjFW 1.0.4, 2023-10-08
* Fixes OFFile closing fd 0 when initialization fails
* Fixes -[stringByAppendingPathComponent:] on empty strings
* Fixes +[OFSystemInfo operatingSystemName] and
+[OFSystemInfo operatingSystemVersion] returning nil on some systems
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,27 @@
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/CLANG64) | `pacman -S mingw-w64-clang-x86_64-objfw`
+ Windows (MSYS2/CLANGARM64) | `pacman -S mingw-w64-clang-aarch64-objfw`
+ Windows (MSYS2/UCRT64) | `pacman -S mingw-w64-ucrt-x86_64-objfw`
+ Windows (MSYS2/MINGW32) | `pacman -S mingw-w64-i686-objfw`
If your operating system is not listed, you can
build ObjFW from source.
@@ -131,22 +135,22 @@
Fossil
Clone the Fossil repository like this:
- $ fossil clone https://objfw.nil.im
+ fossil clone https://objfw.nil.im
You can then use Fossil's web interface to browse the timeline, tickets,
wiki pages, etc.:
- $ cd objfw
- $ fossil ui
+ cd objfw
+ fossil ui
In order to verify the signature of the currently checked out checkin, you
can use:
- $ fossil artifact current | gpg --verify
+ fossil artifact current | gpg --verify
Please note that not all checkins are signed, as the signing key only resides
on trusted systems. This means that checkins I perform on e.g. Windows are
unsigned. However, usually it should not take long until there is another
signed checkin. Alternatively, you can go back until the last signed checkin
@@ -154,28 +158,28 @@
Git
To clone the Git repository, use the following:
- $ git clone https://github.com/ObjFW/ObjFW
+ git clone https://github.com/ObjFW/ObjFW
Git commits are not signed, so if you want to check the signature of an
individual commit, branch head or tag, please use Fossil.
Building from source
To build ObjFW from source and install it, just run the following commands:
- $ ./configure
- $ make
- $ make check
- $ sudo make install
+ ./configure
+ make
+ make check
+ sudo make install
In case you checked out ObjFW from the Fossil or Git repository, you need to
run the following command first:
- $ ./autogen.sh
+ ./autogen.sh
macOS and iOS
Building as a framework
@@ -187,23 +191,23 @@
regular instructions above.
To build for iOS, follow the regular instructions, but instead of
`./configure` do something like this:
- $ clang="xcrun --sdk iphoneos clang"
- $ export OBJC="$clang -arch arm64e -arch arm64"
- $ export OBJCPP="$clang -arch arm64e -E"
- $ export IPHONEOS_DEPLOYMENT_TARGET="10.0"
- $ ./configure --prefix=/usr/local/ios --host=arm64-apple-darwin
+ clang="xcrun --sdk iphoneos clang"
+ export OBJC="$clang -arch arm64e -arch arm64"
+ export OBJCPP="$clang -arch arm64e -E"
+ export IPHONEOS_DEPLOYMENT_TARGET="10.0"
+ ./configure --prefix=/usr/local/ios --host=arm64-apple-darwin
To build for the iOS simulator, follow the regular instructions, but instead
of `./configure` use something like this:
- $ clang="xcrun --sdk iphonesimulator clang"
- $ export OBJC="$clang -arch $(uname -m)"
- $ export IPHONEOS_DEPLOYMENT_TARGET="10.0"
- $ ./configure --prefix=/usr/local/iossim --host=$(uname -m)-apple-darwin
+ clang="xcrun --sdk iphonesimulator clang"
+ export OBJC="$clang -arch $(uname -m)"
+ export IPHONEOS_DEPLOYMENT_TARGET="10.0"
+ ./configure --prefix=/usr/local/iossim --host=$(uname -m)-apple-darwin
Using the macOS or iOS framework in Xcode
To use the macOS framework in Xcode, you need to add the `.framework`s to
your project and add the following flags to `Other C Flags`:
@@ -255,31 +259,41 @@
target Windows 10 and newer, the CLANG64 and CLANG32 environments are the
recommended ones.
For CLANG64, use:
- $ pacman -Syu mingw-w64-clang-x86_64-clang mingw-w64-clang-x86_64-fossil
+ pacman -Syu mingw-w64-clang-x86_64-clang \
+ mingw-w64-clang-x86_64-fossil \
+ mingw-w64-clang-x86_64-openssl
For CLANG32, use:
- $ pacman -Syu mingw-w64-clang-i686-clang mingw-w64-clang-i686-fossil
+ pacman -Syu mingw-w64-clang-i686-clang \
+ mingw-w64-clang-i686-fossil \
+ mingw-w64-clang-i686-openssl
For CLANGARM64, use (you need to use Fossil via another environment):
- $ pacman -Syu mingw-w64-clang-aarch64-clang
+ pacman -Syu mingw-w64-clang-aarch64-clang mingw-w64-clang-aarch64-openssl
For MINGW64, use:
- $ pacman -Syu mingw-w64-x86_64-clang mingw-w64-x86_64-fossil
+ pacman -Syu mingw-w64-x86_64-clang \
+ mingw-w64-x86_64-fossil \
+ mingw-w64-x86_64-openssl
For MINGW32, use:
- $ pacman -Syu mingw-w64-i686-clang mingw-w64-i686-fossil
+ pacman -Syu mingw-w64-i686-clang \
+ mingw-w64-i686-fossil \
+ mingw-w64-i686-openssl
For UCRT64, use:
- $ pacman -Syu mingw-w64-ucrt-x86_64-clang mingw-w64-ucrt-x86_64-fossil
+ pacman -Syu mingw-w64-ucrt-x86_64-clang \
+ mingw-w64-ucrt-x86_64-fossil \
+ mingw-w64-ucrt-x86_64-openssl
When using `pacman` to install the packages, `pacman` might tell you to close
the window. If it does so, close the window, restart MSYS2 and execute the
`pacman` command again.
@@ -287,23 +301,23 @@
created shortcuts for each of them in your start menu. Just make sure to use
the correct shortcut for the environment you want to use.
Finally, install a few more things that are common between all environments:
- $ pacman -S autoconf automake make
+ pacman -S autoconf automake make
Getting, building and installing ObjFW
Start the MSYS2 using the shortcut for the environment you want to use and
check out ObjFW:
- $ fossil clone https://objfw.nil.im
+ fossil clone https://objfw.nil.im
You can also download a release tarball if you want. Now `cd` to the newly
checked out repository and build and install it:
- $ ./autogen.sh && ./configure && make -j16 install
+ ./autogen.sh && ./configure && make -j16 install
If everything was successful, you can now build projects using ObjFW for
Windows using the normal `objfw-compile` and friends.
Nintendo DS, Nintendo 3DS and Wii
@@ -312,37 +326,37 @@
Nintendo DS
Follow the normal process, but instead of `./configure` run:
- $ ./configure --host=arm-none-eabi --with-nds
+ ./configure --host=arm-none-eabi --with-nds
Nintendo 3DS
Follow the normal process, but instead of `./configure` run:
- $ ./configure --host=arm-none-eabi --with-3ds
+ ./configure --host=arm-none-eabi --with-3ds
Wii
Follow the normal process, but instead of `./configure` run:
- $ ./configure --host=powerpc-eabi --with-wii
+ ./configure --host=powerpc-eabi --with-wii
Amiga
Install [amiga-gcc](https://github.com/bebbo/amiga-gcc). Then follow the
normal process, but instead of `./configure` run:
- $ ./configure --host=m68k-amigaos
+ ./configure --host=m68k-amigaos
Writing your first application with ObjFW
To create your first, empty application, you can use `objfw-new`:
- $ objfw-new --app MyFirstApp
+ objfw-new --app MyFirstApp
This creates a file `MyFirstApp.m`. The `-[applicationDidFinishLaunching:]`
method is called as soon as ObjFW finished all initialization. Use this as
the entry point to your own code. For example, you could add the following
line there to create a "Hello World":
@@ -349,11 +363,11 @@
[OFStdOut writeLine: @"Hello World!"];
You can compile your new app using `objfw-compile`:
- $ objfw-compile -o MyFirstApp MyFirstApp.m
+ objfw-compile -o MyFirstApp MyFirstApp.m
`objfw-compile` is a tool that allows building applications and libraries
using ObjFW without needing a full-blown build system. If you want to use
your own build system, you can get the necessary flags from `objfw-config`.
@@ -366,11 +380,11 @@
In order to build the documentation yourself (necessary to have documentation
for trunk / master), you need to have [Doxygen](https://www.doxygen.nl)
installed. Once installed, you can build the documentation from the root
directory of the repository:
- $ make docs
+ make docs
Bugs and feature requests
If you find any bugs or have feature requests, please
@@ -385,20 +399,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.12, 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.12)
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 = 9
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 = 2
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
==================================================================
--- misc/keys.asc
+++ 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
@@ -72,12 +72,12 @@
* archive.
*/
if ([scheme isEqual: @"gzip"]) {
stream = [OFIRIHandler openItemAtIRI: [OFIRI IRIWithString:
IRI.path]
- mode: @"r"];
- stream = [OFGZIPStream streamWithStream: stream mode: @"r"];
+ mode: mode];
+ stream = [OFGZIPStream streamWithStream: stream mode: mode];
goto end;
}
percentEncodedPath = IRI.percentEncodedPath;
pos = [percentEncodedPath rangeOfString: @"!"].location;
@@ -92,11 +92,11 @@
OFMakeRange(pos + 1, percentEncodedPath.length - pos - 1)]
.stringByRemovingPercentEncoding;
if ([scheme isEqual: @"lha"]) {
OFLHAArchive *archive = [OFLHAArchive archiveWithIRI: archiveIRI
- mode: @"r"];
+ mode: mode];
OFLHAArchiveEntry *entry;
while ((entry = [archive nextEntry]) != nil) {
if ([entry.fileName isEqual: path]) {
stream = [archive streamForReadingCurrentEntry];
@@ -107,11 +107,11 @@
@throw [OFOpenItemFailedException exceptionWithIRI: IRI
mode: mode
errNo: ENOENT];
} else if ([scheme isEqual: @"tar"]) {
OFTarArchive *archive = [OFTarArchive archiveWithIRI: archiveIRI
- mode: @"r"];
+ mode: mode];
OFTarArchiveEntry *entry;
while ((entry = [archive nextEntry]) != nil) {
if ([entry.fileName isEqual: path]) {
stream = [archive streamForReadingCurrentEntry];
@@ -122,11 +122,11 @@
@throw [OFOpenItemFailedException exceptionWithIRI: IRI
mode: mode
errNo: ENOENT];
} else if ([scheme isEqual: @"zip"]) {
OFZIPArchive *archive = [OFZIPArchive archiveWithIRI: archiveIRI
- mode: @"r"];
+ mode: mode];
stream = [archive streamForReadingFile: path];
} else
@throw [OFInvalidArgumentException exception];
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
@@ -256,29 +256,32 @@
/* Signed integers */
case 0xD0: /* int 8 */
if (length < 2)
@throw [OFTruncatedDataException exception];
- *object = [OFNumber numberWithChar: buffer[1]];
+ *object = [OFNumber numberWithChar: (int8_t)buffer[1]];
return 2;
case 0xD1: /* int 16 */
if (length < 3)
@throw [OFTruncatedDataException exception];
- *object = [OFNumber numberWithShort: readUInt16(buffer + 1)];
+ *object = [OFNumber numberWithShort:
+ (int16_t)readUInt16(buffer + 1)];
return 3;
case 0xD2: /* int 32 */
if (length < 5)
@throw [OFTruncatedDataException exception];
- *object = [OFNumber numberWithLong: readUInt32(buffer + 1)];
+ *object = [OFNumber numberWithLong:
+ (int32_t)readUInt32(buffer + 1)];
return 5;
case 0xD3: /* int 64 */
if (length < 9)
@throw [OFTruncatedDataException exception];
- *object = [OFNumber numberWithLongLong: readUInt64(buffer + 1)];
+ *object = [OFNumber numberWithLongLong:
+ (int64_t)readUInt64(buffer + 1)];
return 9;
/* Floating point */
case 0xCA:; /* float 32 */
float f;
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,
@@ -677,13 +677,23 @@
}
- (OFStream *)openItemAtIRI: (OFIRI *)IRI mode: (OFString *)mode
{
void *pool = objc_autoreleasePoolPush();
- OFFile *file = [[OFFile alloc]
- initWithPath: IRI.fileSystemRepresentation
- mode: mode];
+ OFFile *file;
+
+ @try {
+ file = [OFFile fileWithPath: IRI.fileSystemRepresentation
+ mode: mode];
+ } @catch (OFOpenItemFailedException *e) {
+ /* The thrown one has a path instead of an IRI set. */
+ @throw [OFOpenItemFailedException exceptionWithIRI: IRI
+ mode: mode
+ errNo: e.errNo];
+ }
+
+ [file retain];
objc_autoreleasePoolPop(pool);
return [file autorelease];
}
@@ -1586,13 +1596,19 @@
# if defined(OF_LINUX)
ssize_t size = lgetxattr(cPath, cName, NULL, 0);
# elif defined(OF_MACOS)
ssize_t size = getxattr(cPath, cName, NULL, 0, 0, XATTR_NOFOLLOW);
# endif
- void *value = OFAllocMemory(1, size);
+ void *value;
OFData *data;
+ if (size < 0)
+ @throw [OFGetItemAttributesFailedException
+ exceptionWithIRI: IRI
+ errNo: errno];
+
+ value = OFAllocMemory(1, size);
@try {
# if defined(OF_LINUX)
if ((size = lgetxattr(cPath, cName, value, size)) < 0)
# elif defined(OF_MACOS)
if ((size = getxattr(cPath, cName, value, size, 0,
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
@@ -79,11 +79,17 @@
for (;;) {
uint8_t byte;
uint32_t CRC32, uncompressedSize;
- if (_stream.atEndOfStream) {
+ /*
+ * The inflate stream might have overread, causing _stream to
+ * be at the end, but the inflate stream will unread it once it
+ * has reached the end. Hence only check it if the state is not
+ * OFGZIPStreamStateData.
+ */
+ if (_state != OFGZIPStreamStateData && _stream.atEndOfStream) {
if (_state != OFGZIPStreamStateID1)
@throw [OFTruncatedDataException exception];
return 0;
}
@@ -248,12 +254,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 +279,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:
@@ -301,10 +312,18 @@
- (bool)lowlevelIsAtEndOfStream
{
if (_stream == nil)
@throw [OFNotOpenException exceptionWithObject: self];
+ /*
+ * The inflate stream might have overread, causing _stream to be at the
+ * end, but the inflate stream will unread it once it has reached the
+ * end.
+ */
+ if (_state == OFGZIPStreamStateData && !_inflateStream.atEndOfStream)
+ return false;
+
return _stream.atEndOfStream;
}
- (bool)hasDataInReadBuffer
{
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
@@ -916,16 +916,16 @@
- (size_t)lowlevelReadIntoBuffer: (void *)buffer length: (size_t)length
{
if (_stream == nil)
@throw [OFNotOpenException exceptionWithObject: self];
+ if (!_hasContentLength && !_chunked)
+ return [_stream readIntoBuffer: buffer length: length];
+
if (_atEndOfStream)
return 0;
- if (!_hasContentLength && !_chunked)
- return [_stream readIntoBuffer: buffer length: length];
-
if (_stream.atEndOfStream)
@throw [OFTruncatedDataException exception];
/* Content-Length */
if (!_chunked) {
@@ -1045,13 +1045,10 @@
}
}
- (bool)lowlevelIsAtEndOfStream
{
- if (_atEndOfStream)
- return true;
-
if (_stream == nil)
@throw [OFNotOpenException exceptionWithObject: self];
if (!_hasContentLength && !_chunked)
return _stream.atEndOfStream;
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