[Lldb-commits] [lldb] r238442 - Refactor AdbClient and make PlatformAndroid::GetFile to use "adb pull".
Oleksiy Vyalov
ovyalov at google.com
Fri May 29 08:43:01 PDT 2015
Hi Tamas,
thanks for letting me know - will fix this problem shortly.
Presumably, for relative path we can still use adb but concatenate input
path with working directory.
On Fri, May 29, 2015 at 8:20 AM, Tamas Berghammer <tberghammer at google.com>
wrote:
> Hi Oleksiy,
>
> This change caused some regression on android because in some case GetFile
> is called with a remote path relative to the current working directory
> selected through lldb and it isn't handled by adb. Please create a fix for
> it or revert this CL.
>
> Thanks,
> Tamas
>
> On Thu, May 28, 2015 at 6:42 PM, Oleksiy Vyalov <ovyalov at google.com>
> wrote:
>
>> Author: ovyalov
>> Date: Thu May 28 12:42:48 2015
>> New Revision: 238442
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=238442&view=rev
>> Log:
>> Refactor AdbClient and make PlatformAndroid::GetFile to use "adb pull".
>>
>> http://reviews.llvm.org/D10082
>>
>>
>> Modified:
>> lldb/trunk/source/Plugins/Platform/Android/AdbClient.cpp
>> lldb/trunk/source/Plugins/Platform/Android/AdbClient.h
>> lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.cpp
>> lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.h
>>
>> Modified: lldb/trunk/source/Plugins/Platform/Android/AdbClient.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/Android/AdbClient.cpp?rev=238442&r1=238441&r2=238442&view=diff
>>
>> ==============================================================================
>> --- lldb/trunk/source/Plugins/Platform/Android/AdbClient.cpp (original)
>> +++ lldb/trunk/source/Plugins/Platform/Android/AdbClient.cpp Thu May 28
>> 12:42:48 2015
>> @@ -250,23 +250,21 @@ AdbClient::SwitchDeviceTransport ()
>> }
>>
>> Error
>> -AdbClient::PullFile (const char *remote_file, const char *local_file)
>> +AdbClient::PullFile (const FileSpec &remote_file, const FileSpec
>> &local_file)
>> {
>> - auto error = SwitchDeviceTransport ();
>> + auto error = StartSync ();
>> if (error.Fail ())
>> - return Error ("Failed to switch to device transport: %s",
>> error.AsCString ());
>> -
>> - error = Sync ();
>> - if (error.Fail ())
>> - return Error ("Sync failed: %s", error.AsCString ());
>> + return error;
>>
>> - llvm::FileRemover local_file_remover (local_file);
>> + const auto local_file_path = local_file.GetPath ();
>> + llvm::FileRemover local_file_remover (local_file_path.c_str ());
>>
>> - std::ofstream dst (local_file, std::ios::out | std::ios::binary);
>> + std::ofstream dst (local_file_path, std::ios::out |
>> std::ios::binary);
>> if (!dst.is_open ())
>> - return Error ("Unable to open local file %s", local_file);
>> + return Error ("Unable to open local file %s",
>> local_file_path.c_str());
>>
>> - error = SendSyncRequest ("RECV", strlen(remote_file), remote_file);
>> + const auto remote_file_path = remote_file.GetPath (false);
>> + error = SendSyncRequest ("RECV", remote_file_path.length (),
>> remote_file_path.c_str ());
>> if (error.Fail ())
>> return error;
>>
>> @@ -286,22 +284,19 @@ AdbClient::PullFile (const char *remote_
>> }
>>
>> Error
>> -AdbClient::PushFile (const lldb_private::FileSpec& source, const
>> lldb_private::FileSpec& destination)
>> +AdbClient::PushFile (const FileSpec &local_file, const FileSpec
>> &remote_file)
>> {
>> - auto error = SwitchDeviceTransport ();
>> + auto error = StartSync ();
>> if (error.Fail ())
>> - return Error ("Failed to switch to device transport: %s",
>> error.AsCString ());
>> -
>> - error = Sync ();
>> - if (error.Fail ())
>> - return Error ("Sync failed: %s", error.AsCString ());
>> + return error;
>>
>> - std::ifstream src (source.GetPath().c_str(), std::ios::in |
>> std::ios::binary);
>> + const auto local_file_path (local_file.GetPath ());
>> + std::ifstream src (local_file_path.c_str(), std::ios::in |
>> std::ios::binary);
>> if (!src.is_open ())
>> - return Error ("Unable to open local file %s",
>> source.GetPath().c_str());
>> + return Error ("Unable to open local file %s",
>> local_file_path.c_str());
>>
>> std::stringstream file_description;
>> - file_description << destination.GetPath(false).c_str() << "," <<
>> kDefaultMode;
>> + file_description << remote_file.GetPath(false).c_str() << "," <<
>> kDefaultMode;
>> std::string file_description_str = file_description.str();
>> error = SendSyncRequest ("SEND", file_description_str.length(),
>> file_description_str.c_str());
>> if (error.Fail ())
>> @@ -315,14 +310,28 @@ AdbClient::PushFile (const lldb_private:
>> if (error.Fail ())
>> return Error ("Failed to send file chunk: %s",
>> error.AsCString ());
>> }
>> - error = SendSyncRequest("DONE",
>> source.GetModificationTime().seconds(), nullptr);
>> + error = SendSyncRequest("DONE",
>> local_file.GetModificationTime().seconds(), nullptr);
>> if (error.Fail ())
>> return error;
>> error = ReadResponseStatus();
>> // If there was an error reading the source file, finish the adb file
>> // transfer first so that adb isn't expecting any more data.
>> if (src.bad())
>> - return Error ("Failed read on %s", source.GetPath().c_str());
>> + return Error ("Failed read on %s", local_file_path.c_str());
>> + return error;
>> +}
>> +
>> +Error
>> +AdbClient::StartSync ()
>> +{
>> + auto error = SwitchDeviceTransport ();
>> + if (error.Fail ())
>> + return Error ("Failed to switch to device transport: %s",
>> error.AsCString ());
>> +
>> + error = Sync ();
>> + if (error.Fail ())
>> + return Error ("Sync failed: %s", error.AsCString ());
>> +
>> return error;
>> }
>>
>>
>> Modified: lldb/trunk/source/Plugins/Platform/Android/AdbClient.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/Android/AdbClient.h?rev=238442&r1=238441&r2=238442&view=diff
>>
>> ==============================================================================
>> --- lldb/trunk/source/Plugins/Platform/Android/AdbClient.h (original)
>> +++ lldb/trunk/source/Plugins/Platform/Android/AdbClient.h Thu May 28
>> 12:42:48 2015
>> @@ -25,6 +25,9 @@
>> #include "lldb/Host/ConnectionFileDescriptor.h"
>>
>> namespace lldb_private {
>> +
>> +class FileSpec;
>> +
>> namespace platform_android {
>>
>> class AdbClient
>> @@ -51,10 +54,10 @@ public:
>> DeletePortForwarding (const uint16_t port);
>>
>> Error
>> - PullFile (const char *remote_file, const char *local_file);
>> + PullFile (const FileSpec &remote_file, const FileSpec &local_file);
>>
>> Error
>> - PushFile (const lldb_private::FileSpec& source, const
>> lldb_private::FileSpec& destination);
>> + PushFile (const FileSpec &local_file, const FileSpec &remote_file);
>>
>> private:
>> Error
>> @@ -91,6 +94,9 @@ private:
>> Sync ();
>>
>> Error
>> + StartSync ();
>> +
>> + Error
>> PullFileChunk (std::vector<char> &buffer, bool &eof);
>>
>> Error
>>
>> Modified: lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.cpp?rev=238442&r1=238441&r2=238442&view=diff
>>
>> ==============================================================================
>> --- lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.cpp
>> (original)
>> +++ lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.cpp Thu
>> May 28 12:42:48 2015
>> @@ -207,9 +207,21 @@ PlatformAndroid::ConnectRemote(Args& arg
>> return error;
>> }
>>
>> -lldb_private::Error
>> -PlatformAndroid::PutFile (const lldb_private::FileSpec& source,
>> - const lldb_private::FileSpec& destination,
>> +Error
>> +PlatformAndroid::GetFile (const FileSpec& source,
>> + const FileSpec& destination)
>> +{
>> + if (!IsHost() && m_remote_platform_sp)
>> + {
>> + AdbClient adb (m_device_id);
>> + return adb.PullFile(source, destination);
>> + }
>> + return PlatformLinux::GetFile(source, destination);
>> +}
>> +
>> +Error
>> +PlatformAndroid::PutFile (const FileSpec& source,
>> + const FileSpec& destination,
>> uint32_t uid,
>> uint32_t gid)
>> {
>> @@ -237,6 +249,5 @@ PlatformAndroid::DownloadModuleSlice (co
>> if (src_offset != 0)
>> return Error ("Invalid offset - %" PRIu64, src_offset);
>>
>> - AdbClient adb (m_device_id);
>> - return adb.PullFile (src_file_spec.GetPath (false).c_str (),
>> dst_file_spec.GetPath ().c_str ());
>> + return GetFile (src_file_spec, dst_file_spec);
>> }
>>
>> Modified: lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.h?rev=238442&r1=238441&r2=238442&view=diff
>>
>> ==============================================================================
>> --- lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.h
>> (original)
>> +++ lldb/trunk/source/Plugins/Platform/Android/PlatformAndroid.h Thu May
>> 28 12:42:48 2015
>> @@ -64,9 +64,13 @@ namespace platform_android {
>> Error
>> ConnectRemote (Args& args) override;
>>
>> - lldb_private::Error
>> - PutFile (const lldb_private::FileSpec& source,
>> - const lldb_private::FileSpec& destination,
>> + Error
>> + GetFile (const FileSpec& source,
>> + const FileSpec& destination) override;
>> +
>> + Error
>> + PutFile (const FileSpec& source,
>> + const FileSpec& destination,
>> uint32_t uid = UINT32_MAX,
>> uint32_t gid = UINT32_MAX) override;
>>
>>
>>
>> _______________________________________________
>> lldb-commits mailing list
>> lldb-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
>>
>
>
--
Oleksiy Vyalov | Software Engineer | ovyalov at google.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150529/871c9995/attachment.html>
More information about the lldb-commits
mailing list