X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2FFile.cpp;h=74d8669ef1fc29852e935764609fb56877b9ff4e;hb=4af3040b4c2192818a413bad35f7a6cc5846ed0b;hp=0dece45d6525ac58ec08544a8d07e57aafa784ec;hpb=275ca94d04e44f28cfa411668eb1c1dd8db90b80;p=folly.git diff --git a/folly/File.cpp b/folly/File.cpp index 0dece45d..74d8669e 100644 --- a/folly/File.cpp +++ b/folly/File.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2015 Facebook, Inc. + * Copyright 2017 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,13 +16,14 @@ #include -#include -#include #include #include #include #include +#include +#include +#include #include @@ -30,14 +31,9 @@ namespace folly { -File::File() - : fd_(-1) - , ownsFd_(false) -{} +File::File() noexcept : fd_(-1), ownsFd_(false) {} -File::File(int fd, bool ownsFd) - : fd_(fd) - , ownsFd_(ownsFd) { +File::File(int fd, bool ownsFd) noexcept : fd_(fd), ownsFd_(ownsFd) { CHECK_GE(fd, -1) << "fd must be -1 or non-negative"; CHECK(fd != -1 || !ownsFd) << "cannot own -1"; } @@ -52,6 +48,12 @@ File::File(const char* name, int flags, mode_t mode) ownsFd_ = true; } +File::File(const std::string& name, int flags, mode_t mode) + : File(name.c_str(), flags, mode) {} + +File::File(StringPiece name, int flags, mode_t mode) + : File(name.str(), flags, mode) {} + File::File(File&& other) noexcept : fd_(other.fd_) , ownsFd_(other.ownsFd_) { @@ -65,7 +67,11 @@ File& File::operator=(File&& other) { } File::~File() { - closeNoThrow(); // ignore error + auto fd = fd_; + if (!closeNoThrow()) { // ignore most errors + DCHECK_NE(errno, EBADF) << "closing fd " << fd << ", it may already " + << "have been closed. Another time, this might close the wrong FD."; + } } /* static */ File File::temporary() { @@ -142,4 +148,4 @@ void File::unlock() { } void File::unlock_shared() { unlock(); } -} // namespace folly +} // namespace folly