From f21edf3edd778f723868ae0618c3351a78112323 Mon Sep 17 00:00:00 2001 From: Henry Daitx Date: Fri, 30 Nov 2018 18:02:43 +0000 Subject: [PATCH] Fix adb not correctly reading return code from DeployAgent Certain error conditions were getting lost because adb was wrongly reading DeployAgent's return code as always 0. Test: mm -j 72 Test: adb install -r --fastdeploy --force-agent --local-agent /mnt/raid/boat-attack-apk/boat-attack-swappy.apk Bug: 120197330 Change-Id: If835fd6ca2051be8e5ff6c957e08b1e458053989 --- adb/client/fastdeploy.cpp | 7 ++++--- adb/client/fastdeploycallbacks.cpp | 33 +++++++----------------------- adb/client/fastdeploycallbacks.h | 3 +-- 3 files changed, 12 insertions(+), 31 deletions(-) diff --git a/adb/client/fastdeploy.cpp b/adb/client/fastdeploy.cpp index 45f3cca90..e82f15a7d 100644 --- a/adb/client/fastdeploy.cpp +++ b/adb/client/fastdeploy.cpp @@ -228,11 +228,12 @@ void extract_metadata(const char* apkPath, FILE* outputFp) { android::base::StringPrintf(kAgentExtractCommandPattern, packageName.c_str()); std::vector extractErrorBuffer; - int statusCode; - DeployAgentFileCallback cb(outputFp, &extractErrorBuffer, &statusCode); + DeployAgentFileCallback cb(outputFp, &extractErrorBuffer); int returnCode = send_shell_command(extractCommand, false, &cb); if (returnCode != 0) { - error_exit("Executing %s returned %d", extractCommand.c_str(), returnCode); + fprintf(stderr, "Executing %s returned %d\n", extractCommand.c_str(), returnCode); + fprintf(stderr, "%*s\n", int(extractErrorBuffer.size()), extractErrorBuffer.data()); + error_exit("Aborting"); } } diff --git a/adb/client/fastdeploycallbacks.cpp b/adb/client/fastdeploycallbacks.cpp index 6c9a21fde..23a0aca59 100644 --- a/adb/client/fastdeploycallbacks.cpp +++ b/adb/client/fastdeploycallbacks.cpp @@ -35,8 +35,7 @@ static void appendBuffer(std::vector* buffer, const char* input, int lengt class DeployAgentBufferCallback : public StandardStreamsCallbackInterface { public: - DeployAgentBufferCallback(std::vector* outBuffer, std::vector* errBuffer, - int* statusCode); + DeployAgentBufferCallback(std::vector* outBuffer, std::vector* errBuffer); virtual void OnStdout(const char* buffer, int length); virtual void OnStderr(const char* buffer, int length); @@ -45,27 +44,17 @@ class DeployAgentBufferCallback : public StandardStreamsCallbackInterface { private: std::vector* mpOutBuffer; std::vector* mpErrBuffer; - int* mpStatusCode; }; int capture_shell_command(const char* command, std::vector* outBuffer, std::vector* errBuffer) { - int statusCode; - DeployAgentBufferCallback cb(outBuffer, errBuffer, &statusCode); - int ret = send_shell_command(command, false, &cb); - - if (ret == 0) { - return statusCode; - } else { - return ret; - } + DeployAgentBufferCallback cb(outBuffer, errBuffer); + return send_shell_command(command, false, &cb); } -DeployAgentFileCallback::DeployAgentFileCallback(FILE* outputFile, std::vector* errBuffer, - int* statusCode) { +DeployAgentFileCallback::DeployAgentFileCallback(FILE* outputFile, std::vector* errBuffer) { mpOutFile = outputFile; mpErrBuffer = errBuffer; - mpStatusCode = statusCode; mBytesWritten = 0; } @@ -84,10 +73,7 @@ void DeployAgentFileCallback::OnStderr(const char* buffer, int length) { } int DeployAgentFileCallback::Done(int status) { - if (mpStatusCode != NULL) { - *mpStatusCode = status; - } - return 0; + return status; } int DeployAgentFileCallback::getBytesWritten() { @@ -95,11 +81,9 @@ int DeployAgentFileCallback::getBytesWritten() { } DeployAgentBufferCallback::DeployAgentBufferCallback(std::vector* outBuffer, - std::vector* errBuffer, - int* statusCode) { + std::vector* errBuffer) { mpOutBuffer = outBuffer; mpErrBuffer = errBuffer; - mpStatusCode = statusCode; } void DeployAgentBufferCallback::OnStdout(const char* buffer, int length) { @@ -111,8 +95,5 @@ void DeployAgentBufferCallback::OnStderr(const char* buffer, int length) { } int DeployAgentBufferCallback::Done(int status) { - if (mpStatusCode != NULL) { - *mpStatusCode = status; - } - return 0; + return status; } diff --git a/adb/client/fastdeploycallbacks.h b/adb/client/fastdeploycallbacks.h index b428b50bb..7e049c5ae 100644 --- a/adb/client/fastdeploycallbacks.h +++ b/adb/client/fastdeploycallbacks.h @@ -21,7 +21,7 @@ class DeployAgentFileCallback : public StandardStreamsCallbackInterface { public: - DeployAgentFileCallback(FILE* outputFile, std::vector* errBuffer, int* statusCode); + DeployAgentFileCallback(FILE* outputFile, std::vector* errBuffer); virtual void OnStdout(const char* buffer, int length); virtual void OnStderr(const char* buffer, int length); @@ -33,7 +33,6 @@ class DeployAgentFileCallback : public StandardStreamsCallbackInterface { FILE* mpOutFile; std::vector* mpErrBuffer; int mBytesWritten; - int* mpStatusCode; }; int capture_shell_command(const char* command, std::vector* outBuffer,