summaryrefslogtreecommitdiff
path: root/AK
diff options
context:
space:
mode:
authorAnotherTest <ali.mpfard@gmail.com>2020-07-22 19:49:47 +0430
committerAndreas Kling <kling@serenityos.org>2020-08-01 08:39:26 +0200
commit613141790437fd88811c6249c70427b452c6e249 (patch)
tree9815390ed5a0d159af80974ad293f81eb53fd916 /AK
parentd04c833002331d868e95a1036426609b219ceb79 (diff)
downloadserenity-613141790437fd88811c6249c70427b452c6e249.zip
AK: Make MappedFile store why it is invalid
This makes AK::MappedFile save the errno either open() or mmap() failed with.
Diffstat (limited to 'AK')
-rw-r--r--AK/MappedFile.cpp5
-rw-r--r--AK/MappedFile.h9
2 files changed, 12 insertions, 2 deletions
diff --git a/AK/MappedFile.cpp b/AK/MappedFile.cpp
index 3f3afb8691..7fcc2c5410 100644
--- a/AK/MappedFile.cpp
+++ b/AK/MappedFile.cpp
@@ -41,6 +41,7 @@ MappedFile::MappedFile(const StringView& file_name)
int fd = open_with_path_length(file_name.characters_without_null_termination(), file_name.length(), O_RDONLY | O_CLOEXEC, 0);
if (fd == -1) {
+ m_errno = errno;
perror("open");
return;
}
@@ -50,8 +51,10 @@ MappedFile::MappedFile(const StringView& file_name)
m_size = st.st_size;
m_map = mmap(nullptr, m_size, PROT_READ, MAP_SHARED, fd, 0);
- if (m_map == MAP_FAILED)
+ if (m_map == MAP_FAILED) {
+ m_errno = errno;
perror("mmap");
+ }
#ifdef DEBUG_MAPPED_FILE
dbgprintf("MappedFile{%s} := { fd=%d, m_size=%u, m_map=%p }\n", file_name.characters(), fd, m_size, m_map);
diff --git a/AK/MappedFile.h b/AK/MappedFile.h
index bdf3b78406..a7649e78a5 100644
--- a/AK/MappedFile.h
+++ b/AK/MappedFile.h
@@ -33,8 +33,9 @@ namespace AK {
class MappedFile {
AK_MAKE_NONCOPYABLE(MappedFile);
+
public:
- MappedFile() {}
+ MappedFile() { }
explicit MappedFile(const StringView& file_name);
MappedFile(MappedFile&&);
~MappedFile();
@@ -42,6 +43,11 @@ public:
MappedFile& operator=(MappedFile&&);
bool is_valid() const { return m_map != (void*)-1; }
+ int errno_if_invalid() const
+ {
+ ASSERT(!is_valid());
+ return m_errno;
+ }
void unmap();
void* data() { return m_map; }
@@ -51,6 +57,7 @@ public:
private:
size_t m_size { 0 };
void* m_map { (void*)-1 };
+ int m_errno { 0 };
};
}