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

Commit a9eb38d6 authored by Josh Gao's avatar Josh Gao
Browse files

adb: make ScopedFd universally accessible and useful.

Change-Id: I707ffbd10958e7449b4c95dff48638480c746939
(cherry picked from commit f0d3b4fc)
parent 5f28b846
Loading
Loading
Loading
Loading
+43 −0
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@

#include <string>

#include <android-base/macros.h>

void close_stdin();

bool getcwd(std::string* cwd);
@@ -39,4 +41,45 @@ std::string perror_str(const char* msg);

bool set_file_block_mode(int fd, bool block);

extern int adb_close(int fd);

// Helper to automatically close an FD when it goes out of scope.
class ScopedFd {
  public:
    ScopedFd() {
    }

    ~ScopedFd() {
        Reset();
    }

    void Reset(int fd = -1) {
        if (fd != fd_) {
            if (valid()) {
                adb_close(fd_);
            }
            fd_ = fd;
        }
    }

    int Release() {
        int temp = fd_;
        fd_ = -1;
        return temp;
    }

    bool valid() const {
        return fd_ >= 0;
    }

    int fd() const {
        return fd_;
    }

  private:
    int fd_ = -1;

    DISALLOW_COPY_AND_ASSIGN(ScopedFd);
};

#endif
+0 −31
Original line number Diff line number Diff line
@@ -135,37 +135,6 @@ std::string ReadAll(int fd) {
    return received;
}

// Helper to automatically close an FD when it goes out of scope.
class ScopedFd {
  public:
    ScopedFd() {}
    ~ScopedFd() { Reset(); }

    void Reset(int fd=-1) {
        if (fd != fd_) {
            if (valid()) {
                adb_close(fd_);
            }
            fd_ = fd;
        }
    }

    int Release() {
        int temp = fd_;
        fd_ = -1;
        return temp;
    }

    bool valid() const { return fd_ >= 0; }

    int fd() const { return fd_; }

  private:
    int fd_ = -1;

    DISALLOW_COPY_AND_ASSIGN(ScopedFd);
};

// Creates a socketpair and saves the endpoints to |fd1| and |fd2|.
bool CreateSocketpair(ScopedFd* fd1, ScopedFd* fd2) {
    int sockets[2];
+1 −2
Original line number Diff line number Diff line
@@ -576,8 +576,7 @@ static __inline__ int adb_shutdown(int fd, int direction)
// Closes a file descriptor that came from adb_open() or adb_open_mode(), but
// not designed to take a file descriptor from unix_open(). See the comments
// for adb_open() for more info.
static __inline__ int  adb_close(int fd)
{
__inline__ int adb_close(int fd) {
    return close(fd);
}
#undef   close