Tuomo Mattila <tuomom(a)ee.oulu.fi> wrote:
> +BOOL WINAPI GetVolumePathNamesForVolumeNameA(LPCSTR volumename, LPSTR volumepathname, DWORD buflen, PDWORD returnlen)
> +{
> +
> + BOOL ret = FALSE;
> + WCHAR* volumenameW = 0;
> + LPWSTR volumepathnameW = 0;
> +
> + if (volumename == 0 || volumepathname == 0 || returnlen == 0)
> + {
> + SetLastError(RPC_X_NULL_REF_POINTER);
> + return FALSE;
> + }
It's a common practice to use NULL for pointers, and not 0. Something tells
me that RPC_xxxx error code has nothing to do here, do you have a test case
for that?
> + memset(volumepathname, 0, buflen);
Is there any reason that you zero out the whole 'volumepathname' here?
> + volumepathnameW = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, buflen*sizeof(WCHAR));
> + if (volumepathnameW == 0) return FALSE;
Same for 'volumepathnameW' here.
> + if ((volumenameW = FILE_name_AtoW(volumename, TRUE)) == 0) return FALSE;
> +
> + ret = GetVolumePathNamesForVolumeNameW(volumenameW, volumepathnameW, buflen, returnlen);
> + if (*returnlen > 0)
> + FILE_name_WtoA(volumepathnameW, (*returnlen), volumepathname, (*returnlen));
There is no need to put '*returnlen' in braces. Besides, '*returnlen' may
differ for multibyte and unicode strings.
--
Dmitry.