Author: Michał Górny Date: 2021-09-08T10:58:12+02:00 New Revision: 39a2449ea1333886a9c9104b5afb4ff9c4932403
URL: https://github.com/llvm/llvm-project/commit/39a2449ea1333886a9c9104b5afb4ff9c4932403 DIFF: https://github.com/llvm/llvm-project/commit/39a2449ea1333886a9c9104b5afb4ff9c4932403.diff LOG: [lldb] [Commands] Fix reporting errors in 'platform file read/write' Fix 'platform file read' and 'platform file write' commands to correctly detect erraneous return and report it as such. Currently, errors were implicitly printed as a return value of -1, and the commands were assumed to be successful. Differential Revision: https://reviews.llvm.org/D107665 Added: Modified: lldb/source/Commands/CommandObjectPlatform.cpp lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py Removed: ################################################################################ diff --git a/lldb/source/Commands/CommandObjectPlatform.cpp b/lldb/source/Commands/CommandObjectPlatform.cpp index 68e1fa6c07b44..8dd0512141645 100644 --- a/lldb/source/Commands/CommandObjectPlatform.cpp +++ b/lldb/source/Commands/CommandObjectPlatform.cpp @@ -589,11 +589,15 @@ class CommandObjectPlatformFRead : public CommandObjectParsed { } std::string buffer(m_options.m_count, 0); Status error; - uint32_t retcode = platform_sp->ReadFile( + uint64_t retcode = platform_sp->ReadFile( fd, m_options.m_offset, &buffer[0], m_options.m_count, error); - result.AppendMessageWithFormat("Return = %d\n", retcode); - result.AppendMessageWithFormat("Data = \"%s\"\n", buffer.c_str()); - result.SetStatus(eReturnStatusSuccessFinishResult); + if (retcode != UINT64_MAX) { + result.AppendMessageWithFormat("Return = %" PRIu64 "\n", retcode); + result.AppendMessageWithFormat("Data = \"%s\"\n", buffer.c_str()); + result.SetStatus(eReturnStatusSuccessFinishResult); + } else { + result.AppendError(error.AsCString()); + } } else { result.AppendError("no platform currently selected\n"); } @@ -678,11 +682,15 @@ class CommandObjectPlatformFWrite : public CommandObjectParsed { cmd_line); return result.Succeeded(); } - uint32_t retcode = + uint64_t retcode = platform_sp->WriteFile(fd, m_options.m_offset, &m_options.m_data[0], m_options.m_data.size(), error); - result.AppendMessageWithFormat("Return = %d\n", retcode); - result.SetStatus(eReturnStatusSuccessFinishResult); + if (retcode != UINT64_MAX) { + result.AppendMessageWithFormat("Return = %" PRIu64 "\n", retcode); + result.SetStatus(eReturnStatusSuccessFinishResult); + } else { + result.AppendError(error.AsCString()); + } } else { result.AppendError("no platform currently selected\n"); } diff --git a/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py b/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py index 264e11032ecaf..4ba23870e4a0e 100644 --- a/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py +++ b/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py @@ -60,11 +60,12 @@ def vFile(self, packet): self.match("platform file open /some/file.txt -v 0755", [r"error: Invalid argument"], error=True) - # TODO: fix the commands to fail on unsuccessful result self.match("platform file read 16 -o 11 -c 13", - [r"Return = -1\nData = \"\""]) + [r"error: Invalid argument"], + error=True) self.match("platform file write 16 -o 11 -d teststring", - [r"Return = -1"]) + [r"error: Invalid argument"], + error=True) self.match("platform file close 16", [r"error: Invalid argument"], error=True) _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits