[PATCH v2 07/12] win32u: Introduce data-only mode in NtUserGetClipboardData.
From: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Huw Davies <huw(a)codeweavers.com> --- dlls/win32u/clipboard.c | 19 +++++++++++++++---- include/ntuser.h | 1 + 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/dlls/win32u/clipboard.c b/dlls/win32u/clipboard.c index 63306702b1c..67bdd0ba391 100644 --- a/dlls/win32u/clipboard.c +++ b/dlls/win32u/clipboard.c @@ -631,7 +631,7 @@ done: */ HANDLE WINAPI NtUserGetClipboardData( UINT format, struct get_clipboard_params *params ) { - struct cached_format *cache; + struct cached_format *cache = NULL; NTSTATUS status; UINT from, data_seqno; size_t size; @@ -642,7 +642,7 @@ HANDLE WINAPI NtUserGetClipboardData( UINT format, struct get_clipboard_params * { pthread_mutex_lock( &clipboard_mutex ); - cache = get_cached_format( format ); + if (!params->data_only) cache = get_cached_format( format ); SERVER_START_REQ( get_clipboard_data ) { @@ -662,6 +662,8 @@ HANDLE WINAPI NtUserGetClipboardData( UINT format, struct get_clipboard_params * } SERVER_END_REQ; + params->size = size; + if (!status && size) { if (cache) @@ -679,8 +681,18 @@ HANDLE WINAPI NtUserGetClipboardData( UINT format, struct get_clipboard_params * list_add_tail( &formats_to_free, &cache->entry ); } + if (params->data_only) + { + pthread_mutex_unlock( &clipboard_mutex ); + return params->data; + } + /* allocate new cache entry */ - if (!(cache = malloc( sizeof(*cache) ))) return 0; + if (!(cache = malloc( sizeof(*cache) ))) + { + pthread_mutex_unlock( &clipboard_mutex ); + return 0; + } cache->format = format; cache->seqno = data_seqno; @@ -690,7 +702,6 @@ HANDLE WINAPI NtUserGetClipboardData( UINT format, struct get_clipboard_params * pthread_mutex_unlock( &clipboard_mutex ); TRACE( "%s needs unmarshaling\n", debugstr_format( format ) ); params->data_size = ~0; - params->size = size; return 0; } pthread_mutex_unlock( &clipboard_mutex ); diff --git a/include/ntuser.h b/include/ntuser.h index f49c9bc7723..cad90b91882 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -257,6 +257,7 @@ struct get_clipboard_params size_t size; size_t data_size; UINT seqno; + BOOL data_only; }; /* NtUserSetClipboardData params, not compatible with Windows */ -- 2.25.1
participants (1)
-
Huw Davies