Loading adb/client/adb_install.cpp +32 −27 Original line number Original line Diff line number Diff line Loading @@ -638,20 +638,24 @@ int install_multi_package(int argc, const char** argv) { fprintf(stdout, "Created child session ID %d.\n", session_id); fprintf(stdout, "Created child session ID %d.\n", session_id); session_ids.push_back(session_id); session_ids.push_back(session_id); // Support splitAPKs by allowing the notation split1.apk:split2.apk:split3.apk as argument. std::vector<std::string> splits = android::base::Split(file, ":"); for (const std::string& split : splits) { struct stat sb; struct stat sb; if (stat(file, &sb) == -1) { if (stat(split.c_str(), &sb) == -1) { fprintf(stderr, "adb: failed to stat %s: %s\n", file, strerror(errno)); fprintf(stderr, "adb: failed to stat %s: %s\n", split.c_str(), strerror(errno)); goto finalize_multi_package_session; goto finalize_multi_package_session; } } std::string cmd = std::string cmd = android::base::StringPrintf( android::base::StringPrintf("%s install-write -S %" PRIu64 " %d %d_%s -", "%s install-write -S %" PRIu64 " %d %d_%s -", install_cmd.c_str(), install_cmd.c_str(), static_cast<uint64_t>(sb.st_size), static_cast<uint64_t>(sb.st_size), session_id, i, session_id, i, android::base::Basename(file).c_str()); android::base::Basename(split).c_str()); unique_fd local_fd(adb_open(file, O_RDONLY | O_CLOEXEC)); unique_fd local_fd(adb_open(split.c_str(), O_RDONLY | O_CLOEXEC)); if (local_fd < 0) { if (local_fd < 0) { fprintf(stderr, "adb: failed to open %s: %s\n", file, strerror(errno)); fprintf(stderr, "adb: failed to open %s: %s\n", split.c_str(), strerror(errno)); goto finalize_multi_package_session; goto finalize_multi_package_session; } } Loading @@ -666,11 +670,11 @@ int install_multi_package(int argc, const char** argv) { read_status_line(remote_fd.get(), buf, sizeof(buf)); read_status_line(remote_fd.get(), buf, sizeof(buf)); if (strncmp("Success", buf, 7)) { if (strncmp("Success", buf, 7)) { fprintf(stderr, "adb: failed to write %s\n", file); fprintf(stderr, "adb: failed to write %s\n", split.c_str()); fputs(buf, stderr); fputs(buf, stderr); goto finalize_multi_package_session; goto finalize_multi_package_session; } } } all_session_ids += android::base::StringPrintf(" %d", session_id); all_session_ids += android::base::StringPrintf(" %d", session_id); } } Loading Loading @@ -718,6 +722,7 @@ finalize_multi_package_session: fputs(buf, stderr); fputs(buf, stderr); } } session_ids.push_back(parent_session_id); // try to abandon all remaining sessions // try to abandon all remaining sessions for (std::size_t i = 0; i < session_ids.size(); i++) { for (std::size_t i = 0; i < session_ids.size(); i++) { service = android::base::StringPrintf("%s install-abandon %d", install_cmd.c_str(), service = android::base::StringPrintf("%s install-abandon %d", install_cmd.c_str(), Loading Loading
adb/client/adb_install.cpp +32 −27 Original line number Original line Diff line number Diff line Loading @@ -638,20 +638,24 @@ int install_multi_package(int argc, const char** argv) { fprintf(stdout, "Created child session ID %d.\n", session_id); fprintf(stdout, "Created child session ID %d.\n", session_id); session_ids.push_back(session_id); session_ids.push_back(session_id); // Support splitAPKs by allowing the notation split1.apk:split2.apk:split3.apk as argument. std::vector<std::string> splits = android::base::Split(file, ":"); for (const std::string& split : splits) { struct stat sb; struct stat sb; if (stat(file, &sb) == -1) { if (stat(split.c_str(), &sb) == -1) { fprintf(stderr, "adb: failed to stat %s: %s\n", file, strerror(errno)); fprintf(stderr, "adb: failed to stat %s: %s\n", split.c_str(), strerror(errno)); goto finalize_multi_package_session; goto finalize_multi_package_session; } } std::string cmd = std::string cmd = android::base::StringPrintf( android::base::StringPrintf("%s install-write -S %" PRIu64 " %d %d_%s -", "%s install-write -S %" PRIu64 " %d %d_%s -", install_cmd.c_str(), install_cmd.c_str(), static_cast<uint64_t>(sb.st_size), static_cast<uint64_t>(sb.st_size), session_id, i, session_id, i, android::base::Basename(file).c_str()); android::base::Basename(split).c_str()); unique_fd local_fd(adb_open(file, O_RDONLY | O_CLOEXEC)); unique_fd local_fd(adb_open(split.c_str(), O_RDONLY | O_CLOEXEC)); if (local_fd < 0) { if (local_fd < 0) { fprintf(stderr, "adb: failed to open %s: %s\n", file, strerror(errno)); fprintf(stderr, "adb: failed to open %s: %s\n", split.c_str(), strerror(errno)); goto finalize_multi_package_session; goto finalize_multi_package_session; } } Loading @@ -666,11 +670,11 @@ int install_multi_package(int argc, const char** argv) { read_status_line(remote_fd.get(), buf, sizeof(buf)); read_status_line(remote_fd.get(), buf, sizeof(buf)); if (strncmp("Success", buf, 7)) { if (strncmp("Success", buf, 7)) { fprintf(stderr, "adb: failed to write %s\n", file); fprintf(stderr, "adb: failed to write %s\n", split.c_str()); fputs(buf, stderr); fputs(buf, stderr); goto finalize_multi_package_session; goto finalize_multi_package_session; } } } all_session_ids += android::base::StringPrintf(" %d", session_id); all_session_ids += android::base::StringPrintf(" %d", session_id); } } Loading Loading @@ -718,6 +722,7 @@ finalize_multi_package_session: fputs(buf, stderr); fputs(buf, stderr); } } session_ids.push_back(parent_session_id); // try to abandon all remaining sessions // try to abandon all remaining sessions for (std::size_t i = 0; i < session_ids.size(); i++) { for (std::size_t i = 0; i < session_ids.size(); i++) { service = android::base::StringPrintf("%s install-abandon %d", install_cmd.c_str(), service = android::base::StringPrintf("%s install-abandon %d", install_cmd.c_str(), Loading