Re: kernel32.dll: implementation of GetVolumePathNamesForVolumeNameA/W
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.
participants (1)
-
Dmitry Timoshkov