<pre style='margin:0'>
Renee Otten (reneeotten) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/4d647d66ee0732899fa9699db32f6bff1061771a">https://github.com/macports/macports-ports/commit/4d647d66ee0732899fa9699db32f6bff1061771a</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 4d647d66ee0 wine-devel,wine-staging: Update to 10.2
</span>4d647d66ee0 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 4d647d66ee0732899fa9699db32f6bff1061771a
</span>Author: Dean M Greer <38226388+Gcenx@users.noreply.github.com>
AuthorDate: Fri Feb 28 21:00:33 2025 -0500
<span style='display:block; white-space:pre;color:#404040;'> wine-devel,wine-staging: Update to 10.2
</span>---
emulators/wine-devel/Portfile | 21 +-
emulators/wine-devel/files/0002-macos_hacks.diff | 60 +++---
emulators/wine-devel/files/0003-bug56854.diff | 23 +++
.../wine-devel/files/1002-staging-macos_hacks.diff | 24 +++
emulators/wine-devel/files/MR7448.diff | 225 +++++++++++++++++++++
5 files changed, 316 insertions(+), 37 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/emulators/wine-devel/Portfile b/emulators/wine-devel/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 1c5ebf38832..7b185ec846f 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/emulators/wine-devel/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/emulators/wine-devel/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -7,7 +7,7 @@ PortGroup muniversal 1.1
</span>
# Keep the wine-stable, wine-devel and wine-crossover portfiles as similar as possible.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-github.setup wine-mirror wine 10.1 wine-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup wine-mirror wine 10.2 wine-
</span> github.tarball_from archive
name wine-devel
conflicts wine-stable wine-staging wine-crossover
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -38,9 +38,9 @@ long_description \
</span>
checksums \
${distname}${extract.suffix} \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 e7d90b40c213d9d4c242eaaefb1d23c6a0b5cfd7 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 d997ee279514dffe0541ecfd30c1f48ef97659b745c07b2e57fffc109aa6c57f \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 51982659
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rmd160 163fecb6f1ee59a44b37e2b9eb237ab65488ab3c \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 bcf1a9870f1a670eddffcc329f1b44e8a900596fb2c7a3ec8c83b27e65a9b42e \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 52061847
</span>
depends_build \
port:bison \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -75,6 +75,11 @@ patchfiles-append \
</span> patchfiles-append \
0002-macos_hacks.diff
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Bug fixes (remove wine-10.3)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0003-bug56854.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ MR7448.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # wine requires the program specified in INSTALL to create intermediate
# directories; /usr/bin/install doesn't.
# http://bugs.winehq.org/show_bug.cgi?id=35310
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -145,12 +150,14 @@ subport wine-staging {
</span>
checksums-append \
${wine_staging_distfile} \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 d1588e87c643987301422bfc46fd06dca25f16a9 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 029009c52a0eb428451d8381992bbcabe50bed4527f3a9c73d00f55c7f3af9cc \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 9542987
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rmd160 e3cd40fcbe96c3b52b728f815328e6c9e9c40d01 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 44d051a8622dd6245d63b88d988eebcdb712d309ee57eccdccbe59d6c4788194 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 9386579
</span>
depends_patch-append port:autoconf
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ patchfiles-append 1002-staging-macos_hacks.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> set py_ver 3.13
set py_ver_nodot [string map {. {}} ${py_ver}]
depends_patch-append port:python${py_ver_nodot}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/emulators/wine-devel/files/0002-macos_hacks.diff b/emulators/wine-devel/files/0002-macos_hacks.diff
</span><span style='display:block; white-space:pre;color:#808080;'>index e8477d198d2..52824672efb 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/emulators/wine-devel/files/0002-macos_hacks.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/emulators/wine-devel/files/0002-macos_hacks.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -69,11 +69,11 @@ index df3447a9014..4d70b83ee14 100644
</span>
if (flags & (IDLE_PRIORITY_CLASS | HIGH_PRIORITY_CLASS | REALTIME_PRIORITY_CLASS |
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 2f2a7fe5427..ac525f1a477 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 33415b6dda8..2413fb537d7 100644
</span> --- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2244,6 +2244,11 @@ static NTSTATUS perform_relocations( void *module, IMAGE_NT_HEADERS *nt, SIZE_T
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return STATUS_SUCCESS;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2197,6 +2197,11 @@ done:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return status;
</span> }
+#ifdef __x86_64__
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -84,7 +84,7 @@ index 2f2a7fe5427..ac525f1a477 100644
</span>
/*************************************************************************
* build_module
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2324,6 +2329,15 @@ static NTSTATUS build_module( LPCWSTR load_path, const UNICODE_STRING *nt_name,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2278,6 +2283,15 @@ static NTSTATUS build_module( LPCWSTR load_path, const UNICODE_STRING *nt_name,
</span> TRACE_(loaddll)( "Loaded %s at %p: %s\n", debugstr_w(wm->ldr.FullDllName.Buffer), *module,
is_builtin ? "builtin" : "native" );
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -100,7 +100,7 @@ index 2f2a7fe5427..ac525f1a477 100644
</span> wm->ldr.LoadCount = 1;
*pwm = wm;
*module = NULL;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2765,6 +2779,399 @@ static WINE_MODREF *find_existing_module( HMODULE module )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2723,6 +2737,399 @@ static WINE_MODREF *find_existing_module( HMODULE module )
</span> return NULL;
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -500,7 +500,7 @@ index 2f2a7fe5427..ac525f1a477 100644
</span>
/******************************************************************************
* load_native_dll (internal)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -4365,6 +4772,18 @@ static void release_address_space(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4324,6 +4731,18 @@ static void release_address_space(void)
</span> #endif
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -519,7 +519,7 @@ index 2f2a7fe5427..ac525f1a477 100644
</span> /******************************************************************
* loader_init
*
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -4451,6 +4870,25 @@ void loader_init( CONTEXT *context, void **entry )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4414,6 +4833,25 @@ void loader_init( CONTEXT *context, void **entry )
</span> }
else
{
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -546,10 +546,10 @@ index 2f2a7fe5427..ac525f1a477 100644
</span> if (NtCurrentTeb()->WowTebOffset) init_wow64( context );
#endif
diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 92f2e2eb3a3..0dfee19f714 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 0bade5b35f0..1e4c485894f 100644
</span> --- a/dlls/ntdll/unix/loader.c
+++ b/dlls/ntdll/unix/loader.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1847,6 +1847,48 @@ static ULONG_PTR get_image_address(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1832,6 +1832,48 @@ static ULONG_PTR get_image_address(void)
</span> return 0;
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -598,7 +598,7 @@ index 92f2e2eb3a3..0dfee19f714 100644
</span> /***********************************************************************
* start_main_thread
*/
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1869,6 +1911,13 @@ static void start_main_thread(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1854,6 +1896,13 @@ static void start_main_thread(void)
</span> load_ntdll();
load_wow64_ntdll( main_image_info.Machine );
load_apiset_dll();
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -613,7 +613,7 @@ index 92f2e2eb3a3..0dfee19f714 100644
</span> }
diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 537e4e1f60e..73d18fc80fb 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 52c907f1a32..f41eb03e26b 100644
</span> --- a/dlls/ntdll/unix/signal_x86_64.c
+++ b/dlls/ntdll/unix/signal_x86_64.c
@@ -1023,7 +1023,11 @@ NTSTATUS WINAPI NtSetContextThread( HANDLE handle, const CONTEXT *context )
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -796,8 +796,8 @@ index 537e4e1f60e..73d18fc80fb 100644
</span> case TRAP_x86_STKFLT: /* Stack fault */
rec.ExceptionCode = EXCEPTION_STACK_OVERFLOW;
@@ -2600,6 +2748,8 @@ void call_init_thunk( LPTHREAD_START_ROUTINE entry, void *arg, BOOL suspend, TEB
<span style='display:block; white-space:pre;background:#ffe0e0;'>- __asm__ volatile (".byte 0x65\n\tmovq %0,%c1" :: "r" (teb->Tib.Self), "n" (FIELD_OFFSET(TEB, Tib.Self)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- __asm__ volatile (".byte 0x65\n\tmovq %0,%c1" :: "r" (teb->ThreadLocalStoragePointer), "n" (FIELD_OFFSET(TEB, ThreadLocalStoragePointer)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ volatile ("movq %0,%%gs:%c1" :: "r" (teb->Tib.Self), "n" (FIELD_OFFSET(TEB, Tib.Self)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ volatile ("movq %0,%%gs:%c1" :: "r" (teb->ThreadLocalStoragePointer), "n" (FIELD_OFFSET(TEB, ThreadLocalStoragePointer)));
</span> thread_data->pthread_teb = mac_thread_gsbase();
+ __asm__ volatile (".byte 0x65\n\tmovq %0,%c1" :: "r" (teb->Peb), "n" (FIELD_OFFSET(TEB, Peb)));
+ amd64_thread_data()->pthread_teb = mac_thread_gsbase();
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -805,10 +805,10 @@ index 537e4e1f60e..73d18fc80fb 100644
</span> thread's gsbase. Have each thread record its gsbase pointer into its
TEB so alloc_tls_slot() can find it. */
diff --git a/dlls/ntdll/unix/thread.c b/dlls/ntdll/unix/thread.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 3909470dd66..ef6867ecdca 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index b64a7dd40af..3da3606cfd3 100644
</span> --- a/dlls/ntdll/unix/thread.c
+++ b/dlls/ntdll/unix/thread.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1096,6 +1096,16 @@ static DECLSPEC_NORETURN void pthread_exit_wrapper( int status )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1099,6 +1099,16 @@ static DECLSPEC_NORETURN void pthread_exit_wrapper( int status )
</span> close( ntdll_get_thread_data()->wait_fd[1] );
close( ntdll_get_thread_data()->reply_fd );
close( ntdll_get_thread_data()->request_fd );
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -826,18 +826,18 @@ index 3909470dd66..ef6867ecdca 100644
</span> }
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 684a58a724b..bbe82086085 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 06a260cfe3f..06612e84440 100644
</span> --- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -62,6 +62,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #if defined(__APPLE__)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # include <mach/mach_init.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # include <mach/mach_vm.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -68,6 +68,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # include <mach/task.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # include <mach/thread_state.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # include <mach/vm_map.h>
</span> +# include <sys/utsname.h> /* CrossOver Hack #22011 */
#endif
#include "ntstatus.h"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1744,6 +1745,42 @@ static void mprotect_range( void *base, size_t size, BYTE set, BYTE clear )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1750,6 +1751,42 @@ static void mprotect_range( void *base, size_t size, BYTE set, BYTE clear )
</span> if (count) mprotect_exec( addr, count << page_shift, prot );
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -880,7 +880,7 @@ index 684a58a724b..bbe82086085 100644
</span>
/***********************************************************************
* set_vprot
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2114,7 +2151,7 @@ static NTSTATUS map_file_into_view( struct file_view *view, int fd, size_t start
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2120,7 +2157,7 @@ static NTSTATUS map_file_into_view( struct file_view *view, int fd, size_t start
</span> /* only try mmap if media is not removable (or if we require write access) */
if (!removable || (flags & MAP_SHARED))
{
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -889,7 +889,7 @@ index 684a58a724b..bbe82086085 100644
</span> goto done;
switch (errno)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2442,7 +2479,7 @@ static NTSTATUS map_pe_header( void *ptr, size_t size, int fd, BOOL *removable )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2448,7 +2485,7 @@ static NTSTATUS map_pe_header( void *ptr, size_t size, int fd, BOOL *removable )
</span>
if (!*removable)
{
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -898,7 +898,7 @@ index 684a58a724b..bbe82086085 100644
</span> return STATUS_SUCCESS;
switch (errno)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -3943,7 +3980,7 @@ void virtual_map_user_shared_data(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3962,7 +3999,7 @@ void virtual_map_user_shared_data(void)
</span> exit(1);
}
if ((res = server_get_unix_fd( section, 0, &fd, &needs_close, NULL, NULL )) ||
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -907,7 +907,7 @@ index 684a58a724b..bbe82086085 100644
</span> {
ERR( "failed to remap the process USD: %d\n", res );
exit(1);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -6124,6 +6161,56 @@ NTSTATUS WINAPI NtReadVirtualMemory( HANDLE process, const void *addr, void *buf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -6143,6 +6180,56 @@ NTSTATUS WINAPI NtReadVirtualMemory( HANDLE process, const void *addr, void *buf
</span> return status;
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -964,7 +964,7 @@ index 684a58a724b..bbe82086085 100644
</span>
/***********************************************************************
* NtWriteVirtualMemory (NTDLL.@)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -6144,6 +6231,10 @@ NTSTATUS WINAPI NtWriteVirtualMemory( HANDLE process, void *addr, const void *bu
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -6163,6 +6250,10 @@ NTSTATUS WINAPI NtWriteVirtualMemory( HANDLE process, void *addr, const void *bu
</span> if ((status = wine_server_call( req ))) size = 0;
}
SERVER_END_REQ;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1169,7 +1169,7 @@ index 6c6b2352bb6..2edac50a51c 100644
</span> NtProtectVirtualMemory( GetCurrentProcess(), (void **)&thunk, &size, PAGE_EXECUTE_READ, &old_prot );
return STATUS_SUCCESS;
diff --git a/server/mach.c b/server/mach.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 86ff7eac382..c659857884f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 0472e7a6701..aa34a56e887 100644
</span> --- a/server/mach.c
+++ b/server/mach.c
@@ -48,6 +48,7 @@
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1180,7 +1180,7 @@ index 86ff7eac382..c659857884f 100644
</span>
static mach_port_t server_mach_port;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -172,6 +173,26 @@ void init_thread_context( struct thread *thread )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -175,6 +176,26 @@ void init_thread_context( struct thread *thread )
</span> {
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1205,9 +1205,9 @@ index 86ff7eac382..c659857884f 100644
</span> +}
+
/* retrieve the thread x86 registers */
<span style='display:block; white-space:pre;background:#ffe0e0;'>- void get_thread_context( struct thread *thread, context_t *context, unsigned int flags )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void get_thread_context( struct thread *thread, struct context_data *context, unsigned int flags )
</span> {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -251,6 +272,13 @@ void get_thread_context( struct thread *thread, context_t *context, unsigned int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -254,6 +275,13 @@ void get_thread_context( struct thread *thread, struct context_data *context, un
</span> }
context->flags |= SERVER_CTX_DEBUG_REGISTERS;
}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/emulators/wine-devel/files/0003-bug56854.diff b/emulators/wine-devel/files/0003-bug56854.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..4a2cf661869
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/emulators/wine-devel/files/0003-bug56854.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,23 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 05315ce3da4d6f04232611fb5dd6ffbd77f87ce7 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Alexandre Julliard <julliard@winehq.org>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Sat, 22 Feb 2025 09:34:55 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] ntdll: Fix pointer access in read_image_directory().
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57854
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dlls/ntdll/loader.c | 2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 1 insertion(+), 1 deletion(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 33415b6dda8f..13a92af34053 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/dlls/ntdll/loader.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/dlls/ntdll/loader.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2404,7 +2404,7 @@ static ULONG read_image_directory( HANDLE file, const SECTION_IMAGE_INFORMATION
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ offset.QuadPart += offsetof( IMAGE_NT_HEADERS32, OptionalHeader ) + nt.nt32.FileHeader.SizeOfOptionalHeader;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ count = nt.nt32.FileHeader.NumberOfSections;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!(sec = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*sec) * count ))) return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (NtReadFile( file, 0, NULL, NULL, &io, &sec, count * sizeof(*sec), &offset, NULL )) goto done;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (NtReadFile( file, 0, NULL, NULL, &io, sec, count * sizeof(*sec), &offset, NULL )) goto done;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (io.Information != count * sizeof(*sec)) goto done;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (i = 0; i < count; i++)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/emulators/wine-devel/files/1002-staging-macos_hacks.diff b/emulators/wine-devel/files/1002-staging-macos_hacks.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..c070cf6dcd7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/emulators/wine-devel/files/1002-staging-macos_hacks.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,24 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 2f9a947921463681456c645d926b8a5c4c3cb6ff Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Dean M Greer <38226388+Gcenx@users.noreply.github.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Mon, 24 Feb 2025 16:33:49 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] macos_hacks_staging
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dlls/kernelbase/process.c | 1 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 1 insertion(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/dlls/kernelbase/process.c b/dlls/kernelbase/process.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 4d70b83ee14..d951c3cd78e 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/dlls/kernelbase/process.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/dlls/kernelbase/process.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -514,6 +514,7 @@ static const WCHAR *hack_append_command_line( const WCHAR *cmd, const WCHAR *cmd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ options[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {L"steamwebhelper.exe", L" --no-sandbox --in-process-gpu --disable-gpu", NULL, L"--type=crashpad-handler"},
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {L"Battle.net.exe", L" --in-process-gpu --use-gl=swiftshader", NULL, NULL},
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.39.5 (Apple Git-154)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/emulators/wine-devel/files/MR7448.diff b/emulators/wine-devel/files/MR7448.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..ed4d5dddbb3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/emulators/wine-devel/files/MR7448.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,225 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 2cc634045596498bf09faacb8ecc18b7ee24a715 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Brendan Shanks <bshanks@codeweavers.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Fri, 28 Feb 2025 16:52:42 -0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 1/4] winegcc: Rename TOOL_ enum constants.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+macOS has conflicting TOOL_ defines in <mach-o/loader.h>.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tools/winegcc/winegcc.c | 30 +++++++++++++++---------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 15 insertions(+), 15 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/tools/winegcc/winegcc.c b/tools/winegcc/winegcc.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 600bd171b89..5516ca196c3 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tools/winegcc/winegcc.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tools/winegcc/winegcc.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -236,11 +236,11 @@ static int is_pe_target( const struct options *opts )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ enum tool
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- TOOL_CC,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- TOOL_CXX,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- TOOL_CPP,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- TOOL_LD,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- TOOL_OBJCOPY,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ WINEGCC_TOOL_CC,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ WINEGCC_TOOL_CXX,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ WINEGCC_TOOL_CPP,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ WINEGCC_TOOL_LD,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ WINEGCC_TOOL_OBJCOPY,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static const struct
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -312,12 +312,12 @@ static struct strarray get_translator(struct options *opts)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch(opts->processor)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case proc_cpp:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return build_tool_name( opts, opts->target_alias, TOOL_CPP );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return build_tool_name( opts, opts->target_alias, WINEGCC_TOOL_CPP );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case proc_cc:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case proc_as:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return build_tool_name( opts, opts->target_alias, TOOL_CC );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return build_tool_name( opts, opts->target_alias, WINEGCC_TOOL_CC );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case proc_cxx:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return build_tool_name( opts, opts->target_alias, TOOL_CXX );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return build_tool_name( opts, opts->target_alias, WINEGCC_TOOL_CXX );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ assert(0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return empty_strarray;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -639,8 +639,8 @@ static void compile(struct options* opts, const char* lang)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* mixing different C and C++ compilers isn't supported in configure anyway */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case proc_cc:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case proc_cxx:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- gcc = build_tool_name( opts, opts->target_alias, TOOL_CC );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- gpp = build_tool_name( opts, opts->target_alias, TOOL_CXX );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ gcc = build_tool_name( opts, opts->target_alias, WINEGCC_TOOL_CC );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ gpp = build_tool_name( opts, opts->target_alias, WINEGCC_TOOL_CXX );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for ( j = 0; !gcc_defs && j < comp_args.count; j++ )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const char *cc = comp_args.str[j];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -963,11 +963,11 @@ static void build_spec_obj( struct options *opts, const char *spec_file, const c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* get the filename from the path */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ output_name = get_basename( output_file );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- tool = build_tool_name( opts, target, TOOL_CC );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ tool = build_tool_name( opts, target, WINEGCC_TOOL_CC );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ strarray_add( &spec_args, strmake( "--cc-cmd=%s", strarray_tostring( tool, " " )));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!is_pe)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- tool = build_tool_name( opts, target, TOOL_LD );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ tool = build_tool_name( opts, target, WINEGCC_TOOL_LD );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ strarray_add( &spec_args, strmake( "--ld-cmd=%s", strarray_tostring( tool, " " )));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1362,7 +1362,7 @@ static void build(struct options* opts)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (opts->debug_file && !strendswith(opts->debug_file, ".pdb"))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- struct strarray tool, objcopy = build_tool_name(opts, opts->target_alias, TOOL_OBJCOPY);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct strarray tool, objcopy = build_tool_name(opts, opts->target_alias, WINEGCC_TOOL_OBJCOPY);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tool = empty_strarray;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ strarray_addall( &tool, objcopy );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1393,9 +1393,9 @@ static void build(struct options* opts)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ error("--out-implib requires a .spec or .def file\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ implib_args = get_winebuild_args( opts, opts->target_alias );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- tool = build_tool_name( opts, opts->target_alias, TOOL_CC );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ tool = build_tool_name( opts, opts->target_alias, WINEGCC_TOOL_CC );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ strarray_add( &implib_args, strmake( "--cc-cmd=%s", strarray_tostring( tool, " " )));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- tool = build_tool_name( opts, opts->target_alias, TOOL_LD );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ tool = build_tool_name( opts, opts->target_alias, WINEGCC_TOOL_LD );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ strarray_add( &implib_args, strmake( "--ld-cmd=%s", strarray_tostring( tool, " " )));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ strarray_add(&implib_args, "--implib");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+GitLab
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 7ca56806adef6068f5d05c821e1bd0ea78305528 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Brendan Shanks <bshanks@codeweavers.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Fri, 28 Feb 2025 16:55:40 -0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 2/4] tools: Use _NSGetExecutablePath to implement get_bindir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ on macOS.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57874
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tools/tools.h | 9 +++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 9 insertions(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/tools/tools.h b/tools/tools.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 319aff77da7..f017bab0e93 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tools/tools.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tools/tools.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -39,6 +39,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef HAVE_SYS_SYSCTL_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # include <sys/sysctl.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# include <mach-o/dyld.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef _WIN32
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # include <direct.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -705,6 +708,12 @@ static inline char *get_bindir( const char *argv0 )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!sysctl( pathname, ARRAY_SIZE(pathname), path, &path_size, NULL, 0 ))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dir = realpath( path, NULL );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ free( path );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#elif defined(__APPLE__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uint32_t path_size = PATH_MAX;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ char *path = xmalloc( path_size );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!_NSGetExecutablePath( path, &path_size ))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ dir = realpath( path, NULL );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ free( path );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!dir && !(dir = realpath( argv0, NULL ))) return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return get_dirname( dir );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+GitLab
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 9d024c3d321894b844bffd7f70db8bc95cefe948 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Brendan Shanks <bshanks@codeweavers.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Fri, 28 Feb 2025 16:57:41 -0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 3/4] server: Use _NSGetExecutablePath to implement get_nls_dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ on macOS.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ server/unicode.c | 14 ++++++++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 14 insertions(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/server/unicode.c b/server/unicode.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index b4864310f83..bb39b55e50c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/server/unicode.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/server/unicode.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -29,6 +29,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef HAVE_SYS_SYSCTL_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # include <sys/sysctl.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# include <mach-o/dyld.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "windef.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "winternl.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -290,6 +293,17 @@ static char *get_nls_dir(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dir = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#elif defined(__APPLE__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uint32_t dir_size = PATH_MAX;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ dir = malloc( dir_size );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (dir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (_NSGetExecutablePath( dir, &dir_size ))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ free( dir );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ dir = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dir = realpath( server_argv0, NULL );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+GitLab
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From a17a8fbda266820091cad3dd87e7bbb682cfcf65 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Brendan Shanks <bshanks@codeweavers.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Fri, 28 Feb 2025 17:01:58 -0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 4/4] loader: Use _NSGetExecutablePath to implement
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ get_self_exe on macOS.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ loader/main.c | 9 +++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 9 insertions(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/loader/main.c b/loader/main.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 3467d29cb5c..f8b113f3136 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/loader/main.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/loader/main.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -34,6 +34,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef HAVE_SYS_SYSCTL_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # include <sys/sysctl.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# include <mach-o/dyld.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "main.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -134,6 +137,12 @@ static const char *get_self_exe(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (path && !sysctl( pathname, sizeof(pathname)/sizeof(pathname[0]), path, &path_size, NULL, 0 ))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return path;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ free( path );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#elif defined(__APPLE__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uint32_t path_size = PATH_MAX;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ char *path = malloc( path_size );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (path && !_NSGetExecutablePath( path, &path_size ))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return path;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ free( path );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+GitLab
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span></pre><pre style='margin:0'>
</pre>