Disallow operator!() on unique_fd
This catches a common mistake where client code checks for errors using
the common idiom that works for std::iostream and other file-like
classes:
unique_fd fd = open(...);
if (!fd) {
}
Test: atest libbase_test
Test: m droid
Change-Id: I9629a7795537ecb3b57be9c741c06f80967e4cc2
This commit is contained in:
parent
7f43e9fa40
commit
7cb72c96b4
2 changed files with 4 additions and 1 deletions
|
|
@ -105,6 +105,9 @@ class unique_fd_impl final {
|
|||
int get() const { return fd_; }
|
||||
operator int() const { return get(); } // NOLINT
|
||||
|
||||
// Catch bogus error checks (i.e.: "!fd" instead of "fd != -1").
|
||||
bool operator!() const = delete;
|
||||
|
||||
int release() __attribute__((warn_unused_result)) {
|
||||
tag(fd_, this, nullptr);
|
||||
int ret = fd_;
|
||||
|
|
|
|||
|
|
@ -177,7 +177,7 @@ Result<Success> Service::SetUpPidNamespace() const {
|
|||
Result<Success> Service::EnterNamespaces() const {
|
||||
for (const auto& [nstype, path] : namespaces_to_enter_) {
|
||||
auto fd = unique_fd{open(path.c_str(), O_RDONLY | O_CLOEXEC)};
|
||||
if (!fd) {
|
||||
if (fd == -1) {
|
||||
return ErrnoError() << "Could not open namespace at " << path;
|
||||
}
|
||||
if (setns(fd, nstype) == -1) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue