Commit a630510b authored by James Juran's avatar James Juran Committed by Alexandre Julliard

GetUserName should include the terminating null character when

returning the size of the buffer returned. Correctly handle the ERROR_MORE_DATA case.
parent 55a14edd
......@@ -4,6 +4,7 @@
* Copyright 1995 Sven Verdoolaege
*/
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
......@@ -16,9 +17,13 @@
#include "debugtools.h"
DEFAULT_DEBUG_CHANNEL(advapi);
/******************************************************************************
* GetUserNameA [ADVAPI32.@]
*
* NOTE: lpSize returns the total length of the username, including the
* terminating null character.
*/
BOOL WINAPI
GetUserNameA( LPSTR lpszName, LPDWORD lpSize )
......@@ -27,14 +32,24 @@ GetUserNameA( LPSTR lpszName, LPDWORD lpSize )
char *name;
struct passwd *pwd = getpwuid( getuid() );
if (!pwd) return 0;
if (!pwd)
{
ERR("Username lookup failed: %s\n", strerror(errno));
return 0;
}
name = pwd->pw_name;
len = name ? strlen(name) : 0;
if (!len || !lpSize || len > *lpSize) {
if (lpszName) *lpszName = 0;
/* We need to include the null character when determining the size of the buffer. */
len = strlen(name) + 1;
if (len > *lpSize)
{
SetLastError(ERROR_MORE_DATA);
*lpSize = len;
return 0;
}
*lpSize=len;
*lpSize = len;
strcpy(lpszName, name);
return 1;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment