Restructured code of StartServiceCtrlDispatcherA/W
Alexander Yaworsky
yaworsky at migusoft.ru
Fri Sep 24 00:37:47 CDT 2004
Hello
I guess that previous patch for advapi32/service.c was messy.
I'm splitting it. At first, some duplicate code from StartServiceCtrlDispatcherA/W
has been moved to the helper function. I should do this at the beginning but missed.
ChangeLog:
Restructured code of StartServiceCtrlDispatcherA/W
Index: dlls/advapi32/service.c
===================================================================
RCS file: /home/wine/wine/dlls/advapi32/service.c,v
retrieving revision 1.58
diff -u -r1.58 service.c
--- dlls/advapi32/service.c 21 Sep 2004 00:23:32 -0000 1.58
+++ dlls/advapi32/service.c 22 Sep 2004 02:37:30 -0000
@@ -218,6 +218,30 @@
}
/******************************************************************************
+ * open_seb_shmem
+ *
+ * helper function for StartServiceCtrlDispatcherA/W
+ */
+static struct SEB* open_seb_shmem( LPWSTR service_name, HANDLE* hServiceShmem )
+{
+ WCHAR object_name[ MAX_PATH ];
+ HANDLE hmem;
+ struct SEB *ret;
+
+ snprintfW( object_name, MAX_PATH, szServiceShmemNameFmtW, service_name );
+ hmem = OpenFileMappingW( FILE_MAP_ALL_ACCESS, FALSE, object_name );
+ if( NULL == hmem )
+ return NULL;
+
+ ret = MapViewOfFile( hmem, FILE_MAP_ALL_ACCESS, 0, 0, 0 );
+ if( NULL == ret )
+ CloseHandle( hmem );
+ else
+ *hServiceShmem = hmem;
+ return ret;
+}
+
+/******************************************************************************
* build_arg_vectors
*
* helper function for StartServiceCtrlDispatcherA/W
@@ -253,13 +277,13 @@
{
LPSERVICE_MAIN_FUNCTIONA fpMain;
WCHAR service_name[ MAX_SERVICE_NAME ];
- WCHAR object_name[ MAX_PATH ];
HANDLE hServiceShmem = NULL;
struct SEB *seb = NULL;
- DWORD dwNumServiceArgs ;
+ DWORD dwNumServiceArgs = 0;
LPWSTR *lpArgVecW = NULL;
- LPSTR *lpArgVecA;
+ LPSTR *lpArgVecA = NULL;
unsigned int i;
+ BOOL ret = FALSE;
TRACE("(%p)\n", servent);
@@ -271,30 +295,17 @@
submitted against revision 1.45 and so preserved here.
*/
FIXME("should fail with ERROR_FAILED_SERVICE_CONTROLLER_CONNECT\n");
- dwNumServiceArgs = 0;
- lpArgVecA = NULL;
goto run_service;
}
- snprintfW( object_name, MAX_PATH, szServiceShmemNameFmtW, service_name );
- hServiceShmem = OpenFileMappingW( FILE_MAP_ALL_ACCESS, FALSE, object_name );
- if( NULL == hServiceShmem )
- return FALSE;
-
- seb = MapViewOfFile( hServiceShmem, FILE_MAP_ALL_ACCESS, 0, 0, 0 );
+ seb = open_seb_shmem( service_name, &hServiceShmem );
if( NULL == seb )
- {
- CloseHandle( hServiceShmem );
return FALSE;
- }
lpArgVecW = build_arg_vectors( seb );
if( NULL == lpArgVecW )
- {
- UnmapViewOfFile( seb );
- CloseHandle( hServiceShmem );
- return FALSE;
- }
+ goto done;
+
lpArgVecW[0] = service_name;
dwNumServiceArgs = seb->argc + 1;
@@ -316,6 +327,7 @@
servent++;
}
+done:
if(dwNumServiceArgs)
{
/* free arg strings */
@@ -327,7 +339,7 @@
if( lpArgVecW ) HeapFree( GetProcessHeap(), 0, lpArgVecW );
if( seb ) UnmapViewOfFile( seb );
if( hServiceShmem ) CloseHandle( hServiceShmem );
- return TRUE;
+ return ret;
}
/******************************************************************************
@@ -341,8 +353,7 @@
{
LPSERVICE_MAIN_FUNCTIONW fpMain;
WCHAR service_name[ MAX_SERVICE_NAME ];
- WCHAR object_name[ MAX_PATH ];
- HANDLE hServiceShmem;
+ HANDLE hServiceShmem = NULL;
struct SEB *seb;
DWORD dwNumServiceArgs ;
LPWSTR *lpServiceArgVectors ;
@@ -352,17 +363,9 @@
if( ! read_scm_lock_data( service_name ) )
return FALSE;
- snprintfW( object_name, MAX_PATH, szServiceShmemNameFmtW, service_name );
- hServiceShmem = OpenFileMappingW( FILE_MAP_ALL_ACCESS, FALSE, object_name );
- if( NULL == hServiceShmem )
- return FALSE;
-
- seb = MapViewOfFile( hServiceShmem, FILE_MAP_ALL_ACCESS, 0, 0, 0 );
+ seb = open_seb_shmem( service_name, &hServiceShmem );
if( NULL == seb )
- {
- CloseHandle( hServiceShmem );
return FALSE;
- }
lpServiceArgVectors = build_arg_vectors( seb );
if( NULL == lpServiceArgVectors )
More information about the wine-patches
mailing list