Add a way to turn off unique_fd's operator int.
unique_fd's implicit conversion to int has led to tons of problems (see
all of the overloads for close, fdopen, fdopendir, etc.). Add a switch
that can turn it off, and reduce the ridiculous amount of work to fix up
callers by introducing a borrowed_fd type that can be constructed from
either int or unique_fd.
Test: treehugger
Change-Id: If77cf5cbcaddacdaec5919a15b3520fb68f51a62
diff --git a/adb/daemon/abb.cpp b/adb/daemon/abb.cpp
index eeac41a..87ee8aa 100644
--- a/adb/daemon/abb.cpp
+++ b/adb/daemon/abb.cpp
@@ -28,11 +28,11 @@
class AdbFdTextOutput : public android::TextOutput {
public:
- explicit AdbFdTextOutput(int fd) : mFD(fd) {}
+ explicit AdbFdTextOutput(borrowed_fd fd) : fd_(fd) {}
private:
android::status_t print(const char* txt, size_t len) override {
- return WriteFdExactly(mFD, txt, len) ? android::OK : -errno;
+ return WriteFdExactly(fd_, txt, len) ? android::OK : -errno;
}
void moveIndent(int delta) override { /*not implemented*/
}
@@ -43,7 +43,7 @@
}
private:
- int mFD;
+ borrowed_fd fd_;
};
std::vector<std::string_view> parseCmdArgs(std::string_view args) {
@@ -67,10 +67,11 @@
} // namespace
-static int execCmd(std::string_view args, int in, int out, int err) {
+static int execCmd(std::string_view args, borrowed_fd in, borrowed_fd out, borrowed_fd err) {
AdbFdTextOutput oin(out);
AdbFdTextOutput oerr(err);
- return cmdMain(parseCmdArgs(args), oin, oerr, in, out, err, RunMode::kLibrary);
+ return cmdMain(parseCmdArgs(args), oin, oerr, in.get(), out.get(), err.get(),
+ RunMode::kLibrary);
}
int main(int argc, char* const argv[]) {