Author: cwittich
Date: Tue Jun 23 15:44:23 2009
New Revision: 41580
URL:
http://svn.reactos.org/svn/reactos?rev=41580&view=rev
Log:
sync kernel32_winetest with wine 1.1.24
Modified:
trunk/rostests/winetests/kernel32/comm.c
trunk/rostests/winetests/kernel32/file.c
trunk/rostests/winetests/kernel32/pipe.c
trunk/rostests/winetests/kernel32/process.c
Modified: trunk/rostests/winetests/kernel32/comm.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/kernel32/comm.c…
==============================================================================
--- trunk/rostests/winetests/kernel32/comm.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/kernel32/comm.c [iso-8859-1] Tue Jun 23 15:44:23 2009
@@ -561,6 +561,7 @@
BOOL result;
DCB dcb;
WCHAR wide_string[sizeof(ptest->string)];
+ static int reportedDCBW = 0;
MultiByteToWideChar(CP_ACP, 0, ptest->string, -1, wide_string, sizeof(wide_string) /
sizeof(WCHAR));
@@ -572,7 +573,8 @@
if(GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- win_skip("BuildCommDCBW is not available\n");
+ if(!reportedDCBW++)
+ win_skip("BuildCommDCBW is not implemented\n");
return;
}
@@ -587,6 +589,7 @@
DCB dcb;
COMMTIMEOUTS timeouts;
WCHAR wide_string[sizeof(ptest->string)];
+ static int reportedDCBAndTW = 0;
MultiByteToWideChar(CP_ACP, 0, ptest->string, -1, wide_string, sizeof(wide_string) /
sizeof(WCHAR));
@@ -599,14 +602,15 @@
if(GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- win_skip("BuildCommDCBAndTimeoutsW is not available\n");
+ if(!reportedDCBAndTW++)
+ win_skip("BuildCommDCBAndTimeoutsW is not implemented\n");
return;
}
/* check results */
- check_result("BuildCommDCBAndTimeoutsA", ptest, initial_value, result);
- check_dcb("BuildCommDCBAndTimeoutsA", ptest, initial_value, &dcb,
pexpected_dcb);
- check_timeouts("BuildCommDCBAndTimeoutsA", ptest, initial_value,
&timeouts, pexpected_timeouts);
+ check_result("BuildCommDCBAndTimeoutsW", ptest, initial_value, result);
+ check_dcb("BuildCommDCBAndTimeoutsW", ptest, initial_value, &dcb,
pexpected_dcb);
+ check_timeouts("BuildCommDCBAndTimeoutsW", ptest, initial_value,
&timeouts, pexpected_timeouts);
}
static void test_BuildCommDCB(void)
Modified: trunk/rostests/winetests/kernel32/file.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/kernel32/file.c…
==============================================================================
--- trunk/rostests/winetests/kernel32/file.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/kernel32/file.c [iso-8859-1] Tue Jun 23 15:44:23 2009
@@ -55,10 +55,11 @@
"sdlkfjasdlkfj a dslkj adsklf \n \nasdklf askldfa sdlkf \nsadklf asdklf asdf
";
struct test_list {
- const char *file;
- const DWORD err;
- const DWORD options;
- const BOOL todo_flag;
+ const char *file; /* file string to test */
+ const DWORD err; /* Win NT and further error code */
+ const LONG err2; /* Win 9x & ME error code or -1 */
+ const DWORD options; /* option flag to use for open */
+ const BOOL todo_flag; /* todo_wine indicator */
} ;
static void InitFunctionPointers(void)
@@ -717,19 +718,19 @@
static const char nt_drive[] = "\\\\?\\A:";
DWORD i, ret, len;
struct test_list p[] = {
- {"", ERROR_PATH_NOT_FOUND, FILE_ATTRIBUTE_NORMAL, TRUE }, /* dir as file w
\ */
- {"", ERROR_SUCCESS, FILE_FLAG_BACKUP_SEMANTICS, FALSE }, /* dir as dir w \
*/
- {"a", ERROR_FILE_NOT_FOUND, FILE_ATTRIBUTE_NORMAL, FALSE }, /* non-exist
file */
- {"a\\", ERROR_FILE_NOT_FOUND, FILE_ATTRIBUTE_NORMAL, FALSE }, /* non-exist
dir */
- {"removeme", ERROR_ACCESS_DENIED, FILE_ATTRIBUTE_NORMAL, FALSE }, /* exist
dir w/o \ */
- {"removeme\\", ERROR_PATH_NOT_FOUND, FILE_ATTRIBUTE_NORMAL, TRUE }, /* exst
dir w \ */
- {"c:", ERROR_ACCESS_DENIED, FILE_ATTRIBUTE_NORMAL, FALSE }, /* device in
file namespace */
- {"c:", ERROR_SUCCESS, FILE_FLAG_BACKUP_SEMANTICS, FALSE }, /* device in
file namespace as dir */
- {"c:\\", ERROR_PATH_NOT_FOUND, FILE_ATTRIBUTE_NORMAL, TRUE }, /* root dir w
\ */
- {"c:\\", ERROR_SUCCESS, FILE_FLAG_BACKUP_SEMANTICS, FALSE }, /* root dir w
\ as dir */
- {"\\\\?\\c:", ERROR_SUCCESS, FILE_ATTRIBUTE_NORMAL,FALSE }, /* dev
namespace drive */
- {"\\\\?\\c:\\", ERROR_PATH_NOT_FOUND, FILE_ATTRIBUTE_NORMAL, TRUE }, /* dev
namespace drive w \ */
- {NULL, 0, 0, FALSE}
+ {"", ERROR_PATH_NOT_FOUND, -1, FILE_ATTRIBUTE_NORMAL, TRUE }, /* dir as
file w \ */
+ {"", ERROR_SUCCESS, ERROR_PATH_NOT_FOUND, FILE_FLAG_BACKUP_SEMANTICS, FALSE
}, /* dir as dir w \ */
+ {"a", ERROR_FILE_NOT_FOUND, -1, FILE_ATTRIBUTE_NORMAL, FALSE }, /*
non-exist file */
+ {"a\\", ERROR_FILE_NOT_FOUND, ERROR_PATH_NOT_FOUND, FILE_ATTRIBUTE_NORMAL,
FALSE }, /* non-exist dir */
+ {"removeme", ERROR_ACCESS_DENIED, -1, FILE_ATTRIBUTE_NORMAL, FALSE }, /*
exist dir w/o \ */
+ {"removeme\\", ERROR_PATH_NOT_FOUND, -1, FILE_ATTRIBUTE_NORMAL, TRUE }, /*
exst dir w \ */
+ {"c:", ERROR_ACCESS_DENIED, ERROR_PATH_NOT_FOUND, FILE_ATTRIBUTE_NORMAL,
FALSE }, /* device in file namespace */
+ {"c:", ERROR_SUCCESS, ERROR_PATH_NOT_FOUND, FILE_FLAG_BACKUP_SEMANTICS,
FALSE }, /* device in file namespace as dir */
+ {"c:\\", ERROR_PATH_NOT_FOUND, ERROR_ACCESS_DENIED, FILE_ATTRIBUTE_NORMAL,
TRUE }, /* root dir w \ */
+ {"c:\\", ERROR_SUCCESS, ERROR_ACCESS_DENIED, FILE_FLAG_BACKUP_SEMANTICS,
FALSE }, /* root dir w \ as dir */
+ {"\\\\?\\c:", ERROR_SUCCESS, ERROR_BAD_NETPATH, FILE_ATTRIBUTE_NORMAL,FALSE
}, /* dev namespace drive */
+ {"\\\\?\\c:\\", ERROR_PATH_NOT_FOUND, ERROR_BAD_NETPATH,
FILE_ATTRIBUTE_NORMAL, TRUE }, /* dev namespace drive w \ */
+ {NULL, 0, -1, 0, FALSE}
};
BY_HANDLE_FILE_INFORMATION Finfo;
@@ -829,13 +830,17 @@
}
/* otherwise validate results with expectations */
else if (p[i].todo_flag)
- todo_wine ok((hFile == INVALID_HANDLE_VALUE && p[i].err ==
GetLastError()) ||
+ todo_wine ok(
+ (hFile == INVALID_HANDLE_VALUE &&
+ (p[i].err == GetLastError() || p[i].err2 == GetLastError())) ||
(hFile != INVALID_HANDLE_VALUE && p[i].err == ERROR_SUCCESS),
"CreateFileA failed on %s, hFile %p, err=%u, should be %u\n",
filename, hFile, GetLastError(), p[i].err);
else
- ok((hFile == INVALID_HANDLE_VALUE && p[i].err == GetLastError()) ||
- (hFile != INVALID_HANDLE_VALUE && p[i].err == ERROR_SUCCESS),
+ ok(
+ (hFile == INVALID_HANDLE_VALUE &&
+ (p[i].err == GetLastError() || p[i].err2 == GetLastError())) ||
+ (hFile != INVALID_HANDLE_VALUE && p[i].err == ERROR_SUCCESS),
"CreateFileA failed on %s, hFile %p, err=%u, should be %u\n",
filename, hFile, GetLastError(), p[i].err);
if (hFile != INVALID_HANDLE_VALUE)
@@ -852,21 +857,26 @@
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS, NULL );
- ok(hFile != INVALID_HANDLE_VALUE && GetLastError() == ERROR_SUCCESS,
+ if (hFile != INVALID_HANDLE_VALUE && GetLastError() != ERROR_PATH_NOT_FOUND)
+ {
+ ok(hFile != INVALID_HANDLE_VALUE && GetLastError() == ERROR_SUCCESS,
"CreateFileA did not work, last error %u on volume <%s>\n",
GetLastError(), temp_path );
- if (hFile != INVALID_HANDLE_VALUE)
- {
- ret = GetFileInformationByHandle( hFile, &Finfo );
- if (ret)
+ if (hFile != INVALID_HANDLE_VALUE)
{
- ok(Finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY,
- "CreateFileA probably did not open temp directory %s correctly\n
file information does not include FILE_ATTRIBUTE_DIRECTORY, actual=0x%08x\n",
+ ret = GetFileInformationByHandle( hFile, &Finfo );
+ if (ret)
+ {
+ ok(Finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY,
+ "CreateFileA probably did not open temp directory %s correctly\n
file information does not include FILE_ATTRIBUTE_DIRECTORY, actual=0x%08x\n",
temp_path, Finfo.dwFileAttributes);
+ }
+ CloseHandle( hFile );
}
- CloseHandle( hFile );
- }
+ }
+ else
+ skip("Probable Win9x, got ERROR_PATH_NOT_FOUND w/ FILE_FLAG_BACKUP_SEMANTICS
or %s\n", temp_path);
/* *** Test opening volumes/devices using drive letter *** */
@@ -879,7 +889,8 @@
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING, NULL );
- if (hFile != INVALID_HANDLE_VALUE || GetLastError() != ERROR_ACCESS_DENIED)
+ if (hFile != INVALID_HANDLE_VALUE ||
+ (GetLastError() != ERROR_ACCESS_DENIED && GetLastError() !=
ERROR_BAD_NETPATH))
{
/* if we have adm rights to volume, then try rest of tests */
ok(hFile != INVALID_HANDLE_VALUE, "CreateFileA did not open %s, last
error=%u\n",
@@ -946,6 +957,9 @@
if (hFile != INVALID_HANDLE_VALUE)
CloseHandle( hFile );
}
+ /* If we see ERROR_BAD_NETPATH then on Win9x or WinME, so skip */
+ else if (GetLastError() == ERROR_BAD_NETPATH)
+ skip("Probable Win9x, got ERROR_BAD_NETPATH (53)\n");
else
skip("Do not have authority to access volumes. Tests skipped\n");
@@ -957,78 +971,86 @@
strcpy(filename, "c:\\");
filename[0] = windowsdir[0];
ret = pGetVolumeNameForVolumeMountPointA( filename, Volume_1, MAX_PATH );
- ok(ret == TRUE, "GetVolumeNameForVolumeMountPointA failed\n");
- ok(strlen(Volume_1) == 49, "GetVolumeNameForVolumeMountPointA returned wrong
length name %s\n", Volume_1);
-
- /* test the result of opening a unique volume name (GUID) */
- /* with the trailing \ */
- /* this should error out */
- strcpy(filename, Volume_1);
- hFile = CreateFileA( filename, GENERIC_READ | GENERIC_WRITE,
+ ok(ret, "GetVolumeNameForVolumeMountPointA failed, for %s, last
error=%d\n", filename, GetLastError());
+ if (ret)
+ {
+ ok(strlen(Volume_1) == 49, "GetVolumeNameForVolumeMountPointA returned
wrong length name <%s>\n", Volume_1);
+
+ /* test the result of opening a unique volume name (GUID)
+ * with the trailing \
+ * this should error out
+ */
+ strcpy(filename, Volume_1);
+ hFile = CreateFileA( filename, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING, NULL );
- todo_wine
- ok(hFile == INVALID_HANDLE_VALUE,
- "CreateFileA should not have opened %s, hFile %p\n",
- filename, hFile);
- todo_wine
- ok(hFile == INVALID_HANDLE_VALUE && GetLastError() ==
ERROR_PATH_NOT_FOUND,
- "CreateFileA should have returned ERROR_PATH_NOT_FOUND on %s, but got
%u\n",
- filename, GetLastError());
- if (hFile != INVALID_HANDLE_VALUE)
- CloseHandle( hFile );
-
- /* test the result of opening a unique volume name (GUID) */
- /* with the temp path string as dir */
- /* this should work */
- strcpy(filename, Volume_1);
- strcat(filename, temp_path+3);
- hFile = CreateFileA( filename, GENERIC_READ | GENERIC_WRITE,
+ todo_wine
+ ok(hFile == INVALID_HANDLE_VALUE,
+ "CreateFileA should not have opened %s, hFile %p\n",
+ filename, hFile);
+ todo_wine
+ ok(hFile == INVALID_HANDLE_VALUE && GetLastError() ==
ERROR_PATH_NOT_FOUND,
+ "CreateFileA should have returned ERROR_PATH_NOT_FOUND on %s, but
got %u\n",
+ filename, GetLastError());
+ if (hFile != INVALID_HANDLE_VALUE)
+ CloseHandle( hFile );
+
+ /* test the result of opening a unique volume name (GUID)
+ * with the temp path string as dir
+ * this should work
+ */
+ strcpy(filename, Volume_1);
+ strcat(filename, temp_path+3);
+ hFile = CreateFileA( filename, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS, NULL );
- todo_wine
- ok(hFile != INVALID_HANDLE_VALUE,
- "CreateFileA should have opened %s, but got %u\n",
- filename, GetLastError());
- if (hFile != INVALID_HANDLE_VALUE)
- CloseHandle( hFile );
-
- /* test the result of opening a unique volume name (GUID) */
- /* without the trailing \ and in device namespace */
- /* this should work */
- strcpy(filename, Volume_1);
- filename[2] = '.';
- filename[48] = 0;
- hFile = CreateFileA( filename, GENERIC_READ | GENERIC_WRITE,
+ todo_wine
+ ok(hFile != INVALID_HANDLE_VALUE,
+ "CreateFileA should have opened %s, but got %u\n",
+ filename, GetLastError());
+ if (hFile != INVALID_HANDLE_VALUE)
+ CloseHandle( hFile );
+
+ /* test the result of opening a unique volume name (GUID)
+ * without the trailing \ and in device namespace
+ * this should work
+ */
+ strcpy(filename, Volume_1);
+ filename[2] = '.';
+ filename[48] = 0;
+ hFile = CreateFileA( filename, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING, NULL );
- if (hFile != INVALID_HANDLE_VALUE || GetLastError() != ERROR_ACCESS_DENIED)
- {
- /* if we have adm rights to volume, then try rest of tests */
- ok(hFile != INVALID_HANDLE_VALUE, "CreateFileA did not open %s, last
error=%u\n",
- filename, GetLastError());
- if (hFile != INVALID_HANDLE_VALUE)
+ if (hFile != INVALID_HANDLE_VALUE || GetLastError() != ERROR_ACCESS_DENIED)
{
- /* if we opened the volume/device, try to read it. Since it */
- /* opened, we should be able to read it. We don't care about*/
- /* what the data is at this time. */
- len = 512;
- ret = ReadFile( hFile, buffer, len, &len, NULL );
- todo_wine ok(ret, "Failed to read volume, last error %u, %u, for
%s\n",
- GetLastError(), ret, filename);
- if (ret)
+ /* if we have adm rights to volume, then try rest of tests */
+ ok(hFile != INVALID_HANDLE_VALUE, "CreateFileA did not open %s, last
error=%u\n",
+ filename, GetLastError());
+ if (hFile != INVALID_HANDLE_VALUE)
{
- trace("buffer is\n");
- dumpmem(buffer, 64);
- }
- CloseHandle( hFile );
- }
+ /* if we opened the volume/device, try to read it. Since it */
+ /* opened, we should be able to read it. We don't care about*/
+ /* what the data is at this time. */
+ len = 512;
+ ret = ReadFile( hFile, buffer, len, &len, NULL );
+ todo_wine ok(ret, "Failed to read volume, last error %u, %u, for
%s\n",
+ GetLastError(), ret, filename);
+ if (ret)
+ {
+ trace("buffer is\n");
+ dumpmem(buffer, 64);
+ }
+ CloseHandle( hFile );
+ }
+ }
+ else
+ skip("Do not have authority to access volumes. Tests
skipped\n");
}
else
- skip("Do not have authority to access volumes. Tests skipped\n");
+ win_skip("GetVolumeNameForVolumeMountPointA not functioning\n");
}
else
win_skip("GetVolumeNameForVolumeMountPointA not found\n");
Modified: trunk/rostests/winetests/kernel32/pipe.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/kernel32/pipe.c…
==============================================================================
--- trunk/rostests/winetests/kernel32/pipe.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/kernel32/pipe.c [iso-8859-1] Tue Jun 23 15:44:23 2009
@@ -836,6 +836,7 @@
char ibuf[32];
DWORD written;
DWORD readden;
+ DWORD ret;
SetLastError(0xdeadbeef);
hnp = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT,
@@ -876,6 +877,8 @@
"ReadFile from disconnected pipe with bytes waiting\n");
ok(!DisconnectNamedPipe(hnp) && GetLastError() ==
ERROR_PIPE_NOT_CONNECTED,
"DisconnectNamedPipe worked twice\n");
+ ret = WaitForSingleObject(hFile, 0);
+ ok(ret == WAIT_TIMEOUT, "WaitForSingleObject returned %X\n", ret);
ok(CloseHandle(hFile), "CloseHandle\n");
}
Modified: trunk/rostests/winetests/kernel32/process.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/kernel32/proces…
==============================================================================
--- trunk/rostests/winetests/kernel32/process.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/kernel32/process.c [iso-8859-1] Tue Jun 23 15:44:23 2009
@@ -43,6 +43,12 @@
ok((expected) == value, "Expected " #actual " to be %d ("
#expected ") is %d\n", \
(expected), value); \
} while (0)
+#define expect_eq_s(expected, actual) \
+ do { \
+ LPCSTR value = (actual); \
+ ok(lstrcmpA((expected), value) == 0, "Expected " #actual " to be
L\"%s\" (" #expected ") is L\"%s\"\n", \
+ expected, value); \
+ } while (0)
#define expect_eq_ws_i(expected, actual) \
do { \
LPCWSTR value = (actual); \
@@ -70,6 +76,7 @@
static HINSTANCE hkernel32;
static LPVOID (WINAPI *pVirtualAllocEx)(HANDLE, LPVOID, SIZE_T, DWORD, DWORD);
static BOOL (WINAPI *pVirtualFreeEx)(HANDLE, LPVOID, SIZE_T, DWORD);
+static BOOL (WINAPI *pQueryFullProcessImageNameA)(HANDLE hProcess, DWORD dwFlags, LPSTR
lpExeName, PDWORD lpdwSize);
static BOOL (WINAPI *pQueryFullProcessImageNameW)(HANDLE hProcess, DWORD dwFlags,
LPWSTR lpExeName, PDWORD lpdwSize);
/* ############################### */
@@ -208,6 +215,7 @@
hkernel32 = GetModuleHandleA("kernel32");
pVirtualAllocEx = (void *) GetProcAddress(hkernel32, "VirtualAllocEx");
pVirtualFreeEx = (void *) GetProcAddress(hkernel32, "VirtualFreeEx");
+ pQueryFullProcessImageNameA = (void *) GetProcAddress(hkernel32,
"QueryFullProcessImageNameA");
pQueryFullProcessImageNameW = (void *) GetProcAddress(hkernel32,
"QueryFullProcessImageNameW");
return 1;
}
@@ -1620,6 +1628,53 @@
CloseHandle(pi.hThread);
}
+static void test_ProcessNameA(void)
+{
+#define INIT_STR "Just some words"
+ DWORD length, size;
+ CHAR buf[1024];
+
+ if (!pQueryFullProcessImageNameA)
+ {
+ win_skip("QueryFullProcessImageNameA unavailable (added in Windows
Vista)\n");
+ return;
+ }
+ /* get the buffer length without \0 terminator */
+ length = 1024;
+ expect_eq_d(TRUE, pQueryFullProcessImageNameA(GetCurrentProcess(), 0, buf,
&length));
+ expect_eq_d(length, lstrlenA(buf));
+
+ /* when the buffer is too small
+ * - function fail with error ERROR_INSUFFICIENT_BUFFER
+ * - the size variable is not modified
+ * tested with the biggest too small size
+ */
+ size = length;
+ sprintf(buf,INIT_STR);
+ expect_eq_d(FALSE, pQueryFullProcessImageNameA(GetCurrentProcess(), 0, buf,
&size));
+ expect_eq_d(ERROR_INSUFFICIENT_BUFFER, GetLastError());
+ expect_eq_d(length, size);
+ expect_eq_s(INIT_STR, buf);
+
+ /* retest with smaller buffer size
+ */
+ size = 4;
+ sprintf(buf,INIT_STR);
+ expect_eq_d(FALSE, pQueryFullProcessImageNameA(GetCurrentProcess(), 0, buf,
&size));
+ expect_eq_d(ERROR_INSUFFICIENT_BUFFER, GetLastError());
+ expect_eq_d(4, size);
+ expect_eq_s(INIT_STR, buf);
+
+ /* this is a difference between the ascii and the unicode version
+ * the unicode version crashes when the size is big enough to hold the result
+ * ascii version throughs an error
+ */
+ size = 1024;
+ expect_eq_d(FALSE, pQueryFullProcessImageNameA(GetCurrentProcess(), 0, NULL,
&size));
+ expect_eq_d(1024, size);
+ expect_eq_d(ERROR_INVALID_PARAMETER, GetLastError());
+}
+
static void test_ProcessName(void)
{
HANDLE hSelf;
@@ -1743,6 +1798,7 @@
test_ExitCode();
test_OpenProcess();
test_GetProcessVersion();
+ test_ProcessNameA();
test_ProcessName();
test_Handles();
/* things that can be tested: