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