Skip to content
Snippets Groups Projects
Commit a630510b authored by James Juran's avatar James Juran Committed by Alexandre Julliard
Browse files

GetUserName should include the terminating null character when

returning the size of the buffer returned. Correctly handle the
ERROR_MORE_DATA case.
parent 55a14edd
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment