From: David Majnemer Date: Fri, 4 Mar 2016 05:26:14 +0000 (+0000) Subject: [VFS] Switch from close to SafelyCloseFileDescriptor X-Git-Tag: llvmorg-3.9.0-rc1~12500 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6a6206d440152b534b3e08e87b0ab3168573c438;p=platform%2Fupstream%2Fllvm.git [VFS] Switch from close to SafelyCloseFileDescriptor The SafelyCloseFileDescriptor machinery does the right thing in the face of signals while close will do something platform specific which results in the FD potentially getting leaked. llvm-svn: 262687 --- diff --git a/clang/lib/Basic/VirtualFileSystem.cpp b/clang/lib/Basic/VirtualFileSystem.cpp index 6977f40..ba846c8 100644 --- a/clang/lib/Basic/VirtualFileSystem.cpp +++ b/clang/lib/Basic/VirtualFileSystem.cpp @@ -19,6 +19,7 @@ #include "llvm/Support/Errc.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Path.h" +#include "llvm/Support/Process.h" #include "llvm/Support/YAMLParser.h" #include "llvm/Config/llvm-config.h" #include @@ -158,21 +159,10 @@ RealFile::getBuffer(const Twine &Name, int64_t FileSize, IsVolatile); } -// FIXME: This is terrible, we need this for ::close. -#if !defined(_MSC_VER) && !defined(__MINGW32__) -#include -#include -#else -#include -#ifndef S_ISFIFO -#define S_ISFIFO(x) (0) -#endif -#endif std::error_code RealFile::close() { - if (::close(FD)) - return std::error_code(errno, std::generic_category()); + std::error_code EC = sys::Process::SafelyCloseFileDescriptor(FD); FD = -1; - return std::error_code(); + return EC; } namespace {