From db144a43ad4b926cd9259f9353b9df2177710739 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 19 Feb 2019 12:16:41 +0100 Subject: [PATCH] system/Open: add OpenWriteOnly(), OpenDirectory() --- src/system/Open.cxx | 34 ++++++++++++++++++++++++++++++++++ src/system/Open.hxx | 14 ++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/system/Open.cxx b/src/system/Open.cxx index ab8008c38..e7bea24a2 100644 --- a/src/system/Open.cxx +++ b/src/system/Open.cxx @@ -43,6 +43,30 @@ OpenReadOnly(const char *path) return fd; } +UniqueFileDescriptor +OpenWriteOnly(const char *path, int flags) +{ + UniqueFileDescriptor fd; + if (!fd.Open(path, O_WRONLY|flags)) + throw FormatErrno("Failed to open '%s'", path); + + return fd; +} + +#ifndef _WIN32 + +UniqueFileDescriptor +OpenDirectory(const char *path, int flags) +{ + UniqueFileDescriptor fd; + if (!fd.Open(path, O_DIRECTORY|O_RDONLY|flags)) + throw FormatErrno("Failed to open '%s'", path); + + return fd; +} + +#endif + #ifdef __linux__ UniqueFileDescriptor @@ -75,6 +99,16 @@ OpenReadOnly(FileDescriptor directory, const char *name, int flags) return fd; } +UniqueFileDescriptor +OpenWriteOnly(FileDescriptor directory, const char *name, int flags) +{ + UniqueFileDescriptor fd; + if (!fd.Open(directory, name, O_WRONLY|flags)) + throw FormatErrno("Failed to open '%s'", name); + + return fd; +} + UniqueFileDescriptor OpenDirectory(FileDescriptor directory, const char *name, int flags) { diff --git a/src/system/Open.hxx b/src/system/Open.hxx index af4e50bf5..8607a7975 100644 --- a/src/system/Open.hxx +++ b/src/system/Open.hxx @@ -36,6 +36,17 @@ class UniqueFileDescriptor; UniqueFileDescriptor OpenReadOnly(const char *path); +UniqueFileDescriptor +OpenWriteOnly(const char *path, int flags=0); + + +#ifndef _WIN32 + +UniqueFileDescriptor +OpenDirectory(const char *name, int flags=0); + +#endif + #ifdef __linux__ UniqueFileDescriptor @@ -47,6 +58,9 @@ OpenPath(FileDescriptor directory, const char *name, int flags=0); UniqueFileDescriptor OpenReadOnly(FileDescriptor directory, const char *name, int flags=0); +UniqueFileDescriptor +OpenWriteOnly(FileDescriptor directory, const char *name, int flags=0); + UniqueFileDescriptor OpenDirectory(FileDescriptor directory, const char *name, int flags=0);