From 65e6bb8111acfc6d7fb08f209bb01348150c14d4 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Fri, 15 Mar 2019 11:44:38 +1100 Subject: [PATCH] Rebase against fa262317480e52eb3420c4e0ba9bae9e17db4457 --- .../0001-hid-Implement-HidD_FlushQueue.patch | 10 +-- ...-CS-functions-for-threadpool-locking.patch | 90 +++++++++---------- ...retrieving-DOS-attributes-in-NtQuery.patch | 38 +++++--- patches/patchinstall.sh | 2 +- 4 files changed, 76 insertions(+), 64 deletions(-) diff --git a/patches/hid-HidD_FlushQueue/0001-hid-Implement-HidD_FlushQueue.patch b/patches/hid-HidD_FlushQueue/0001-hid-Implement-HidD_FlushQueue.patch index fe17da8b..84ef8cd0 100644 --- a/patches/hid-HidD_FlushQueue/0001-hid-Implement-HidD_FlushQueue.patch +++ b/patches/hid-HidD_FlushQueue/0001-hid-Implement-HidD_FlushQueue.patch @@ -1,4 +1,4 @@ -From 25d8d0cbbab19ec990505c7cf1af4bcfcf7f5bfd Mon Sep 17 00:00:00 2001 +From cadd504fc3631e7b0ceee0add7100b4182f9173e Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Tue, 16 Oct 2018 15:34:38 +1100 Subject: [PATCH] hid: Implement HidD_FlushQueue @@ -11,7 +11,7 @@ Signed-off-by: Alistair Leslie-Hughes 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/dlls/hid/hid.spec b/dlls/hid/hid.spec -index cbae14c..549ceea 100644 +index e4d4202..505c3d2 100644 --- a/dlls/hid/hid.spec +++ b/dlls/hid/hid.spec @@ -1,4 +1,4 @@ @@ -21,12 +21,12 @@ index cbae14c..549ceea 100644 @ stdcall HidD_GetAttributes(long ptr) @ stub HidD_GetConfiguration diff --git a/dlls/hid/hidd.c b/dlls/hid/hidd.c -index 614e7c4..fa96bf9 100644 +index 4b703ca..a4384aa 100644 --- a/dlls/hid/hidd.c +++ b/dlls/hid/hidd.c -@@ -145,3 +145,11 @@ BOOLEAN WINAPI HidD_SetOutputReport(HANDLE HidDeviceObject, void *ReportBuffer, +@@ -158,3 +158,11 @@ BOOLEAN WINAPI HidD_SetOutputReport(HANDLE HidDeviceObject, void *ReportBuffer, TRACE("(%p %p %u)\n", HidDeviceObject, ReportBuffer, ReportBufferLength); - return DeviceIoControl(HidDeviceObject, IOCTL_HID_SET_OUTPUT_REPORT, ReportBuffer, ReportBufferLength, NULL, 0, NULL, NULL); + return sync_ioctl(HidDeviceObject, IOCTL_HID_SET_OUTPUT_REPORT, ReportBuffer, ReportBufferLength, NULL, 0, NULL); } + +BOOLEAN WINAPI HidD_FlushQueue(HANDLE HidDeviceObject) diff --git a/patches/ntdll-CriticalSection/0004-ntdll-Use-fast-CS-functions-for-threadpool-locking.patch b/patches/ntdll-CriticalSection/0004-ntdll-Use-fast-CS-functions-for-threadpool-locking.patch index 388231c3..6e16cebb 100644 --- a/patches/ntdll-CriticalSection/0004-ntdll-Use-fast-CS-functions-for-threadpool-locking.patch +++ b/patches/ntdll-CriticalSection/0004-ntdll-Use-fast-CS-functions-for-threadpool-locking.patch @@ -1,17 +1,17 @@ -From fac19f4dd587a1b8b23c87fe5ad11339d3cd3851 Mon Sep 17 00:00:00 2001 +From 858272e45212c9bbcbd121b6a5fc7f25358cd40f Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sat, 5 Aug 2017 03:39:37 +0200 -Subject: ntdll: Use fast CS functions for threadpool locking. +Subject: [PATCH] ntdll: Use fast CS functions for threadpool locking. --- dlls/ntdll/threadpool.c | 96 ++++++++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/dlls/ntdll/threadpool.c b/dlls/ntdll/threadpool.c -index b723e6f66f8..f9dc6a5a441 100644 +index db7391b..639e032 100644 --- a/dlls/ntdll/threadpool.c +++ b/dlls/ntdll/threadpool.c -@@ -1191,7 +1191,7 @@ static void CALLBACK timerqueue_thread_proc( void *param ) +@@ -1206,7 +1206,7 @@ static void CALLBACK timerqueue_thread_proc( void *param ) TRACE( "starting timer queue thread\n" ); @@ -20,7 +20,7 @@ index b723e6f66f8..f9dc6a5a441 100644 for (;;) { NtQuerySystemTime( &now ); -@@ -1265,7 +1265,7 @@ static void CALLBACK timerqueue_thread_proc( void *param ) +@@ -1280,7 +1280,7 @@ static void CALLBACK timerqueue_thread_proc( void *param ) } timerqueue.thread_running = FALSE; @@ -29,7 +29,7 @@ index b723e6f66f8..f9dc6a5a441 100644 TRACE( "terminating timer queue thread\n" ); RtlExitUserThread( 0 ); -@@ -1311,7 +1311,7 @@ static NTSTATUS tp_timerqueue_lock( struct threadpool_object *timer ) +@@ -1326,7 +1326,7 @@ static NTSTATUS tp_timerqueue_lock( struct threadpool_object *timer ) timer->u.timer.period = 0; timer->u.timer.window_length = 0; @@ -38,7 +38,7 @@ index b723e6f66f8..f9dc6a5a441 100644 /* Make sure that the timerqueue thread is running. */ if (!timerqueue.thread_running) -@@ -1332,7 +1332,7 @@ static NTSTATUS tp_timerqueue_lock( struct threadpool_object *timer ) +@@ -1347,7 +1347,7 @@ static NTSTATUS tp_timerqueue_lock( struct threadpool_object *timer ) timerqueue.objcount++; } @@ -47,7 +47,7 @@ index b723e6f66f8..f9dc6a5a441 100644 return status; } -@@ -1345,7 +1345,7 @@ static void tp_timerqueue_unlock( struct threadpool_object *timer ) +@@ -1360,7 +1360,7 @@ static void tp_timerqueue_unlock( struct threadpool_object *timer ) { assert( timer->type == TP_OBJECT_TYPE_TIMER ); @@ -56,7 +56,7 @@ index b723e6f66f8..f9dc6a5a441 100644 if (timer->u.timer.timer_initialized) { /* If timer was pending, remove it. */ -@@ -1364,7 +1364,7 @@ static void tp_timerqueue_unlock( struct threadpool_object *timer ) +@@ -1379,7 +1379,7 @@ static void tp_timerqueue_unlock( struct threadpool_object *timer ) timer->u.timer.timer_initialized = FALSE; } @@ -65,7 +65,7 @@ index b723e6f66f8..f9dc6a5a441 100644 } /*********************************************************************** -@@ -1382,7 +1382,7 @@ static void CALLBACK waitqueue_thread_proc( void *param ) +@@ -1397,7 +1397,7 @@ static void CALLBACK waitqueue_thread_proc( void *param ) TRACE( "starting wait queue thread\n" ); @@ -74,7 +74,7 @@ index b723e6f66f8..f9dc6a5a441 100644 for (;;) { -@@ -1419,10 +1419,10 @@ static void CALLBACK waitqueue_thread_proc( void *param ) +@@ -1434,10 +1434,10 @@ static void CALLBACK waitqueue_thread_proc( void *param ) /* All wait objects have been destroyed, if no new wait objects are created * within some amount of time, then we can shutdown this thread. */ assert( num_handles == 0 ); @@ -87,7 +87,7 @@ index b723e6f66f8..f9dc6a5a441 100644 if (status == STATUS_TIMEOUT && !bucket->objcount) break; -@@ -1430,9 +1430,9 @@ static void CALLBACK waitqueue_thread_proc( void *param ) +@@ -1445,9 +1445,9 @@ static void CALLBACK waitqueue_thread_proc( void *param ) else { handles[num_handles] = bucket->update_event; @@ -99,7 +99,7 @@ index b723e6f66f8..f9dc6a5a441 100644 if (status >= STATUS_WAIT_0 && status < STATUS_WAIT_0 + num_handles) { -@@ -1505,7 +1505,7 @@ static void CALLBACK waitqueue_thread_proc( void *param ) +@@ -1520,7 +1520,7 @@ static void CALLBACK waitqueue_thread_proc( void *param ) if (!--waitqueue.num_buckets) assert( list_empty( &waitqueue.buckets ) ); @@ -108,7 +108,7 @@ index b723e6f66f8..f9dc6a5a441 100644 TRACE( "terminating wait queue thread\n" ); -@@ -1534,7 +1534,7 @@ static NTSTATUS tp_waitqueue_lock( struct threadpool_object *wait ) +@@ -1549,7 +1549,7 @@ static NTSTATUS tp_waitqueue_lock( struct threadpool_object *wait ) wait->u.wait.timeout = 0; wait->u.wait.handle = INVALID_HANDLE_VALUE; @@ -117,7 +117,7 @@ index b723e6f66f8..f9dc6a5a441 100644 /* Try to assign to existing bucket if possible. */ LIST_FOR_EACH_ENTRY( bucket, &waitqueue.buckets, struct waitqueue_bucket, bucket_entry ) -@@ -1590,7 +1590,7 @@ static NTSTATUS tp_waitqueue_lock( struct threadpool_object *wait ) +@@ -1605,7 +1605,7 @@ static NTSTATUS tp_waitqueue_lock( struct threadpool_object *wait ) } out: @@ -126,7 +126,7 @@ index b723e6f66f8..f9dc6a5a441 100644 return status; } -@@ -1601,7 +1601,7 @@ static void tp_waitqueue_unlock( struct threadpool_object *wait ) +@@ -1616,7 +1616,7 @@ static void tp_waitqueue_unlock( struct threadpool_object *wait ) { assert( wait->type == TP_OBJECT_TYPE_WAIT ); @@ -135,7 +135,7 @@ index b723e6f66f8..f9dc6a5a441 100644 if (wait->u.wait.bucket) { struct waitqueue_bucket *bucket = wait->u.wait.bucket; -@@ -1613,7 +1613,7 @@ static void tp_waitqueue_unlock( struct threadpool_object *wait ) +@@ -1628,7 +1628,7 @@ static void tp_waitqueue_unlock( struct threadpool_object *wait ) NtSetEvent( bucket->update_event, NULL ); } @@ -144,7 +144,7 @@ index b723e6f66f8..f9dc6a5a441 100644 } /*********************************************************************** -@@ -1721,7 +1721,7 @@ static NTSTATUS tp_threadpool_lock( struct threadpool **out, TP_CALLBACK_ENVIRON +@@ -1759,7 +1759,7 @@ static NTSTATUS tp_threadpool_lock( struct threadpool **out, TP_CALLBACK_ENVIRON pool = default_threadpool; } @@ -153,7 +153,7 @@ index b723e6f66f8..f9dc6a5a441 100644 /* Make sure that the threadpool has at least one thread. */ if (!pool->num_workers) -@@ -1735,7 +1735,7 @@ static NTSTATUS tp_threadpool_lock( struct threadpool **out, TP_CALLBACK_ENVIRON +@@ -1773,7 +1773,7 @@ static NTSTATUS tp_threadpool_lock( struct threadpool **out, TP_CALLBACK_ENVIRON pool->objcount++; } @@ -162,7 +162,7 @@ index b723e6f66f8..f9dc6a5a441 100644 if (status != STATUS_SUCCESS) return status; -@@ -1751,9 +1751,9 @@ static NTSTATUS tp_threadpool_lock( struct threadpool **out, TP_CALLBACK_ENVIRON +@@ -1789,9 +1789,9 @@ static NTSTATUS tp_threadpool_lock( struct threadpool **out, TP_CALLBACK_ENVIRON */ static void tp_threadpool_unlock( struct threadpool *pool ) { @@ -174,7 +174,7 @@ index b723e6f66f8..f9dc6a5a441 100644 tp_threadpool_release( pool ); } -@@ -1882,10 +1882,10 @@ static void tp_object_initialize( struct threadpool_object *object, struct threa +@@ -1928,10 +1928,10 @@ static void tp_object_initialize( struct threadpool_object *object, struct threa struct threadpool_group *group = object->group; interlocked_inc( &group->refcount ); @@ -187,7 +187,7 @@ index b723e6f66f8..f9dc6a5a441 100644 } if (is_simple_callback) -@@ -1906,7 +1906,7 @@ static void tp_object_submit( struct threadpool_object *object, BOOL signaled ) +@@ -1957,7 +1957,7 @@ static void tp_object_submit( struct threadpool_object *object, BOOL signaled ) assert( !object->shutdown ); assert( !pool->shutdown ); @@ -196,7 +196,7 @@ index b723e6f66f8..f9dc6a5a441 100644 /* Start new worker threads if required. */ if (pool->num_busy_workers >= pool->num_workers && -@@ -1929,7 +1929,7 @@ static void tp_object_submit( struct threadpool_object *object, BOOL signaled ) +@@ -1980,7 +1980,7 @@ static void tp_object_submit( struct threadpool_object *object, BOOL signaled ) RtlWakeConditionVariable( &pool->update_event ); } @@ -205,7 +205,7 @@ index b723e6f66f8..f9dc6a5a441 100644 } /*********************************************************************** -@@ -1942,7 +1942,7 @@ static void tp_object_cancel( struct threadpool_object *object ) +@@ -1993,7 +1993,7 @@ static void tp_object_cancel( struct threadpool_object *object ) struct threadpool *pool = object->pool; LONG pending_callbacks = 0; @@ -214,7 +214,7 @@ index b723e6f66f8..f9dc6a5a441 100644 if (object->num_pending_callbacks) { pending_callbacks = object->num_pending_callbacks; -@@ -1952,7 +1952,7 @@ static void tp_object_cancel( struct threadpool_object *object ) +@@ -2003,7 +2003,7 @@ static void tp_object_cancel( struct threadpool_object *object ) if (object->type == TP_OBJECT_TYPE_WAIT) object->u.wait.signaled = 0; } @@ -223,7 +223,7 @@ index b723e6f66f8..f9dc6a5a441 100644 while (pending_callbacks--) tp_object_release( object ); -@@ -1968,7 +1968,7 @@ static void tp_object_wait( struct threadpool_object *object, BOOL group_wait ) +@@ -2019,7 +2019,7 @@ static void tp_object_wait( struct threadpool_object *object, BOOL group_wait ) { struct threadpool *pool = object->pool; @@ -232,7 +232,7 @@ index b723e6f66f8..f9dc6a5a441 100644 if (group_wait) { while (object->num_pending_callbacks || object->num_running_callbacks) -@@ -1979,7 +1979,7 @@ static void tp_object_wait( struct threadpool_object *object, BOOL group_wait ) +@@ -2030,7 +2030,7 @@ static void tp_object_wait( struct threadpool_object *object, BOOL group_wait ) while (object->num_pending_callbacks || object->num_associated_callbacks) RtlSleepConditionVariableCS( &object->finished_event, &pool->cs, NULL ); } @@ -241,7 +241,7 @@ index b723e6f66f8..f9dc6a5a441 100644 } /*********************************************************************** -@@ -2017,13 +2017,13 @@ static BOOL tp_object_release( struct threadpool_object *object ) +@@ -2068,13 +2068,13 @@ static BOOL tp_object_release( struct threadpool_object *object ) { struct threadpool_group *group = object->group; @@ -257,7 +257,7 @@ index b723e6f66f8..f9dc6a5a441 100644 tp_group_release( group ); } -@@ -2052,7 +2052,7 @@ static void CALLBACK threadpool_worker_proc( void *param ) +@@ -2117,7 +2117,7 @@ static void CALLBACK threadpool_worker_proc( void *param ) TRACE( "starting worker thread for pool %p\n", pool ); @@ -266,7 +266,7 @@ index b723e6f66f8..f9dc6a5a441 100644 pool->num_busy_workers--; for (;;) { -@@ -2078,7 +2078,7 @@ static void CALLBACK threadpool_worker_proc( void *param ) +@@ -2143,7 +2143,7 @@ static void CALLBACK threadpool_worker_proc( void *param ) object->num_associated_callbacks++; object->num_running_callbacks++; pool->num_busy_workers++; @@ -275,7 +275,7 @@ index b723e6f66f8..f9dc6a5a441 100644 /* Initialize threadpool instance struct. */ callback_instance = (TP_CALLBACK_INSTANCE *)&instance; -@@ -2171,7 +2171,7 @@ static void CALLBACK threadpool_worker_proc( void *param ) +@@ -2236,7 +2236,7 @@ static void CALLBACK threadpool_worker_proc( void *param ) } skip_cleanup: @@ -284,7 +284,7 @@ index b723e6f66f8..f9dc6a5a441 100644 pool->num_busy_workers--; /* Simple callbacks are automatically shutdown after execution. */ -@@ -2213,7 +2213,7 @@ static void CALLBACK threadpool_worker_proc( void *param ) +@@ -2278,7 +2278,7 @@ static void CALLBACK threadpool_worker_proc( void *param ) } } pool->num_workers--; @@ -293,7 +293,7 @@ index b723e6f66f8..f9dc6a5a441 100644 TRACE( "terminating worker thread for pool %p\n", pool ); tp_threadpool_release( pool ); -@@ -2389,7 +2389,7 @@ NTSTATUS WINAPI TpCallbackMayRunLong( TP_CALLBACK_INSTANCE *instance ) +@@ -2454,7 +2454,7 @@ NTSTATUS WINAPI TpCallbackMayRunLong( TP_CALLBACK_INSTANCE *instance ) return STATUS_SUCCESS; pool = object->pool; @@ -302,7 +302,7 @@ index b723e6f66f8..f9dc6a5a441 100644 /* Start new worker threads if required. */ if (pool->num_busy_workers >= pool->num_workers) -@@ -2404,7 +2404,7 @@ NTSTATUS WINAPI TpCallbackMayRunLong( TP_CALLBACK_INSTANCE *instance ) +@@ -2469,7 +2469,7 @@ NTSTATUS WINAPI TpCallbackMayRunLong( TP_CALLBACK_INSTANCE *instance ) } } @@ -311,7 +311,7 @@ index b723e6f66f8..f9dc6a5a441 100644 this->may_run_long = TRUE; return status; } -@@ -2485,13 +2485,13 @@ VOID WINAPI TpDisassociateCallback( TP_CALLBACK_INSTANCE *instance ) +@@ -2550,13 +2550,13 @@ VOID WINAPI TpDisassociateCallback( TP_CALLBACK_INSTANCE *instance ) return; pool = object->pool; @@ -327,7 +327,7 @@ index b723e6f66f8..f9dc6a5a441 100644 this->associated = FALSE; } -@@ -2543,7 +2543,7 @@ VOID WINAPI TpReleaseCleanupGroupMembers( TP_CLEANUP_GROUP *group, BOOL cancel_p +@@ -2608,7 +2608,7 @@ VOID WINAPI TpReleaseCleanupGroupMembers( TP_CLEANUP_GROUP *group, BOOL cancel_p TRACE( "%p %u %p\n", group, cancel_pending, userdata ); @@ -336,7 +336,7 @@ index b723e6f66f8..f9dc6a5a441 100644 /* Unset group, increase references, and mark objects for shutdown */ LIST_FOR_EACH_ENTRY_SAFE( object, next, &this->members, struct threadpool_object, group_entry ) -@@ -2569,7 +2569,7 @@ VOID WINAPI TpReleaseCleanupGroupMembers( TP_CLEANUP_GROUP *group, BOOL cancel_p +@@ -2634,7 +2634,7 @@ VOID WINAPI TpReleaseCleanupGroupMembers( TP_CLEANUP_GROUP *group, BOOL cancel_p list_init( &members ); list_move_tail( &members, &this->members ); @@ -345,7 +345,7 @@ index b723e6f66f8..f9dc6a5a441 100644 /* Cancel pending callbacks if requested */ if (cancel_pending) -@@ -2669,10 +2669,10 @@ VOID WINAPI TpSetPoolMaxThreads( TP_POOL *pool, DWORD maximum ) +@@ -2734,10 +2734,10 @@ VOID WINAPI TpSetPoolMaxThreads( TP_POOL *pool, DWORD maximum ) TRACE( "%p %u\n", pool, maximum ); @@ -358,7 +358,7 @@ index b723e6f66f8..f9dc6a5a441 100644 } /*********************************************************************** -@@ -2685,7 +2685,7 @@ BOOL WINAPI TpSetPoolMinThreads( TP_POOL *pool, DWORD minimum ) +@@ -2750,7 +2750,7 @@ BOOL WINAPI TpSetPoolMinThreads( TP_POOL *pool, DWORD minimum ) TRACE( "%p %u\n", pool, minimum ); @@ -367,7 +367,7 @@ index b723e6f66f8..f9dc6a5a441 100644 while (this->num_workers < minimum) { -@@ -2700,7 +2700,7 @@ BOOL WINAPI TpSetPoolMinThreads( TP_POOL *pool, DWORD minimum ) +@@ -2765,7 +2765,7 @@ BOOL WINAPI TpSetPoolMinThreads( TP_POOL *pool, DWORD minimum ) this->max_workers = max( this->min_workers, this->max_workers ); } @@ -376,7 +376,7 @@ index b723e6f66f8..f9dc6a5a441 100644 return !status; } -@@ -2716,7 +2716,7 @@ VOID WINAPI TpSetTimer( TP_TIMER *timer, LARGE_INTEGER *timeout, LONG period, LO +@@ -2781,7 +2781,7 @@ VOID WINAPI TpSetTimer( TP_TIMER *timer, LARGE_INTEGER *timeout, LONG period, LO TRACE( "%p %p %u %u\n", timer, timeout, period, window_length ); @@ -385,7 +385,7 @@ index b723e6f66f8..f9dc6a5a441 100644 assert( this->u.timer.timer_initialized ); this->u.timer.timer_set = timeout != NULL; -@@ -2776,7 +2776,7 @@ VOID WINAPI TpSetTimer( TP_TIMER *timer, LARGE_INTEGER *timeout, LONG period, LO +@@ -2841,7 +2841,7 @@ VOID WINAPI TpSetTimer( TP_TIMER *timer, LARGE_INTEGER *timeout, LONG period, LO this->u.timer.timer_pending = TRUE; } @@ -394,7 +394,7 @@ index b723e6f66f8..f9dc6a5a441 100644 if (submit_timer) tp_object_submit( this, FALSE ); -@@ -2793,7 +2793,7 @@ VOID WINAPI TpSetWait( TP_WAIT *wait, HANDLE handle, LARGE_INTEGER *timeout ) +@@ -2858,7 +2858,7 @@ VOID WINAPI TpSetWait( TP_WAIT *wait, HANDLE handle, LARGE_INTEGER *timeout ) TRACE( "%p %p %p\n", wait, handle, timeout ); @@ -403,7 +403,7 @@ index b723e6f66f8..f9dc6a5a441 100644 assert( this->u.wait.bucket ); this->u.wait.handle = handle; -@@ -2837,7 +2837,7 @@ VOID WINAPI TpSetWait( TP_WAIT *wait, HANDLE handle, LARGE_INTEGER *timeout ) +@@ -2902,7 +2902,7 @@ VOID WINAPI TpSetWait( TP_WAIT *wait, HANDLE handle, LARGE_INTEGER *timeout ) NtSetEvent( bucket->update_event, NULL ); } @@ -413,5 +413,5 @@ index b723e6f66f8..f9dc6a5a441 100644 if (submit_wait) tp_object_submit( this, FALSE ); -- -2.13.1 +1.9.1 diff --git a/patches/ntdll-DOS_Attributes/0001-ntdll-Implement-retrieving-DOS-attributes-in-NtQuery.patch b/patches/ntdll-DOS_Attributes/0001-ntdll-Implement-retrieving-DOS-attributes-in-NtQuery.patch index 049cc5de..9fe94add 100644 --- a/patches/ntdll-DOS_Attributes/0001-ntdll-Implement-retrieving-DOS-attributes-in-NtQuery.patch +++ b/patches/ntdll-DOS_Attributes/0001-ntdll-Implement-retrieving-DOS-attributes-in-NtQuery.patch @@ -1,4 +1,4 @@ -From 81cc694e55e5febfc063f6b323fea0546c75984a Mon Sep 17 00:00:00 2001 +From 58c4900ecbdb4dbf745c9af78c040d2cfdcff288 Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Tue, 19 Aug 2014 22:10:49 -0600 Subject: [PATCH] ntdll: Implement retrieving DOS attributes in @@ -7,17 +7,17 @@ Subject: [PATCH] ntdll: Implement retrieving DOS attributes in --- configure.ac | 12 ++++++++++++ dlls/ntdll/file.c | 22 +++++++++++++++++++++- - include/wine/port.h | 8 ++++++++ + include/wine/port.h | 20 ++++++++++++++++++++ libs/port/Makefile.in | 3 ++- libs/port/xattr.c | 39 +++++++++++++++++++++++++++++++++++++++ - 5 files changed, 82 insertions(+), 2 deletions(-) + 5 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 libs/port/xattr.c diff --git a/configure.ac b/configure.ac -index dfa130e..affa3f9 100644 +index 5c4e6fd..9e0dcf0 100644 --- a/configure.ac +++ b/configure.ac -@@ -83,6 +83,7 @@ AC_ARG_WITH(udev, AS_HELP_STRING([--without-udev],[do not use udev (plug an +@@ -84,6 +84,7 @@ AC_ARG_WITH(udev, AS_HELP_STRING([--without-udev],[do not use udev (plug an AC_ARG_WITH(v4l, AS_HELP_STRING([--without-v4l],[do not use v4l1 (v4l support)])) AC_ARG_WITH(vkd3d, AS_HELP_STRING([--without-vkd3d],[do not use vkd3d (Direct3D 12 support)])) AC_ARG_WITH(vulkan, AS_HELP_STRING([--without-vulkan],[do not use Vulkan])) @@ -25,7 +25,7 @@ index dfa130e..affa3f9 100644 AC_ARG_WITH(xcomposite,AS_HELP_STRING([--without-xcomposite],[do not use the Xcomposite extension]), [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_Xcomposite_h=no; fi]) AC_ARG_WITH(xcursor, AS_HELP_STRING([--without-xcursor],[do not use the Xcursor extension]), -@@ -716,6 +717,17 @@ AC_CHECK_HEADERS([libprocstat.h],,, +@@ -703,6 +704,17 @@ AC_CHECK_HEADERS([libprocstat.h],,, #include #endif]) @@ -44,7 +44,7 @@ index dfa130e..affa3f9 100644 AC_SUBST(DLLFLAGS,"-D_REENTRANT") diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c -index 8e4f52c..af6f6a4 100644 +index d0aaadf..27d2ce0 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c @@ -122,6 +122,22 @@ mode_t FILE_umask = 0; @@ -89,13 +89,25 @@ index 8e4f52c..af6f6a4 100644 } diff --git a/include/wine/port.h b/include/wine/port.h -index a3b6c6f..f3b6eb5 100644 +index 2f6e9eb..902d674 100644 --- a/include/wine/port.h +++ b/include/wine/port.h -@@ -391,6 +391,14 @@ extern int mkstemps(char *template, int suffix_len); - extern int _spawnvp(int mode, const char *cmdname, const char * const argv[]); - #endif +@@ -335,6 +335,26 @@ int usleep (unsigned int useconds); + extern int mkstemps(char *template, int suffix_len); + ++/* Process creation flags */ ++#ifndef _P_WAIT ++# define _P_WAIT 0 ++# define _P_NOWAIT 1 ++# define _P_OVERLAY 2 ++# define _P_NOWAITO 3 ++# define _P_DETACH 4 ++#endif ++#ifndef HAVE__SPAWNVP ++extern int _spawnvp(int mode, const char *cmdname, const char * const argv[]); ++#endif ++ +/* Extended attribute functions */ + +#ifndef XATTR_USER_PREFIX @@ -108,10 +120,10 @@ index a3b6c6f..f3b6eb5 100644 #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) diff --git a/libs/port/Makefile.in b/libs/port/Makefile.in -index c87b99de..111807a 100644 +index 86b9022..b09dc54 100644 --- a/libs/port/Makefile.in +++ b/libs/port/Makefile.in -@@ -106,4 +106,5 @@ C_SRCS = \ +@@ -102,4 +102,5 @@ C_SRCS = \ symlink.c \ usleep.c \ utf8.c \ diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index b3004b1a..c33b6a00 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -52,7 +52,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "73355cab96de112f5125907424b37289afc6ebe7" + echo "fa262317480e52eb3420c4e0ba9bae9e17db4457" } # Show version information