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/rpcser... ============================================================================== --- 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) {