diff --git a/adb/adb_listeners.cpp b/adb/adb_listeners.cpp index a142384be..fecf452c1 100644 --- a/adb/adb_listeners.cpp +++ b/adb/adb_listeners.cpp @@ -29,6 +29,7 @@ #include "socket_spec.h" #include "sysdeps.h" +#include "sysdeps/memory.h" #include "transport.h" // A listener is an entity which binds to a local port and, upon receiving a connection on that @@ -203,7 +204,7 @@ InstallStatus install_listener(const std::string& local_name, const char* connec } } - std::unique_ptr listener(new alistener(local_name, connect_to)); + auto listener = std::make_unique(local_name, connect_to); int resolved = 0; listener->fd = socket_spec_listen(listener->local_name, error, &resolved); diff --git a/adb/client/commandline.cpp b/adb/client/commandline.cpp index d126f52a5..34930c6aa 100644 --- a/adb/client/commandline.cpp +++ b/adb/client/commandline.cpp @@ -61,6 +61,7 @@ #include "services.h" #include "shell_service.h" #include "sysdeps/chrono.h" +#include "sysdeps/memory.h" static int install_app(int argc, const char** argv); static int install_multiple_app(int argc, const char** argv); @@ -263,7 +264,7 @@ int read_and_dump(int fd, bool use_shell_protocol = false, char raw_buffer[BUFSIZ]; char* buffer_ptr = raw_buffer; if (use_shell_protocol) { - protocol.reset(new ShellProtocol(fd)); + protocol = std::make_unique(fd); if (!protocol) { LOG(ERROR) << "failed to allocate memory for ShellProtocol object"; return 1; @@ -630,7 +631,7 @@ static int RemoteShell(bool use_shell_protocol, const std::string& type_arg, args->raw_stdin = raw_stdin; args->escape_char = escape_char; if (use_shell_protocol) { - args->protocol.reset(new ShellProtocol(args->write_fd)); + args->protocol = std::make_unique(args->write_fd); } if (raw_stdin) stdin_raw_init(); diff --git a/adb/daemon/shell_service.cpp b/adb/daemon/shell_service.cpp index f9f80c03d..c04ceafa7 100644 --- a/adb/daemon/shell_service.cpp +++ b/adb/daemon/shell_service.cpp @@ -372,8 +372,8 @@ bool Subprocess::ForkAndExec(std::string* error) { } D("protocol FD = %d", protocol_sfd_.get()); - input_.reset(new ShellProtocol(protocol_sfd_)); - output_.reset(new ShellProtocol(protocol_sfd_)); + input_ = std::make_unique(protocol_sfd_); + output_ = std::make_unique(protocol_sfd_); if (!input_ || !output_) { *error = "failed to allocate shell protocol objects"; kill(pid_, SIGKILL); diff --git a/adb/fdevent_test.cpp b/adb/fdevent_test.cpp index 63cc4d176..dadae5ab7 100644 --- a/adb/fdevent_test.cpp +++ b/adb/fdevent_test.cpp @@ -99,7 +99,7 @@ static void FdEventThreadFunc(ThreadArg* arg) { std::vector> fd_handlers; for (size_t i = 0; i < read_fds.size(); ++i) { - fd_handlers.push_back(std::unique_ptr(new FdHandler(read_fds[i], write_fds[i]))); + fd_handlers.push_back(std::make_unique(read_fds[i], write_fds[i])); } fdevent_loop(); diff --git a/adb/sysdeps/memory.h b/adb/sysdeps/memory.h new file mode 100644 index 000000000..0e4c509f6 --- /dev/null +++ b/adb/sysdeps/memory.h @@ -0,0 +1,36 @@ +#pragma once + +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#if defined(_WIN32) +// We don't have C++14 on Windows yet. +// Reimplement std::make_unique ourselves until we do. + +namespace std { + +template +typename std::enable_if::value, std::unique_ptr>::type make_unique( + Args&&... args) { + return std::unique_ptr(new T(std::forward(args)...)); +} + +} // namespace std + +#endif diff --git a/adb/transport.cpp b/adb/transport.cpp index 3329f0f19..37b56e28f 100644 --- a/adb/transport.cpp +++ b/adb/transport.cpp @@ -17,6 +17,8 @@ #define TRACE_TAG TRANSPORT #include "sysdeps.h" +#include "sysdeps/memory.h" + #include "transport.h" #include @@ -79,7 +81,7 @@ void BlockingConnectionAdapter::Start() { read_thread_ = std::thread([this]() { LOG(INFO) << this->transport_name_ << ": read thread spawning"; while (true) { - std::unique_ptr packet(new apacket()); + auto packet = std::make_unique(); if (!underlying_->Read(packet.get())) { PLOG(INFO) << this->transport_name_ << ": read failed"; break; diff --git a/adb/transport_local.cpp b/adb/transport_local.cpp index ff395dc7e..c09fcb76d 100644 --- a/adb/transport_local.cpp +++ b/adb/transport_local.cpp @@ -45,6 +45,7 @@ #include "adb_unique_fd.h" #include "adb_utils.h" #include "sysdeps/chrono.h" +#include "sysdeps/memory.h" #if ADB_HOST @@ -450,9 +451,8 @@ int init_socket_transport(atransport* t, int s, int adb_port, int local) { #if ADB_HOST // Emulator connection. if (local) { - std::unique_ptr emulator_connection( - new EmulatorConnection(std::move(fd), adb_port)); - t->connection.reset(new BlockingConnectionAdapter(std::move(emulator_connection))); + auto emulator_connection = std::make_unique(std::move(fd), adb_port); + t->connection = std::make_unique(std::move(emulator_connection)); std::lock_guard lock(local_transports_lock); atransport* existing_transport = find_emulator_transport_by_adb_port_locked(adb_port); if (existing_transport != NULL) { @@ -471,7 +471,7 @@ int init_socket_transport(atransport* t, int s, int adb_port, int local) { #endif // Regular tcp connection. - std::unique_ptr fd_connection(new FdConnection(std::move(fd))); - t->connection.reset(new BlockingConnectionAdapter(std::move(fd_connection))); + auto fd_connection = std::make_unique(std::move(fd)); + t->connection = std::make_unique(std::move(fd_connection)); return fail; } diff --git a/adb/transport_usb.cpp b/adb/transport_usb.cpp index 33e00a1f4..e9a75cd71 100644 --- a/adb/transport_usb.cpp +++ b/adb/transport_usb.cpp @@ -17,6 +17,7 @@ #define TRACE_TAG TRANSPORT #include "sysdeps.h" +#include "sysdeps/memory.h" #include "transport.h" #include @@ -174,8 +175,8 @@ void UsbConnection::Close() { void init_usb_transport(atransport* t, usb_handle* h) { D("transport: usb"); - std::unique_ptr connection(new UsbConnection(h)); - t->connection.reset(new BlockingConnectionAdapter(std::move(connection))); + auto connection = std::make_unique(h); + t->connection = std::make_unique(std::move(connection)); t->type = kTransportUsb; }