cleanup a->w cross calls in advapi32/crypt.c

Mike McCormack mike at codeweavers.com
Mon Aug 2 05:55:12 CDT 2004


James Hawkins wrote:

> +        PWSTR keyname;
> 
> -	keyname = CRYPT_Alloc(strlen(KEYSTR) + strlen(pProvName) +1);
> +        keyname = CRYPT_Alloc((strlenW(KEYSTR) + strlenW(pProvName) + 1) * sizeof(WCHAR));
>  	if (keyname)
>  	{
> -		strcpy(keyname, KEYSTR);
> -		strcpy(keyname + strlen(KEYSTR), pProvName);
> +		strcpyW(keyname, KEYSTR);
> +		strcpyW(keyname + strlenW(KEYSTR) * sizeof(WCHAR), pProvName);
>  	} else
>  		SetLastError(ERROR_NOT_ENOUGH_MEMORY);
>  	return keyname;
>  }

This doesn't look right.... when using pointer arithmetic, you do so in 
increments of the pointer's type (eg. WCHAR). The following two lines 
are the same, and are both wrong:

   strcpyW(keyname + strlenW(KEYSTR) * sizeof(WCHAR), pProvName);
   strcpyW(&keyname[strlenW(KEYSTR) * sizeof(WCHAR)], pProvName);

The right version would be:

   strcpyW(&keyname[strlenW(KEYSTR)], pProvName);

but how about just using:

   strcatW( keyname, pProvname );

Mike



More information about the wine-devel mailing list