ws2_32: Fix hostent memory allocation
Alexandre Julliard
julliard at winehq.org
Mon Apr 16 08:17:50 CDT 2012
Bruno Jesus <00cpxxx at gmail.com> writes:
> @@ -5546,24 +5546,70 @@ INT WINAPI WSAUnhookBlockingHook(void)
> * pointers (via a template of some kind).
> */
>
> -static int list_size(char** l, int item_size)
> +/***********************************************************************
> + * list_size (INTERNAL)
> + *
> + * Calculate the size of data and number of items from a list based on
> + * a fixed item size or strings by using strlen. The source list must be
> + * NULL terminated.
> + *
> + * PARAMS
> + * l [I] Pointer to array of source items.
> + * item_size [I] Fixed item size or zero if it's a string list.
> + * size_sum [O] Pointer to where the sum of item bytes will be
> + * stored. May be NULL if not required by the caller.
> + * item_count [O] Pointer to where the number of items bytes will be
> + * stored. May be NULL if not required by the caller.
> + *
> + * NOTES
> + * When item_size is zero the byte sum will also count the NULL
> + * terminator for each string.
> + */
> +static void list_size(char** l, int item_size, int *size_sum, int *item_count)
> {
> - int i,j = 0;
> - if(l)
> - { for(i=0;l[i];i++)
> - j += (item_size) ? item_size : strlen(l[i]) + 1;
> - j += (i + 1) * sizeof(char*); }
> - return j;
> + int s, c, *sum = (size_sum ? size_sum : &s), *count = (item_count ? item_count : &c);
> + *sum = *count = 0;
> + if(l)
> + {
> + for(;l[*count];(*count)++)
> + *sum += (item_size) ? item_size : strlen(l[*count]) + 1;
> + }
That's not a good helper function, with all the optional parameters and
various behaviors. Also if you need a big documentation block like this
for a 5-line function it's a sign that something is wrong.
--
Alexandre Julliard
julliard at winehq.org
More information about the wine-devel
mailing list