"Ge van Geldorp" <[email protected]> writes: > @@ -1055,15 +1056,86 @@ BOOLEAN WINAPI GetComputerObjectNameW( > BOOLEAN WINAPI GetUserNameExA( > EXTENDED_NAME_FORMAT NameFormat, LPSTR lpNameBuffer, PULONG nSize) > { > - FIXME("%d %p %p\n", NameFormat, lpNameBuffer, nSize); > - return FALSE; > + BOOLEAN rc; > + LPWSTR bufferW = NULL; > + ULONG sizeW = *nSize; > + TRACE("(%d %p %p)\n", NameFormat, lpNameBuffer, nSize); > + if (lpNameBuffer) { > + bufferW = HeapAlloc(GetProcessHeap(), 0, sizeW * sizeof(WCHAR)); > + if (bufferW == NULL) { > + SetLastError(ERROR_NOT_ENOUGH_MEMORY); > + return FALSE; > + } > + } > + rc = GetUserNameExW(NameFormat, bufferW, &sizeW); > + if (rc && bufferW) { > + ULONG len = WideCharToMultiByte(CP_ACP, 0, bufferW, -1, NULL, 0, > NULL, NULL); > + WideCharToMultiByte(CP_ACP, 0, bufferW, -1, lpNameBuffer, *nSize, > NULL, NULL); > + *nSize = len; > + }
You need to check for buffer overflows and return the appropriate error, preferably with test cases. -- Alexandre Julliard [email protected]
