提交 a0662883 编写于 作者: S Simon Fels

Check system commands for result and return error if needed

上级 fce7466f
...@@ -37,6 +37,17 @@ PlatformApi::PlatformApi() { ...@@ -37,6 +37,17 @@ PlatformApi::PlatformApi() {
PlatformApi::~PlatformApi() { PlatformApi::~PlatformApi() {
} }
void PlatformApi::wait_for_process(core::posix::ChildProcess &process,
anbox::protobuf::bridge::Void *response) {
const auto result = process.wait_for(core::posix::wait::Flags::untraced);
if (result.status != core::posix::wait::Result::Status::exited ||
result.detail.if_exited.status != core::posix::exit::Status::success) {
response->set_error("Failed to install application");
// FIXME once we add proper error codes/domains we need to add structured error
// info the response here.
}
}
void PlatformApi::install_application(anbox::protobuf::bridge::InstallApplication const *request, void PlatformApi::install_application(anbox::protobuf::bridge::InstallApplication const *request,
anbox::protobuf::bridge::Void *response, anbox::protobuf::bridge::Void *response,
google::protobuf::Closure *done) { google::protobuf::Closure *done) {
...@@ -49,7 +60,7 @@ void PlatformApi::install_application(anbox::protobuf::bridge::InstallApplicatio ...@@ -49,7 +60,7 @@ void PlatformApi::install_application(anbox::protobuf::bridge::InstallApplicatio
}; };
auto process = core::posix::exec("/system/bin/sh", argv, common_env, core::posix::StandardStream::empty); auto process = core::posix::exec("/system/bin/sh", argv, common_env, core::posix::StandardStream::empty);
process.wait_for(core::posix::wait::Flags::untraced); wait_for_process(process, response);
done->Run(); done->Run();
} }
...@@ -70,7 +81,7 @@ void PlatformApi::launch_application(anbox::protobuf::bridge::LaunchApplication ...@@ -70,7 +81,7 @@ void PlatformApi::launch_application(anbox::protobuf::bridge::LaunchApplication
}; };
auto process = core::posix::exec("/system/bin/sh", argv, common_env, core::posix::StandardStream::empty); auto process = core::posix::exec("/system/bin/sh", argv, common_env, core::posix::StandardStream::empty);
process.wait_for(core::posix::wait::Flags::untraced); wait_for_process(process, response);
done->Run(); done->Run();
} }
...@@ -91,7 +102,7 @@ void PlatformApi::set_dns_servers(anbox::protobuf::bridge::SetDnsServers const * ...@@ -91,7 +102,7 @@ void PlatformApi::set_dns_servers(anbox::protobuf::bridge::SetDnsServers const *
argv.push_back(request->servers(n).address()); argv.push_back(request->servers(n).address());
auto process = core::posix::exec("/system/bin/ndc", argv, common_env, core::posix::StandardStream::empty); auto process = core::posix::exec("/system/bin/ndc", argv, common_env, core::posix::StandardStream::empty);
process.wait_for(core::posix::wait::Flags::untraced); wait_for_process(process, response);
done->Run(); done->Run();
} }
......
...@@ -24,6 +24,12 @@ class Closure; ...@@ -24,6 +24,12 @@ class Closure;
} // namespace protobuf } // namespace protobuf
} // namespace google } // namespace google
namespace core {
namespace posix {
class ChildProcess;
} // posix
} // core
namespace anbox { namespace anbox {
namespace protobuf { namespace protobuf {
namespace bridge { namespace bridge {
...@@ -50,6 +56,10 @@ public: ...@@ -50,6 +56,10 @@ public:
void set_dns_servers(anbox::protobuf::bridge::SetDnsServers const *request, void set_dns_servers(anbox::protobuf::bridge::SetDnsServers const *request,
anbox::protobuf::bridge::Void *response, anbox::protobuf::bridge::Void *response,
google::protobuf::Closure *done); google::protobuf::Closure *done);
private:
void wait_for_process(core::posix::ChildProcess &process,
anbox::protobuf::bridge::Void *response);
}; };
} // namespace android } // namespace android
} // namespace anbox } // namespace anbox
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册