summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/filesystem.cpp9
-rw-r--r--lib/filesystem.h5
2 files changed, 14 insertions, 0 deletions
diff --git a/lib/filesystem.cpp b/lib/filesystem.cpp
index 0e19e8d..7e8ab9c 100644
--- a/lib/filesystem.cpp
+++ b/lib/filesystem.cpp
@@ -62,4 +62,13 @@ namespace filesystem {
{
return memmap {length, prot, flags, h, static_cast<off_t>(offset)};
}
+
+ FILE *
+ checked_fopen(const char * pathname, const char * mode)
+ {
+ if (auto file = fopen(pathname, mode)) {
+ return file;
+ }
+ throw_filesystem_error("fopen", errno, pathname);
+ }
}
diff --git a/lib/filesystem.h b/lib/filesystem.h
index 0c44236..5315183 100644
--- a/lib/filesystem.h
+++ b/lib/filesystem.h
@@ -1,7 +1,9 @@
#pragma once
+#include "ptr.hpp"
#include "special_members.hpp"
#include <cstddef>
+#include <cstdio>
#include <sys/types.h>
namespace filesystem {
@@ -39,4 +41,7 @@ namespace filesystem {
private:
int h;
};
+
+ FILE * checked_fopen(const char * pathname, const char * mode);
+ using FileStar = wrapped_ptrt<FILE, &checked_fopen, &fclose>;
}