fs/io/FileOutputStream: add macro HAVE_O_TMPFILE
This commit is contained in:
parent
4b8ee58638
commit
c60cf944f5
|
@ -138,7 +138,7 @@ FileOutputStream::Cancel() noexcept
|
|||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
#ifdef __linux__
|
||||
#ifdef HAVE_O_TMPFILE
|
||||
#ifndef O_TMPFILE
|
||||
/* supported since Linux 3.11 */
|
||||
#define __O_TMPFILE 020000000
|
||||
|
@ -159,12 +159,12 @@ OpenTempFile(FileDescriptor &fd, Path path)
|
|||
return fd.Open(directory.c_str(), O_TMPFILE|O_WRONLY, 0666);
|
||||
}
|
||||
|
||||
#endif /* __linux__ */
|
||||
#endif /* HAVE_O_TMPFILE */
|
||||
|
||||
inline void
|
||||
FileOutputStream::OpenCreate(bool visible)
|
||||
{
|
||||
#ifdef __linux__
|
||||
#ifdef HAVE_O_TMPFILE
|
||||
/* try Linux's O_TMPFILE first */
|
||||
is_tmpfile = !visible && OpenTempFile(fd, GetPath());
|
||||
if (!is_tmpfile) {
|
||||
|
@ -175,7 +175,7 @@ FileOutputStream::OpenCreate(bool visible)
|
|||
0666))
|
||||
throw FormatErrno("Failed to create %s",
|
||||
GetPath().c_str());
|
||||
#ifdef __linux__
|
||||
#ifdef HAVE_O_TMPFILE
|
||||
}
|
||||
#else
|
||||
(void)visible;
|
||||
|
@ -218,7 +218,7 @@ FileOutputStream::Commit()
|
|||
{
|
||||
assert(IsDefined());
|
||||
|
||||
#ifdef __linux__
|
||||
#ifdef HAVE_O_TMPFILE
|
||||
if (is_tmpfile) {
|
||||
unlink(GetPath().c_str());
|
||||
|
||||
|
@ -251,7 +251,7 @@ FileOutputStream::Cancel() noexcept
|
|||
|
||||
switch (mode) {
|
||||
case Mode::CREATE:
|
||||
#ifdef __linux__
|
||||
#ifdef HAVE_O_TMPFILE
|
||||
if (!is_tmpfile)
|
||||
#endif
|
||||
unlink(GetPath().c_str());
|
||||
|
|
|
@ -46,6 +46,10 @@
|
|||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#ifdef __linux__
|
||||
#define HAVE_O_TMPFILE
|
||||
#endif
|
||||
|
||||
class Path;
|
||||
|
||||
class FileOutputStream final : public OutputStream {
|
||||
|
@ -57,7 +61,7 @@ class FileOutputStream final : public OutputStream {
|
|||
FileDescriptor fd = FileDescriptor::Undefined();
|
||||
#endif
|
||||
|
||||
#ifdef __linux__
|
||||
#ifdef HAVE_O_TMPFILE
|
||||
/**
|
||||
* Was O_TMPFILE used? If yes, then linkat() must be used to
|
||||
* create a link to this file.
|
||||
|
|
Loading…
Reference in New Issue