[PATCH v2] combase: Reorder hstring_private elements.

Nikolay Sivov nsivov at codeweavers.com
Fri Dec 24 02:03:18 CST 2021



On 12/24/21 01:48, Bernhard Kölbl wrote:
> +#define HSTRING_REFERENCE_FLAG 1
> +
>   struct hstring_private
>   {
> -    LPWSTR buffer;
> +    UINT32 flags;
>       UINT32 length;
> -    BOOL   reference;
> -    LONG   refcount;
> +    LONG refcount;
> +    LPWSTR ptr;
>   };
 From what I can tell this still doesn't match native layout. It also 
might be slightly different for references.

>   static BOOL alloc_string(UINT32 len, HSTRING *out)
>   {
>       struct hstring_private *priv;
> -    priv = HeapAlloc(GetProcessHeap(), 0, sizeof(*priv) + (len + 1) * sizeof(*priv->buffer));
> +    priv = HeapAlloc(GetProcessHeap(), 0, sizeof(*priv));
>       if (!priv)
>           return FALSE;
> -    priv->buffer = (LPWSTR)(priv + 1);
> +    priv->ptr = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(*priv->ptr));
I don't see this behaviour on Windows.

But anyway, do you have any idea why application would care? Is it some 
statically linked code depending on it, or some native module bundled or 
installed separately?

If the layout is stable across Windows releases, we'll need tests for it.



More information about the wine-devel mailing list