[PATCH v5 5/5] combase: Reorder hstring_private elements.

Huw Davies huw at codeweavers.com
Mon Jan 24 04:47:39 CST 2022


On Thu, Jan 13, 2022 at 12:34:18AM +0100, Bernhard Kölbl wrote:
> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51017
> 
> Put the string buffer at the end of the struct to
> match the Windows behaviour and avoid unnecessary
> pointer arithmetic.
> 
> Signed-off-by: Bernhard Kölbl <besentv at gmail.com>
> ---
> v5: Split the patch into multiple commits and minor code changes.
> v4: Remove leftover debugging TRACE and minor style changes.
> v3: Add nested hstring_header struct to hstring_private and add a test for both.
> v2: I was mistaken about no reference counting being used.
> ---
>  dlls/combase/string.c       | 8 ++++----
>  dlls/combase/tests/string.c | 8 --------
>  2 files changed, 4 insertions(+), 12 deletions(-)
> 
> diff --git a/dlls/combase/string.c b/dlls/combase/string.c
> index 24d1e4dd8f9..fa35262fbf9 100644
> --- a/dlls/combase/string.c
> +++ b/dlls/combase/string.c
> @@ -40,8 +40,8 @@ struct hstring_header
>  struct hstring_private
>  {
>      struct hstring_header header;
> -    LPWSTR buffer;
> -    LONG   refcount;
> +    LONG refcount;
> +    WCHAR buffer[1];
>  }
>  
>  static const WCHAR empty[1];
> @@ -66,14 +66,14 @@ static inline struct hstring_private *impl_from_HSTRING_BUFFER(HSTRING_BUFFER bu
>  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, offsetof(struct hstring_private, buffer[len]));

Should be [len + 1] (my fault, but you should have spotted it ;-)

Huw.



More information about the wine-devel mailing list