[PATCH] avrt: Add AvSetMmMaxThreadCharacteristicsA/W stub.
Gijs Vermeulen
gijsvrm at gmail.com
Sun Nov 22 08:56:15 CST 2020
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50160
Op zo 22 nov. 2020 om 15:45 schreef Gijs Vermeulen <gijsvrm at gmail.com>:
> Signed-off-by: Gijs Vermeulen <gijsvrm at gmail.com>
> ---
> dlls/avrt/avrt.spec | 4 +--
> dlls/avrt/main.c | 86 ++++++++++++++++++++++++++++++++++++---------
> include/avrt.h | 2 +-
> 3 files changed, 72 insertions(+), 20 deletions(-)
>
> diff --git a/dlls/avrt/avrt.spec b/dlls/avrt/avrt.spec
> index a7dfc42879c..0a05abcdbca 100644
> --- a/dlls/avrt/avrt.spec
> +++ b/dlls/avrt/avrt.spec
> @@ -7,8 +7,8 @@
> @ stub AvRtJoinThreadOrderingGroup
> @ stub AvRtLeaveThreadOrderingGroup
> @ stub AvRtWaitOnThreadOrderingGroup
> -@ stub AvSetMmMaxThreadCharacteristicsA
> -@ stub AvSetMmMaxThreadCharacteristicsW
> +@ stdcall AvSetMmMaxThreadCharacteristicsA(str str ptr)
> +@ stdcall AvSetMmMaxThreadCharacteristicsW(wstr wstr ptr)
> @ stdcall AvSetMmThreadCharacteristicsA(str ptr)
> @ stdcall AvSetMmThreadCharacteristicsW(wstr ptr)
> @ stdcall AvSetMmThreadPriority(ptr long)
> diff --git a/dlls/avrt/main.c b/dlls/avrt/main.c
> index eb5704cc508..258c525e198 100644
> --- a/dlls/avrt/main.c
> +++ b/dlls/avrt/main.c
> @@ -23,10 +23,21 @@
> #include "winbase.h"
> #include "winnls.h"
> #include "wine/debug.h"
> +#include "wine/heap.h"
> #include "avrt.h"
>
> WINE_DEFAULT_DEBUG_CHANNEL(avrt);
>
> +static inline WCHAR *heap_strdupAW(const char *src)
> +{
> + int len;
> + WCHAR *dst;
> + if (!src) return NULL;
> + len = MultiByteToWideChar(CP_ACP, 0, src, -1, NULL, 0);
> + if ((dst = heap_alloc(len * sizeof(*dst))))
> MultiByteToWideChar(CP_ACP, 0, src, -1, dst, len);
> + return dst;
> +}
> +
> BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID
> lpvReserved)
> {
> TRACE("(0x%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved);
> @@ -43,41 +54,39 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD
> fdwReason, LPVOID lpvReserved)
> return TRUE;
> }
>
> -HANDLE WINAPI AvSetMmThreadCharacteristicsA(LPCSTR TaskName, LPDWORD
> TaskIndex)
> +HANDLE WINAPI AvSetMmThreadCharacteristicsA(const char *name, DWORD
> *index)
> {
> + WCHAR *nameW = NULL;
> HANDLE ret;
> - LPWSTR str = NULL;
>
> - if (TaskName)
> + if (name && !(nameW = heap_strdupAW(name)))
> {
> - DWORD len = (lstrlenA(TaskName)+1);
> - str = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
> - if (!str)
> - {
> - SetLastError(ERROR_OUTOFMEMORY);
> - return NULL;
> - }
> - MultiByteToWideChar(CP_ACP, 0, TaskName, len, str, len);
> + SetLastError(ERROR_OUTOFMEMORY);
> + return NULL;
> }
> - ret = AvSetMmThreadCharacteristicsW(str, TaskIndex);
> - HeapFree(GetProcessHeap(), 0, str);
> +
> + ret = AvSetMmThreadCharacteristicsW(nameW, index);
> +
> + heap_free(nameW);
> return ret;
> }
>
> -HANDLE WINAPI AvSetMmThreadCharacteristicsW(LPCWSTR TaskName, LPDWORD
> TaskIndex)
> +HANDLE WINAPI AvSetMmThreadCharacteristicsW(const WCHAR *name, DWORD
> *index)
> {
> - FIXME("(%s,%p): stub\n", debugstr_w(TaskName), TaskIndex);
> + FIXME("(%s,%p): stub\n", debugstr_w(name), index);
>
> - if (!TaskName)
> + if (!name)
> {
> SetLastError(ERROR_INVALID_TASK_NAME);
> return NULL;
> }
> - if (!TaskIndex)
> +
> + if (!index)
> {
> SetLastError(ERROR_INVALID_HANDLE);
> return NULL;
> }
> +
> return (HANDLE)0x12345678;
> }
>
> @@ -98,3 +107,46 @@ BOOL WINAPI AvSetMmThreadPriority(HANDLE AvrtHandle,
> AVRT_PRIORITY prio)
> FIXME("(%p)->(%u) stub\n", AvrtHandle, prio);
> return TRUE;
> }
> +
> +HANDLE WINAPI AvSetMmMaxThreadCharacteristicsA(const char *task1, const
> char *task2, DWORD *index)
> +{
> + WCHAR *task1W = NULL, *task2W = NULL;
> + HANDLE ret;
> +
> + if (task1 && !(task1W = heap_strdupAW(task1)))
> + {
> + SetLastError(ERROR_OUTOFMEMORY);
> + return NULL;
> + }
> +
> + if (task2 && !(task2W = heap_strdupAW(task2)))
> + {
> + SetLastError(ERROR_OUTOFMEMORY);
> + return NULL;
> + }
> +
> + ret = AvSetMmMaxThreadCharacteristicsW(task1W, task2W, index);
> +
> + heap_free(task2W);
> + heap_free(task1W);
> + return ret;
> +}
> +
> +HANDLE WINAPI AvSetMmMaxThreadCharacteristicsW(const WCHAR *task1, const
> WCHAR *task2, DWORD *index)
> +{
> + FIXME("(%s,%s,%p): stub\n", debugstr_w(task1), debugstr_w(task2),
> index);
> +
> + if (!task1 || task2)
> + {
> + SetLastError(ERROR_INVALID_TASK_NAME);
> + return NULL;
> + }
> +
> + if (!index)
> + {
> + SetLastError(ERROR_INVALID_HANDLE);
> + return NULL;
> + }
> +
> + return (HANDLE)0x12345678;
> +}
> diff --git a/include/avrt.h b/include/avrt.h
> index 9d12c1b5b1b..88beebb0bf8 100644
> --- a/include/avrt.h
> +++ b/include/avrt.h
> @@ -43,7 +43,7 @@ HANDLE WINAPI AvSetMmThreadCharacteristicsW(LPCWSTR
> TaskName, LPDWORD TaskIndex)
> #define AvSetMmThreadCharacteristics
> WINELIB_NAME_AW(AvSetMmThreadCharacteristics)
>
> HANDLE WINAPI AvSetMmMaxThreadCharacteristicsA(LPCSTR FirstTask, LPCSTR
> SecondTask, LPDWORD TaskIndex);
> -HANDLE WINAPI AvSetMmMaxThreadCharacteristicsW(LPCSTR FirstTask, LPCSTR
> SecondTask, LPDWORD TaskIndex);
> +HANDLE WINAPI AvSetMmMaxThreadCharacteristicsW(LPCWSTR FirstTask, LPCWSTR
> SecondTask, LPDWORD TaskIndex);
> #define AvSetMmMaxThreadCharacteristics
> WINELIB_NAME_AW(AvSetMmMaxThreadCharacteristics)
>
> BOOL WINAPI AvRevertMmThreadCharacteristics(HANDLE AvrtHandle);
> --
> 2.29.2
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20201122/be6c2e10/attachment.htm>
More information about the wine-devel
mailing list