On Tue, May 19, 2026 at 5:02 PM Branko Čibej <[email protected]> wrote:

> On 19. 5. 26 15:19, Timofei Zhakov wrote:
>
> On Mon, May 18, 2026 at 11:20 PM Branko Čibej <[email protected]> wrote:
>
>> On 18. 5. 26 22:27, Ivan Zhakov wrote:
>>
>> On Mon, 18 May 2026 at 21:24, Timofei Zhakov <[email protected]> wrote:
>>
>>> On Mon, May 18, 2026 at 5:22 PM Branko Čibej <[email protected]> wrote:
>>>
>>>> On 18. 5. 26 17:04, Ivan Zhakov wrote:
>>>>
>>>>
>>> [..]
>>
>>> Yes, especially because the Unix and Win32 versions share a lot of
>>> things in common but sometimes need to do it in a slightly different way.
>>>
>>> Also what do you guys think about the fact that Win32 apr.h includes
>>> windows.h? It seems odd to me. APR promises to eliminate platform
>>> dependence by wrapping everything into POSIX-ish style API
>>>
>>
>> Cross-platform API. I'm not sure what you mean by POSIX-ish, but APR
>> isn't that.
>>
>>
> I mean that the API is similar. For example, apr_file_open() kind of works
> almost like fopen(). Not exactly but in my head I have this connection.
> Okay their signatures are very different and even naming, but I think there
> is some pattern of doing the same thing but in a slightly more modern way
> with a bit more control.
>
>
>> without extra unneeded junk and then all high level code essentially has
>>> GetLastError in the scope. I think if one wants to explicitly use win32
>>> API, they should include those headers themselves.
>>>
>>
>> It's a good question. I agree that apr.h should not depend on system
>> headers like Windows.h. But one reason that Windows error codes are used in
>> apr_errno.h.
>>
>>
>> apr.h is a generated, *system-specific* header. Of course it can and
>> should depend on system headers if it needs them. It also includes
>> sys/types.h and sys/socket.h and sys/wait.h and os2.h and so on, depending
>> on the target. That makes perfect sense.
>>
>>
> The question I have is whether we really want it or not.
>
> In reality it's always included in every source file. Take svn_wc.h for
> example:
>
> [[[
> #include <apr.h>
> #include <apr_pools.h>
> #include <apr_tables.h>
> #include <apr_hash.h>
> #include <apr_time.h>
> #include <apr_file_io.h>
>
> #include "svn_types.h"
> #include "svn_string.h"
> #include "svn_checksum.h"
> #include "svn_io.h"
> #include "svn_delta.h"     /* for svn_stream_t */
> #include "svn_opt.h"
> #include "svn_ra.h"        /* for svn_ra_reporter_t type */
> ]]]
>
>
>
> You'll have to be more specific: what exactly is wrong with that? apr.h
> uses symbols defined in windows.h, what else is it supposed to do? I really
> don't understand your objections.
>
>
It shouldn't use any symbols from it. That's what I'm saying.

However, there are a few places that currently potentially do use it:

[[[
#if APR_HAS_UNICODE_FS
/* An arbitrary size that is digestable. True max is a bit less than 32000
*/
#define APR_PATH_MAX 8192
#else /* !APR_HAS_UNICODE_FS */
#define APR_PATH_MAX MAX_PATH
#endif
]]]

and

[[[
/* Appears in later flavors, not the originals. */
#ifndef in_addr6
#define  in6_addr    in_addr6
#endif

#ifndef WS2TCPIP_INLINE
#define IN6_IS_ADDR_V4MAPPED(a) \
    (   (*(const apr_uint64_t *)(const void *)(&(a)->s6_addr[0]) == 0) \
     && (*(const apr_uint32_t *)(const void *)(&(a)->s6_addr[8]) ==
ntohl(0x0000ffff)))
#endif
]]]

(MAX_PATH, ntohl, in_addr6 are the ones affected)

I really think those should be somewhere in private headers or in the
sources. MAX_PATH is fine. But ipv6 magic - I don't like it.

Then we basically just have a header that nobody uses. It also brings a lot
of stuff into the autocomplete.

-- 
Timofei Zhakov

Reply via email to