Hans Leidekker : pdh: Fix parameter handling in PdhAddEnglishCounter{A, W} and PdhCollectQueryDataWithTime.

Alexandre Julliard julliard at winehq.org
Mon Oct 1 07:55:01 CDT 2007


Module: wine
Branch: master
Commit: cf8b16bc9ec8b427ed330869060532681cdf5329
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=cf8b16bc9ec8b427ed330869060532681cdf5329

Author: Hans Leidekker <hans at it.vu.nl>
Date:   Sat Sep 29 21:07:01 2007 +0200

pdh: Fix parameter handling in PdhAddEnglishCounter{A, W} and PdhCollectQueryDataWithTime.

---

 dlls/pdh/pdh_main.c  |   20 ++++++++++++++------
 dlls/pdh/tests/pdh.c |   17 +++++++++++++----
 2 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/dlls/pdh/pdh_main.c b/dlls/pdh/pdh_main.c
index a97ee9b..c5117bf 100644
--- a/dlls/pdh/pdh_main.c
+++ b/dlls/pdh/pdh_main.c
@@ -304,6 +304,9 @@ PDH_STATUS WINAPI PdhAddCounterW( PDH_HQUERY hquery, LPCWSTR path,
 PDH_STATUS WINAPI PdhAddEnglishCounterA( PDH_HQUERY query, LPCSTR path,
                                          DWORD_PTR userdata, PDH_HCOUNTER *counter )
 {
+    TRACE("%p %s %lx %p\n", query, debugstr_a(path), userdata, counter);
+
+    if (!query) return PDH_INVALID_ARGUMENT;
     return PdhAddCounterA( query, path, userdata, counter );
 }
 
@@ -313,6 +316,9 @@ PDH_STATUS WINAPI PdhAddEnglishCounterA( PDH_HQUERY query, LPCSTR path,
 PDH_STATUS WINAPI PdhAddEnglishCounterW( PDH_HQUERY query, LPCWSTR path,
                                          DWORD_PTR userdata, PDH_HCOUNTER *counter )
 {
+    TRACE("%p %s %lx %p\n", query, debugstr_w(path), userdata, counter);
+
+    if (!query) return PDH_INVALID_ARGUMENT;
     return PdhAddCounterW( query, path, userdata, counter );
 }
 
@@ -543,9 +549,13 @@ PDH_STATUS WINAPI PdhCollectQueryDataEx( PDH_HQUERY handle, DWORD interval, HAND
 PDH_STATUS WINAPI PdhCollectQueryDataWithTime( PDH_HQUERY handle, LONGLONG *timestamp )
 {
     struct query *query = handle;
+    struct counter *counter;
+    struct list *item;
 
     TRACE("%p %p\n", handle, timestamp);
 
+    if (!timestamp) return PDH_INVALID_ARGUMENT;
+
     EnterCriticalSection( &pdh_handle_cs );
     if (!query || query->magic != PDH_MAGIC_QUERY)
     {
@@ -560,13 +570,11 @@ PDH_STATUS WINAPI PdhCollectQueryDataWithTime( PDH_HQUERY handle, LONGLONG *time
 
     collect_query_data( query );
 
-    if (timestamp)
-    {
-        struct list *item = list_head( &query->counters );
-        struct counter *counter = LIST_ENTRY( item, struct counter, entry );
+    item = list_head( &query->counters );
+    counter = LIST_ENTRY( item, struct counter, entry );
+
+    *timestamp = ((LONGLONG)counter->stamp.dwHighDateTime << 32) | counter->stamp.dwLowDateTime;
 
-        *timestamp = ((LONGLONG)counter->stamp.dwHighDateTime << 32) | counter->stamp.dwLowDateTime;
-    }
     LeaveCriticalSection( &pdh_handle_cs );
     return ERROR_SUCCESS;
 }
diff --git a/dlls/pdh/tests/pdh.c b/dlls/pdh/tests/pdh.c
index 2853f8b..0cfdff3 100644
--- a/dlls/pdh/tests/pdh.c
+++ b/dlls/pdh/tests/pdh.c
@@ -211,11 +211,14 @@ static void test_PdhAddEnglishCounterA( void )
     ret = PdhOpenQueryA( NULL, 0, &query );
     ok(ret == ERROR_SUCCESS, "PdhOpenQueryA failed 0x%08x\n", ret);
 
+    ret = PdhCollectQueryData( query );
+    ok(ret == PDH_NO_DATA, "PdhCollectQueryData failed 0x%08x\n", ret);
+
     ret = pPdhAddEnglishCounterA( NULL, "\\System\\System Up Time", 0, NULL );
     ok(ret == PDH_INVALID_ARGUMENT, "PdhAddEnglishCounterA failed 0x%08x\n", ret);
 
     ret = pPdhAddEnglishCounterA( NULL, "\\System\\System Up Time", 0, &counter );
-    ok(ret == PDH_INVALID_HANDLE, "PdhAddEnglishCounterA failed 0x%08x\n", ret);
+    ok(ret == PDH_INVALID_ARGUMENT, "PdhAddEnglishCounterA failed 0x%08x\n", ret);
 
     ret = pPdhAddEnglishCounterA( query, NULL, 0, &counter );
     ok(ret == PDH_INVALID_ARGUMENT, "PdhAddEnglishCounterA failed 0x%08x\n", ret);
@@ -249,11 +252,14 @@ static void test_PdhAddEnglishCounterW( void )
     ret = PdhOpenQueryW( NULL, 0, &query );
     ok(ret == ERROR_SUCCESS, "PdhOpenQueryW failed 0x%08x\n", ret);
 
+    ret = PdhCollectQueryData( query );
+    ok(ret == PDH_NO_DATA, "PdhCollectQueryData failed 0x%08x\n", ret);
+
     ret = pPdhAddEnglishCounterW( NULL, system_uptime, 0, NULL );
     ok(ret == PDH_INVALID_ARGUMENT, "PdhAddEnglishCounterW failed 0x%08x\n", ret);
 
     ret = pPdhAddEnglishCounterW( NULL, system_uptime, 0, &counter );
-    ok(ret == PDH_INVALID_HANDLE, "PdhAddEnglishCounterW failed 0x%08x\n", ret);
+    ok(ret == PDH_INVALID_ARGUMENT, "PdhAddEnglishCounterW failed 0x%08x\n", ret);
 
     ret = pPdhAddEnglishCounterW( query, NULL, 0, &counter );
     ok(ret == PDH_INVALID_ARGUMENT, "PdhAddEnglishCounterW failed 0x%08x\n", ret);
@@ -288,14 +294,17 @@ static void test_PdhCollectQueryDataWithTime( void )
     ret = PdhOpenQueryA( NULL, 0, &query );
     ok(ret == ERROR_SUCCESS, "PdhOpenQueryA failed 0x%08x\n", ret);
 
+    ret = PdhCollectQueryData( query );
+    ok(ret == PDH_NO_DATA, "PdhCollectQueryData failed 0x%08x\n", ret);
+
     ret = PdhAddCounterA( query, "\\System\\System Up Time", 0, &counter );
     ok(ret == ERROR_SUCCESS, "PdhAddCounterA failed 0x%08x\n", ret);
 
     ret = pPdhCollectQueryDataWithTime( NULL, NULL );
-    ok(ret == PDH_INVALID_HANDLE, "PdhCollectQueryDataWithTime failed 0x%08x\n", ret);
+    ok(ret == PDH_INVALID_ARGUMENT, "PdhCollectQueryDataWithTime failed 0x%08x\n", ret);
 
     ret = pPdhCollectQueryDataWithTime( query, NULL );
-    ok(ret == ERROR_SUCCESS, "PdhCollectQueryDataWithTime failed 0x%08x\n", ret);
+    ok(ret == PDH_INVALID_ARGUMENT, "PdhCollectQueryDataWithTime failed 0x%08x\n", ret);
 
     ret = pPdhCollectQueryDataWithTime( NULL, &time );
     ok(ret == PDH_INVALID_HANDLE, "PdhCollectQueryDataWithTime failed 0x%08x\n", ret);




More information about the wine-cvs mailing list