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);