Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7cb72c96 authored by Bernie Innocenti's avatar Bernie Innocenti
Browse files

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
parent 7f43e9fa
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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_;
+1 −1
Original line number Diff line number Diff line
@@ -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) {