GetUserName should include terminating NULL in length
James Juran
jamesjuran at alumni.psu.edu
Sun Nov 18 12:18:55 CST 2001
James Juran <jamesjuran at alumni.psu.edu>
GetUserName should include the terminating null character when
returning the size of the buffer returned.
Correctly handle the ERROR_MORE_DATA case.
Index: dlls/advapi32/advapi.c
===================================================================
RCS file: /home/wine/wine/dlls/advapi32/advapi.c,v
retrieving revision 1.13
diff -u -r1.13 advapi.c
--- dlls/advapi32/advapi.c 2001/02/14 23:11:17 1.13
+++ dlls/advapi32/advapi.c 2001/11/18 16:35:21
@@ -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 @@
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;
}
More information about the wine-patches
mailing list