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.