advapi32: Fix prototypes for StartServiceCtrlDispatcher[AW]
Bang Jun-Young
junyoung at mogua.com
Wed Jan 31 00:39:16 CST 2007
Please ignore this patch. There are subtle differences between GCC and MSC I didn't
notice at the moment of producing this patch. It would be better to keep it local
in my own repos. ;-)
Jun-Young
I wrote:
> It seems that this change spots a bug in the original code. A newly
> generated patch
> against service.c is attached. There are no changes for the other files.
>
> On 1/29/07, Bang Jun-Young <junyoung at mogua.com> wrote:
>> 2007-01-29 Bang Jun-Young <junyoung at mogua.com>
>>
>> * dlls/advapi32/service.c, include/winsvc.h:
>> advapi32: Fix prototypes for StartServiceCtrlDispatcher[AW]
>> to match the PSDK.
>
> ------------------------------------------------------------------------
>
> Index: service.c
> ===================================================================
> RCS file: /home/wine/wine/dlls/advapi32/service.c,v
> retrieving revision 1.107
> diff -u -r1.107 service.c
> --- service.c 12 Oct 2006 20:30:35 -0000 1.107
> +++ service.c 30 Jan 2007 06:38:31 -0000
> @@ -755,33 +755,32 @@
> *
> * See StartServiceCtrlDispatcherW.
> */
> -BOOL WINAPI StartServiceCtrlDispatcherA( LPSERVICE_TABLE_ENTRYA servent )
> +BOOL WINAPI StartServiceCtrlDispatcherA(CONST LPSERVICE_TABLE_ENTRYA servent)
> {
> + LPSERVICE_TABLE_ENTRYA ent;
> service_data *info;
> DWORD sz, len;
> BOOL ret = TRUE;
>
> TRACE("%p\n", servent);
>
> - EnterCriticalSection( &service_cs );
> - while (servent->lpServiceName)
> + EnterCriticalSection(&service_cs);
> + for (ent = servent; ent->lpServiceName; ent++)
> {
> - LPSTR name = servent->lpServiceName;
> + LPSTR name = ent->lpServiceName;
>
> len = MultiByteToWideChar(CP_ACP, 0, name, -1, NULL, 0);
> - sz = len*sizeof(WCHAR) + sizeof *info;
> - info = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sz );
> + sz = len*sizeof(WCHAR) + sizeof(*info);
> + info = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sz);
> MultiByteToWideChar(CP_ACP, 0, name, -1, info->name, len);
> - info->proc.a = servent->lpServiceProc;
> + info->proc.a = ent->lpServiceProc;
> info->unicode = FALSE;
>
> /* insert into the list */
> info->next = service_list;
> service_list = info;
> -
> - servent++;
> }
> - LeaveCriticalSection( &service_cs );
> + LeaveCriticalSection(&service_cs);
>
> service_run_threads();
>
> @@ -801,33 +800,32 @@
> * Success: TRUE.
> * Failure: FALSE.
> */
> -BOOL WINAPI StartServiceCtrlDispatcherW( LPSERVICE_TABLE_ENTRYW servent )
> +BOOL WINAPI StartServiceCtrlDispatcherW(CONST LPSERVICE_TABLE_ENTRYW servent)
> {
> + LPSERVICE_TABLE_ENTRYW ent;
> service_data *info;
> DWORD sz, len;
> BOOL ret = TRUE;
>
> TRACE("%p\n", servent);
>
> - EnterCriticalSection( &service_cs );
> - while (servent->lpServiceName)
> + EnterCriticalSection(&service_cs);
> + for (ent = servent; ent->lpServiceName; ent++)
> {
> - LPWSTR name = servent->lpServiceName;
> + LPWSTR name = ent->lpServiceName;
>
> len = strlenW(name);
> - sz = len*sizeof(WCHAR) + sizeof *info;
> - info = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sz );
> + sz = len*sizeof(WCHAR) + sizeof(*info);
> + info = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sz);
> strcpyW(info->name, name);
> - info->proc.w = servent->lpServiceProc;
> + info->proc.w = ent->lpServiceProc;
> info->unicode = TRUE;
>
> /* insert into the list */
> info->next = service_list;
> service_list = info;
> -
> - servent++;
> }
> - LeaveCriticalSection( &service_cs );
> + LeaveCriticalSection(&service_cs);
>
> service_run_threads();
>
More information about the wine-patches
mailing list