From 4288ba63064d3c8b754146db19bf7ff0855d1d7b Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 27 Mar 2011 13:12:12 +0000 Subject: [PATCH] [SERVICES] ScmWriteDependencies: - Fixed an off-by-one bug. This bug caused a wrong calculation of the 'DependOnGroup' value data length. Group dependencies were not written properly to the registry. - Write 'DependOnService' and 'DependOnService' values to the registry only if the dependency strings are not empty. Delete a value if the corresponding dependency string is empty. This fixes another winetest. svn path=/trunk/; revision=51172 --- reactos/base/system/services/config.c | 42 ++++++++++++++++++--------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/reactos/base/system/services/config.c b/reactos/base/system/services/config.c index b056af5c86c..bcde1d47198 100644 --- a/reactos/base/system/services/config.c +++ b/reactos/base/system/services/config.c @@ -125,7 +125,7 @@ ScmWriteDependencies(HKEY hServiceKey, lpDst = lpGroupDeps; while (*lpSrc != 0) { - dwLength = wcslen(lpSrc); + dwLength = wcslen(lpSrc) + 1; if (*lpSrc == SC_GROUP_IDENTIFIERW) { lpSrc++; @@ -157,21 +157,37 @@ ScmWriteDependencies(HKEY hServiceKey, *lpDst = 0; dwServiceLength++; - dwError = RegSetValueExW(hServiceKey, - L"DependOnGroup", - 0, - REG_MULTI_SZ, - (LPBYTE)lpGroupDeps, - dwGroupLength * sizeof(WCHAR)); + if (dwGroupLength > 1) + { + dwError = RegSetValueExW(hServiceKey, + L"DependOnGroup", + 0, + REG_MULTI_SZ, + (LPBYTE)lpGroupDeps, + dwGroupLength * sizeof(WCHAR)); + } + else + { + RegDeleteValueW(hServiceKey, + L"DependOnGroup"); + } if (dwError == ERROR_SUCCESS) { - dwError = RegSetValueExW(hServiceKey, - L"DependOnService", - 0, - REG_MULTI_SZ, - (LPBYTE)lpServiceDeps, - dwServiceLength * sizeof(WCHAR)); + if (dwServiceLength > 1) + { + dwError = RegSetValueExW(hServiceKey, + L"DependOnService", + 0, + REG_MULTI_SZ, + (LPBYTE)lpServiceDeps, + dwServiceLength * sizeof(WCHAR)); + } + else + { + RegDeleteValueW(hServiceKey, + L"DependOnService"); + } } HeapFree(GetProcessHeap(), 0, lpGroupDeps);