Alfred Agrell (@Alcaro) commented about dlls/kernel32/process.c:
> +
> + return FALSE;
> +}
> +
> +/***********************************************************************
> + * GetFirmwareEnvironmentVariableExA (KERNEL32.@)
> + */
> +DWORD WINAPI GetFirmwareEnvironmentVariableExA(LPCSTR name, LPCSTR guid, PVOID buffer, DWORD size, PDWORD attributes)
> +{
> + int nsize;
> + GUID vendor = {0};
> + LPWSTR wname;
> + UNICODE_STRING uname;
> + DWORD ret_size = size;
> +
> + if (!__wine_string_to_guid(guid, &vendor))
Probably better to convert this string to utf16, then call the W function. That'd not only remove that GUID conversion function (I'd rather not review that amount of math - I think even GCC will complain that, unclear precedence warnings on | and +), but also make future maintenance easier.
Yes, it'll copy and convert around things a little more. Who cares, this isn't performance sensitive.
If you want to remove the allocations, you can put one in NtCurrentTeb()->StaticUnicodeBuffer, A/W conversions is exactly what it's for. (Though there's only one, so you'll need pointer math or allocations for the other one.)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6423#note_81250