Hi Dagobert,

Am 2021-09-01 um 14:28 schrieb Dagobert Michelsen:
I see. Recompiling APR would require recompiling some dependend packages,
but not too many:
  https://www.opencsw.org/packages/CSWlibapr1-0/

Well, that would be nice, too :-). I just wasn't sure if you can force an update of all dependent packages at the *user* sites within the OpenCSW framework. Meaning that it won't be good if for example a user mixes a new (_FILE_OFFSET_BITS=64) apr with an old subversion. So I thought enabling BUILD64=1 for subversion is the safer way to accomplish my goal.

Maybe I have not fully understood the issue, but wouldn’t a 64 bit subversion 
automatically
include the 64 bit directory cookies as it automatically implies 64 bit data 
structures?
And this should already be the case for 64 bit APR. The split header for 32 and 
64 bit
was not needed in the past IIRC.

The bug is exactly that the header is not split! I've attached a full diff between apr-32.h and apr-64.h as seen on Solaris11, but the most important difference is

-#define APR_SIZEOF_VOIDP 4
+#define APR_SIZEOF_VOIDP 8

That's essentially why a 64-bit subversion compiled without a separate apr-64.h won't pass the tests and also doesn't work in practice as I've found out before I did the changes to apr.

Gruesse,
Franz
--- /opt/csw/include/apr-32.h   2021-04-23 15:02:51.000000000 +0200
+++ /opt/csw/include/apr-64.h   2021-04-23 15:10:21.000000000 +0200
@@ -294,7 +294,7 @@
 #define APR_HAS_UNICODE_FS        0
 #define APR_HAS_PROC_INVOKED      0
 #define APR_HAS_USER              1
-#define APR_HAS_LARGE_FILES       1
+#define APR_HAS_LARGE_FILES       0
 #define APR_HAS_XTHREAD_FILES     0
 #define APR_HAS_OS_UUID           1
 #define APR_HAS_TIMEDLOCKS        1
@@ -333,7 +333,7 @@
 typedef  int             apr_int32_t;
 typedef  unsigned int    apr_uint32_t;
 
-#define APR_SIZEOF_VOIDP 4
+#define APR_SIZEOF_VOIDP 8
 
 /*
  * Darwin 10's default compiler (gcc42) builds for both 64 and
@@ -378,9 +378,9 @@
 
 typedef  size_t          apr_size_t;
 typedef  ssize_t         apr_ssize_t;
-typedef  off64_t           apr_off_t;
+typedef  off_t           apr_off_t;
 typedef  socklen_t       apr_socklen_t;
-typedef  unsigned long           apr_ino_t;
+typedef  ino_t           apr_ino_t;
 
 #if APR_SIZEOF_VOIDP == 8
 typedef  apr_uint64_t            apr_uintptr_t;
@@ -555,10 +555,10 @@
 #define APR_SIZE_T_FMT "lu"
 
 /* And APR_OFF_T_FMT */
-#define APR_OFF_T_FMT APR_INT64_T_FMT
+#define APR_OFF_T_FMT "ld"
 
 /* And APR_PID_T_FMT */
-#define APR_PID_T_FMT "ld"
+#define APR_PID_T_FMT "d"
 
 /* And APR_INT64_T_FMT */
 #define APR_INT64_T_FMT PRId64

Reply via email to