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