adb: make ScopedFd universally accessible and useful.
Change-Id: I707ffbd10958e7449b4c95dff48638480c746939
This commit is contained in:
parent
afa76a3028
commit
f0d3b4fc11
3 changed files with 44 additions and 33 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue