Alasdair Sinclair : kernel32:
Fix GetComputerNameA to not count trailing NULL, with test.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Mar 9 07:28:29 CST 2007
Module: wine
Branch: master
Commit: 81c922398e4c820900d48aede254818ecc5c4fe4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=81c922398e4c820900d48aede254818ecc5c4fe4
Author: Alasdair Sinclair <alasdairs at dsl.pipex.com>
Date: Sat Mar 3 03:03:53 2007 +0000
kernel32: Fix GetComputerNameA to not count trailing NULL, with test.
---
dlls/kernel32/computername.c | 11 +++++------
dlls/kernel32/tests/environ.c | 11 +++++++++++
2 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/dlls/kernel32/computername.c b/dlls/kernel32/computername.c
index db9799a..754f86c 100644
--- a/dlls/kernel32/computername.c
+++ b/dlls/kernel32/computername.c
@@ -371,7 +371,7 @@ out:
BOOL WINAPI GetComputerNameA(LPSTR name, LPDWORD size)
{
WCHAR nameW[ MAX_COMPUTERNAME_LENGTH + 1 ];
- DWORD sizeW = MAX_COMPUTERNAME_LENGTH;
+ DWORD sizeW = MAX_COMPUTERNAME_LENGTH + 1;
unsigned int len;
BOOL ret;
@@ -381,17 +381,16 @@ BOOL WINAPI GetComputerNameA(LPSTR name, LPDWORD size)
/* for compatibility with Win9x */
__TRY
{
- if ( *size < len + 1 )
+ if ( *size < len )
{
- *size = len + 1;
+ *size = len;
SetLastError( ERROR_MORE_DATA );
ret = FALSE;
}
- else
+ else
{
WideCharToMultiByte ( CP_ACP, 0, nameW, -1, name, len, NULL, 0 );
- name[len] = 0;
- *size = len;
+ *size = len - 1;
ret = TRUE;
}
}
diff --git a/dlls/kernel32/tests/environ.c b/dlls/kernel32/tests/environ.c
index 43a8566..aa61b8e 100644
--- a/dlls/kernel32/tests/environ.c
+++ b/dlls/kernel32/tests/environ.c
@@ -239,6 +239,7 @@ static void test_GetComputerName(void)
LPSTR name;
LPWSTR nameW;
DWORD error;
+ int name_len;
size = 0;
ret = GetComputerNameA((LPSTR)0xdeadbeef, &size);
@@ -250,6 +251,16 @@ static void test_GetComputerName(void)
ok(ret, "GetComputerNameA failed with error %d\n", GetLastError());
HeapFree(GetProcessHeap(), 0, name);
+ size = MAX_COMPUTERNAME_LENGTH + 1;
+ name = HeapAlloc(GetProcessHeap(), 0, size * sizeof(name[0]));
+ ok(name != NULL, "HeapAlloc failed with error %d\n", GetLastError());
+ ret = GetComputerNameA(name, &size);
+ ok(ret, "GetComputerNameA failed with error %d\n", GetLastError());
+ trace("computer name is \"%s\"\n", name);
+ name_len = strlen(name);
+ ok(size == name_len, "size should be same as length, name_len=%d, size=%d\n", name_len, size);
+ HeapFree(GetProcessHeap(), 0, name);
+
size = 0;
ret = GetComputerNameW((LPWSTR)0xdeadbeef, &size);
error = GetLastError();
More information about the wine-cvs
mailing list