diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2023-02-21 00:48:02 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2023-02-21 00:48:02 +0000 |
commit | e2dae4345b7cb9ec92e204a8bf2ab3dee8fcb9ac (patch) | |
tree | d60d3d93bc3f529a44576a6214f9a30778607a73 | |
parent | Add helper Selection to insert into a map based on a member value as key (diff) | |
download | ilt-e2dae4345b7cb9ec92e204a8bf2ab3dee8fcb9ac.tar.bz2 ilt-e2dae4345b7cb9ec92e204a8bf2ab3dee8fcb9ac.tar.xz ilt-e2dae4345b7cb9ec92e204a8bf2ab3dee8fcb9ac.zip |
Add checked_fopen wrapper and FileStar container
-rw-r--r-- | lib/filesystem.cpp | 9 | ||||
-rw-r--r-- | lib/filesystem.h | 5 |
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>; } |