From 2c51251cb7a43dc425a47253f954aa98de80f401 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Fri, 13 May 2016 09:55:27 -0700 Subject: [PATCH] launcher, launchctl: refactoring --- src/launcher/launchctl.c | 9 ++++++++- src/launcher/launcher.c | 17 ++++++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/launcher/launchctl.c b/src/launcher/launchctl.c index bffd8e74..ded89b60 100644 --- a/src/launcher/launchctl.c +++ b/src/launcher/launchctl.c @@ -80,8 +80,15 @@ static int call_pipe_and_report(PWSTR PipeBuf, ULONG SendSize, ULONG RecvSize) { for (PWSTR P = PipeBuf, PipeBufEnd = P + BytesTransferred / sizeof(WCHAR); PipeBufEnd > P; P++) - if (L'\0' == *P) + switch (*P) + { + case L'\0': *P = L'\n'; + break; + case L'\1': + *P = L' '; + break; + } if (BytesTransferred < RecvSize) PipeBuf[BytesTransferred / sizeof(WCHAR)] = L'\0'; diff --git a/src/launcher/launcher.c b/src/launcher/launcher.c index 00db62e2..47ddf012 100644 --- a/src/launcher/launcher.c +++ b/src/launcher/launcher.c @@ -378,9 +378,12 @@ NTSTATUS SvcInstanceGetInfo(HANDLE ClientToken, PWSTR ClassName, PWSTR InstanceName, PWSTR Buffer, PULONG PSize) { SVC_INSTANCE *SvcInstance; + PWSTR P = Buffer; ULONG ClassNameSize, InstanceNameSize, CommandLineSize; NTSTATUS Result; + *PSize = 0; + EnterCriticalSection(&SvcInstanceLock); SvcInstance = SvcInstanceLookup(ClassName, InstanceName); @@ -404,12 +407,11 @@ NTSTATUS SvcInstanceGetInfo(HANDLE ClientToken, goto exit; } - memcpy(Buffer, SvcInstance->ClassName, - ClassNameSize * sizeof(WCHAR)); - memcpy(Buffer + ClassNameSize, SvcInstance->InstanceName, - InstanceNameSize * sizeof(WCHAR)); - memcpy(Buffer + ClassNameSize + InstanceNameSize, SvcInstance->CommandLine, - CommandLineSize * sizeof(WCHAR)); + memcpy(P, SvcInstance->ClassName, ClassNameSize * sizeof(WCHAR)); P += ClassNameSize; + memcpy(P, SvcInstance->InstanceName, InstanceNameSize * sizeof(WCHAR)); P += InstanceNameSize; + memcpy(P, SvcInstance->CommandLine, CommandLineSize * sizeof(WCHAR)); P += CommandLineSize; + + *PSize = (ULONG)(P - Buffer); Result = STATUS_SUCCESS; @@ -441,8 +443,9 @@ NTSTATUS SvcInstanceGetNameList(HANDLE ClientToken, if (BufferEnd < P + ClassNameSize + InstanceNameSize) break; + ClassNameSize--; memcpy(P, SvcInstance->ClassName, ClassNameSize * sizeof(WCHAR)); P += ClassNameSize; - *Buffer++ = L' '; + *Buffer++ = L'\1'; memcpy(P, SvcInstance->InstanceName, InstanceNameSize * sizeof(WCHAR)); P += InstanceNameSize; }