[PATCH v4 1/4] shell32/autocomplete: Implement a cache and sort the enumerated strings for proper behavior
Huw Davies
huw at codeweavers.com
Thu Nov 1 05:21:51 CDT 2018
On Thu, Nov 01, 2018 at 09:57:37AM +0000, Huw Davies wrote:
> On Wed, Oct 31, 2018 at 01:24:28PM +0200, Gabriel Ivăncescu wrote:
> > + UINT i, cur = 0, array_size = 1024;
> > + LPOLESTR *strs = NULL, *tmp;
> > + ULONG n;
> > +
> > + do
> > + {
> > + if ((tmp = heap_realloc(strs, array_size * sizeof(*strs))) == NULL)
> > + goto fail;
> > + strs = tmp;
> > +
> > + do
> > + IEnumString_Next(ac->enumstr, array_size - cur, &strs[cur], &n);
> > + while (n != 0 && (cur += n) < array_size);
> > +
> > + array_size *= 2;
> > + } while (n != 0);
>
> Hopefully you agree that this looks much nicer than the previous
> versions. There's a slight issue though in that you should check that
> the return value from IEnumString_Next() == S_OK. You could simply
> then set n = 0 if that condition isn't met, to break out of the loops.
Sorry, actually test using FAILED(). IEnumString_Next() is supposed to
return S_FALSE if the number read < number asked for.
Huw.
More information about the wine-devel
mailing list