diff --git a/Makefile b/Makefile index 374ade1..ec85e5a 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ PROJECT=cow AUTHOR=Avril (Flanchan) VERSION_MAJOR=0 -VERSION_MINOR=1.4 +VERSION_MINOR=1.5 VERSION=$(VERSION_MAJOR).$(VERSION_MINOR) ifeq ($(PREFIX),) diff --git a/include/cow.hpp b/include/cow.hpp index 75313b9..19c416b 100644 --- a/include/cow.hpp +++ b/include/cow.hpp @@ -16,8 +16,14 @@ struct Cow : public _cow_util::Span { virtual Fake clone() const; - inline void* area() override { return cow_ptr(get_raw()); } - inline const void* area() const override { return cow_ptr_of(const void, get_raw()); } + inline void* area() override { + auto raw = get_raw(); + return raw ? cow_ptr(raw) : nullptr; + } + inline const void* area() const override { + auto raw = get_raw(); + return raw ? cow_ptr_of(const void, raw) : nullptr; + } /// Get the size of the mapped area. /// diff --git a/src/cow.cpp b/src/cow.cpp index 3a05c08..947b21e 100644 --- a/src/cow.cpp +++ b/src/cow.cpp @@ -37,11 +37,11 @@ Cow::~Cow(){} Cow Cow::from_raw(cow_t* owned) { if(cow_is_fake(owned)) throw "Trying to create real from fake raw"; else return Cow(owned); } Cow::Fake Cow::clone() const { return Fake::from_real(*this); } -cow_t* Cow::get_raw() const { return super->ptr(); } +cow_t* Cow::get_raw() const { return super ? super->ptr() : nullptr; } -size_t Cow::size() const { return super->cow.size; } +size_t Cow::size() const { return super ? super->cow.size : 0; } -cow_t* Cow::raw() const { return &super->cow; } +cow_t* Cow::raw() const { return super ? &super->cow : nullptr; } Cow::Fake::Fake(const Cow& copy) : Cow(copy), fake(cow_clone(copy.super->ptr())){} Cow::Fake::Fake(const Fake& copy) : Cow(copy), fake(cow_clone(copy.fake)){}//Fake(*static_cast(©)){}