[ros-diffs] [cwittich] 39433: fix some QueryServiceConfig2A winetests

cwittich at svn.reactos.org cwittich at svn.reactos.org
Fri Feb 6 09:51:20 CET 2009


Author: cwittich
Date: Fri Feb  6 02:51:20 2009
New Revision: 39433

URL: http://svn.reactos.org/svn/reactos?rev=39433&view=rev
Log:
fix some QueryServiceConfig2A winetests

Modified:
    trunk/reactos/base/system/services/rpcserver.c

Modified: trunk/reactos/base/system/services/rpcserver.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/services/rpcserver.c?rev=39433&r1=39432&r2=39433&view=diff
==============================================================================
--- trunk/reactos/base/system/services/rpcserver.c [iso-8859-1] (original)
+++ trunk/reactos/base/system/services/rpcserver.c [iso-8859-1] Fri Feb  6 02:51:20 2009
@@ -4209,7 +4209,6 @@
     PSERVICE_HANDLE hSvc;
     PSERVICE lpService = NULL;
     HKEY hServiceKey = NULL;
-    DWORD dwRequiredSize;
     LPWSTR lpDescriptionW = NULL;
     LPSTR lpDescription = NULL;
 
@@ -4255,39 +4254,42 @@
         LPSERVICE_DESCRIPTIONA lpServiceDescription = (LPSERVICE_DESCRIPTIONA)lpBuffer;
         LPSTR lpStr;
 
+        *pcbBytesNeeded = sizeof(SERVICE_DESCRIPTIONA);
+
         dwError = ScmReadString(hServiceKey,
                                 L"Description",
                                 &lpDescriptionW);
-        if (dwError != ERROR_SUCCESS)
-        {
-            if (cbBufSize < sizeof(SERVICE_DESCRIPTIONA))
+        if (dwError == ERROR_SUCCESS)
+        {
+            *pcbBytesNeeded += ((wcslen(lpDescriptionW) + 1));
+        }
+
+        if (cbBufSize >= *pcbBytesNeeded)
+        {
+
+            if (dwError == ERROR_SUCCESS)
             {
-                *pcbBytesNeeded = sizeof(SERVICE_DESCRIPTIONA);
-                dwError = ERROR_INSUFFICIENT_BUFFER;
+                lpStr = (LPSTR)(lpServiceDescription + 1);
+
+                WideCharToMultiByte(CP_ACP,
+                                    0,
+                                    lpDescriptionW,
+                                    -1,
+                                    lpStr,
+                                    wcslen(lpDescriptionW),
+                                    NULL,
+                                    NULL);
+                lpServiceDescription->lpDescription = (LPSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpServiceDescription);
             }
-            goto done;
-        }
-
-        dwRequiredSize = sizeof(SERVICE_DESCRIPTIONA) + ((wcslen(lpDescriptionW) + 1));
-
-        if (cbBufSize < dwRequiredSize)
-        {
-            *pcbBytesNeeded = dwRequiredSize;
+            else
+            {
+                lpServiceDescription->lpDescription = NULL;
+            }
+        }
+        else
+        {
             dwError = ERROR_INSUFFICIENT_BUFFER;
-            goto done;
-        }
-
-        lpStr = (LPSTR)(lpServiceDescription + 1);
-
-        WideCharToMultiByte(CP_ACP,
-                            0,
-                            lpDescriptionW,
-                            -1,
-                            lpStr,
-                            wcslen(lpDescriptionW),
-                            NULL,
-                            NULL);
-        lpServiceDescription->lpDescription = (LPSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpServiceDescription);
+        }
     }
     else if (dwInfoLevel & SERVICE_CONFIG_FAILURE_ACTIONS)
     {



More information about the Ros-diffs mailing list