aboutsummaryrefslogtreecommitdiff
path: root/zencore/iobuffer.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-08-31 20:48:18 +0200
committerStefan Boberg <[email protected]>2021-08-31 20:48:18 +0200
commit43c279cf78b88511d3fde43e28a99cc78ebf720c (patch)
tree434acba955aef3ad978da183db15251d5c74f858 /zencore/iobuffer.cpp
parentMake it possible to distinguish an empty buffer from a null buffer (diff)
downloadzen-43c279cf78b88511d3fde43e28a99cc78ebf720c.tar.xz
zen-43c279cf78b88511d3fde43e28a99cc78ebf720c.zip
Added some argument validation
Diffstat (limited to 'zencore/iobuffer.cpp')
-rw-r--r--zencore/iobuffer.cpp20
1 files changed, 17 insertions, 3 deletions
diff --git a/zencore/iobuffer.cpp b/zencore/iobuffer.cpp
index 54f0d8fa4..9c7781663 100644
--- a/zencore/iobuffer.cpp
+++ b/zencore/iobuffer.cpp
@@ -47,9 +47,11 @@ IoBufferCore::FreeBuffer()
//////////////////////////////////////////////////////////////////////////
+static_assert(sizeof(IoBufferCore) == 32);
+
IoBufferCore::IoBufferCore(size_t InSize)
{
- static_assert(sizeof(IoBufferCore) == 32);
+ ZEN_ASSERT(InSize);
m_DataPtr = AllocateBuffer(InSize, sizeof(void*));
m_DataBytes = InSize;
@@ -59,6 +61,8 @@ IoBufferCore::IoBufferCore(size_t InSize)
IoBufferCore::IoBufferCore(size_t InSize, size_t Alignment)
{
+ ZEN_ASSERT(InSize);
+
m_DataPtr = AllocateBuffer(InSize, Alignment);
m_DataBytes = InSize;
@@ -322,9 +326,11 @@ IoBufferBuilder::MakeFromFile(const wchar_t* FileName, uint64_t Offset, uint64_t
ULONGLONG FileSize;
DataFile.GetSize(FileSize);
+ // TODO: should validate that offset is in range
+
if (Size == ~0ull)
{
- Size = FileSize;
+ Size = FileSize - Offset;
}
else
{
@@ -335,7 +341,15 @@ IoBufferBuilder::MakeFromFile(const wchar_t* FileName, uint64_t Offset, uint64_t
}
}
- return IoBuffer(IoBuffer::File, DataFile.Detach(), Offset, Size);
+ if (Size)
+ {
+ return IoBuffer(IoBuffer::File, DataFile.Detach(), Offset, Size);
+ }
+ else
+ {
+ // For an empty file, we may as well just return an empty memory IoBuffer
+ return IoBuffer(IoBuffer::Wrap, "", 0);
+ }
}
return {};