From 35d2b3f6268b71a8491ff01f796d368c92a0e26f Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Fri, 13 May 2016 09:28:56 -0700 Subject: [PATCH] launcher, launchctl: refactoring --- src/launcher/launchctl.c | 50 ++++++++++++------------ src/launcher/launcher.c | 82 ++++++++++++++++++++-------------------- 2 files changed, 66 insertions(+), 66 deletions(-) diff --git a/src/launcher/launchctl.c b/src/launcher/launchctl.c index 6431697c..bffd8e74 100644 --- a/src/launcher/launchctl.c +++ b/src/launcher/launchctl.c @@ -61,7 +61,7 @@ static void usage(void) PROGNAME); } -static int callpipe_and_report(PWSTR PipeBuf, ULONG SendSize, ULONG RecvSize) +static int call_pipe_and_report(PWSTR PipeBuf, ULONG SendSize, ULONG RecvSize) { DWORD LastError, BytesTransferred; @@ -131,7 +131,7 @@ int start(PWSTR PipeBuf, ULONG PipeBufSize, memcpy(P, Argv[Argi], ArgvSize * sizeof(WCHAR)); P += ArgvSize; } - return callpipe_and_report(PipeBuf, (ULONG)((P - PipeBuf) * sizeof(WCHAR)), PipeBufSize); + return call_pipe_and_report(PipeBuf, (ULONG)((P - PipeBuf) * sizeof(WCHAR)), PipeBufSize); } int stop(PWSTR PipeBuf, ULONG PipeBufSize, @@ -151,20 +151,7 @@ int stop(PWSTR PipeBuf, ULONG PipeBufSize, memcpy(P, ClassName, ClassNameSize * sizeof(WCHAR)); P += ClassNameSize; memcpy(P, InstanceName, InstanceNameSize * sizeof(WCHAR)); P += InstanceNameSize; - return callpipe_and_report(PipeBuf, (ULONG)((P - PipeBuf) * sizeof(WCHAR)), PipeBufSize); -} - -int list(PWSTR PipeBuf, ULONG PipeBufSize) -{ - PWSTR P; - - if (PipeBufSize < 1 * sizeof(WCHAR)) - return ERROR_INVALID_PARAMETER; - - P = PipeBuf; - *P++ = LauncherSvcInstanceList; - - return callpipe_and_report(PipeBuf, (ULONG)((P - PipeBuf) * sizeof(WCHAR)), PipeBufSize); + return call_pipe_and_report(PipeBuf, (ULONG)((P - PipeBuf) * sizeof(WCHAR)), PipeBufSize); } int getinfo(PWSTR PipeBuf, ULONG PipeBufSize, @@ -184,7 +171,20 @@ int getinfo(PWSTR PipeBuf, ULONG PipeBufSize, memcpy(P, ClassName, ClassNameSize * sizeof(WCHAR)); P += ClassNameSize; memcpy(P, InstanceName, InstanceNameSize * sizeof(WCHAR)); P += InstanceNameSize; - return callpipe_and_report(PipeBuf, (ULONG)((P - PipeBuf) * sizeof(WCHAR)), PipeBufSize); + return call_pipe_and_report(PipeBuf, (ULONG)((P - PipeBuf) * sizeof(WCHAR)), PipeBufSize); +} + +int list(PWSTR PipeBuf, ULONG PipeBufSize) +{ + PWSTR P; + + if (PipeBufSize < 1 * sizeof(WCHAR)) + return ERROR_INVALID_PARAMETER; + + P = PipeBuf; + *P++ = LauncherSvcInstanceList; + + return call_pipe_and_report(PipeBuf, (ULONG)((P - PipeBuf) * sizeof(WCHAR)), PipeBufSize); } int wmain(int argc, wchar_t **argv) @@ -218,14 +218,6 @@ int wmain(int argc, wchar_t **argv) return stop(PipeBuf, PIPE_BUFFER_SIZE, argv[1], argv[2]); } else - if (0 == lstrcmpW(L"list", argv[0])) - { - if (1 != argc) - usage(); - - return list(PipeBuf, PIPE_BUFFER_SIZE); - } - else if (0 == lstrcmpW(L"info", argv[0])) { if (3 != argc) @@ -233,6 +225,14 @@ int wmain(int argc, wchar_t **argv) return getinfo(PipeBuf, PIPE_BUFFER_SIZE, argv[1], argv[2]); } + else + if (0 == lstrcmpW(L"list", argv[0])) + { + if (1 != argc) + usage(); + + return list(PipeBuf, PIPE_BUFFER_SIZE); + } else usage(); diff --git a/src/launcher/launcher.c b/src/launcher/launcher.c index 5c345946..00db62e2 100644 --- a/src/launcher/launcher.c +++ b/src/launcher/launcher.c @@ -374,40 +374,6 @@ exit: return Result; } -NTSTATUS SvcInstanceGetNameList(HANDLE ClientToken, - PWSTR Buffer, PULONG PSize) -{ - SVC_INSTANCE *SvcInstance; - PLIST_ENTRY ListEntry; - PWSTR P = Buffer, BufferEnd = P + *PSize / sizeof(WCHAR); - ULONG ClassNameSize, InstanceNameSize; - - EnterCriticalSection(&SvcInstanceLock); - - for (ListEntry = SvcInstanceList.Flink; - &SvcInstanceList != ListEntry; - ListEntry = ListEntry->Flink) - { - SvcInstance = CONTAINING_RECORD(ListEntry, SVC_INSTANCE, ListEntry); - - ClassNameSize = lstrlenW(SvcInstance->ClassName) + 1; - InstanceNameSize = lstrlenW(SvcInstance->InstanceName) + 1; - - if (BufferEnd < P + ClassNameSize + InstanceNameSize) - break; - - memcpy(P, SvcInstance->ClassName, ClassNameSize * sizeof(WCHAR)); P += ClassNameSize; - *Buffer++ = L' '; - memcpy(P, SvcInstance->InstanceName, InstanceNameSize * sizeof(WCHAR)); P += InstanceNameSize; - } - - LeaveCriticalSection(&SvcInstanceLock); - - *PSize = (ULONG)(P - Buffer); - - return STATUS_SUCCESS; -} - NTSTATUS SvcInstanceGetInfo(HANDLE ClientToken, PWSTR ClassName, PWSTR InstanceName, PWSTR Buffer, PULONG PSize) { @@ -453,6 +419,40 @@ exit: return Result; } +NTSTATUS SvcInstanceGetNameList(HANDLE ClientToken, + PWSTR Buffer, PULONG PSize) +{ + SVC_INSTANCE *SvcInstance; + PLIST_ENTRY ListEntry; + PWSTR P = Buffer, BufferEnd = P + *PSize / sizeof(WCHAR); + ULONG ClassNameSize, InstanceNameSize; + + EnterCriticalSection(&SvcInstanceLock); + + for (ListEntry = SvcInstanceList.Flink; + &SvcInstanceList != ListEntry; + ListEntry = ListEntry->Flink) + { + SvcInstance = CONTAINING_RECORD(ListEntry, SVC_INSTANCE, ListEntry); + + ClassNameSize = lstrlenW(SvcInstance->ClassName) + 1; + InstanceNameSize = lstrlenW(SvcInstance->InstanceName) + 1; + + if (BufferEnd < P + ClassNameSize + InstanceNameSize) + break; + + memcpy(P, SvcInstance->ClassName, ClassNameSize * sizeof(WCHAR)); P += ClassNameSize; + *Buffer++ = L' '; + memcpy(P, SvcInstance->InstanceName, InstanceNameSize * sizeof(WCHAR)); P += InstanceNameSize; + } + + LeaveCriticalSection(&SvcInstanceLock); + + *PSize = (ULONG)(P - Buffer); + + return STATUS_SUCCESS; +} + static HANDLE SvcThread, SvcEvent; static HANDLE SvcPipe = INVALID_HANDLE_VALUE; static OVERLAPPED SvcOverlapped; @@ -735,13 +735,6 @@ static VOID SvcPipeTransact(HANDLE ClientToken, PWSTR PipeBuf, PULONG PSize) SvcPipeTransactResult(Result, PipeBuf, PSize); break; - case LauncherSvcInstanceList: - *PSize = PIPE_BUFFER_SIZE - 1; - Result = SvcInstanceGetNameList(ClientToken, PipeBuf + 1, PSize); - - SvcPipeTransactResult(Result, PipeBuf, PSize); - break; - case LauncherSvcInstanceInfo: ClassName = SvcPipeTransactGetPart(&P, PipeBufEnd); InstanceName = SvcPipeTransactGetPart(&P, PipeBufEnd); @@ -756,6 +749,13 @@ static VOID SvcPipeTransact(HANDLE ClientToken, PWSTR PipeBuf, PULONG PSize) SvcPipeTransactResult(Result, PipeBuf, PSize); break; + case LauncherSvcInstanceList: + *PSize = PIPE_BUFFER_SIZE - 1; + Result = SvcInstanceGetNameList(ClientToken, PipeBuf + 1, PSize); + + SvcPipeTransactResult(Result, PipeBuf, PSize); + break; + default: SvcPipeTransactResult(STATUS_INVALID_PARAMETER, PipeBuf, PSize); break;