I am sorry that I didn't comment earlier, but simply assumed you were aware of the different versions of libdispatch. The GSDispatch.h header provides support for some compatibility between versions, but when you want to use more features you also need to extend the configure script to check for their availability.
As a rule, the gnustep core libraries need to support all versions of code they depend on (certainly all the versions that come with all the major target unix style operating systems), and in rare cases of incompatibility this needs to be detected at configure time with a message telling the user what missing dependency they need to install.
I don't think much is needed for the NSURLSession rewrite to be portable across all the major platform versions of libdispatch (ie without having to install a specific version rather than the one provided by the system), but I suspect the testcases would best be updated to use portable code (eg. no libdispatch in the test cases themselves).
An alternative solution (license permitting) might be to bundle a specific version of libdispatch with the base library, and have it automatically built/installed first. That comes with its own set of problems though.
* clang-format: Do not use tabs
* Ignore clangd cache and compile_commands
* NSBlockOperation: Fix memory leak
* NSHTTPCookie: Fix expires date parsing
* NSOperation: Remove all objects at end of execution
* Reimplementation of NSURLSession
* Update ChangeLog
fstat() on UNIX isn't guaranteed to always succeed, even if the file handle is valid. Special files may or may not support fstat() in the kernel.
(For context, I'm working on a Vulkan application. Vulkan has facilities to send certain objects across processes by representing the objects as file descriptors. These file descriptors still need to be close()d, which makes them good candidates for wrapping an NSFileHandle around them, but they do not support fstat(). I'm creating multiple of these each frame in the application, which means the line "unable to get status of descriptor" appears very often in the terminal while my application is running.)