[ros-diffs] [cwittich] 41580: sync kernel32_winetest with wine 1.1.24

cwittich at svn.reactos.org cwittich at svn.reactos.org
Tue Jun 23 13:44:24 CEST 2009


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?rev=41580&r1=41579&r2=41580&view=diff
==============================================================================
--- 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?rev=41580&r1=41579&r2=41580&view=diff
==============================================================================
--- 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?rev=41580&r1=41579&r2=41580&view=diff
==============================================================================
--- 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/process.c?rev=41580&r1=41579&r2=41580&view=diff
==============================================================================
--- 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:



More information about the Ros-diffs mailing list