mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 21:57:43 +00:00
Import the "gerbert" kernel I worked on earlier this year.
It's a lot crappier than I remembered it. It's gonna need a lot of work.
This commit is contained in:
parent
f608629704
commit
9396108034
55 changed files with 4600 additions and 0 deletions
75
Kernel/DataBuffer.cpp
Normal file
75
Kernel/DataBuffer.cpp
Normal file
|
@ -0,0 +1,75 @@
|
|||
#include "DataBuffer.h"
|
||||
#include "StdLib.h"
|
||||
|
||||
#define SANITIZE_DATABUFFER
|
||||
|
||||
DataBuffer::DataBuffer(size_t length)
|
||||
: m_length(length)
|
||||
, m_owned(true)
|
||||
{
|
||||
m_data = new BYTE[m_length];
|
||||
#ifdef SANITIZE_DATABUFFER
|
||||
memset(m_data, 0x1a, length);
|
||||
#endif
|
||||
}
|
||||
|
||||
DataBuffer::DataBuffer(BYTE* data, size_t length, ConstructionMode mode)
|
||||
: m_length(length)
|
||||
{
|
||||
switch (mode) {
|
||||
case Copy:
|
||||
m_data = new BYTE[m_length];
|
||||
memcpy(m_data, data, m_length);
|
||||
m_owned = true;
|
||||
break;
|
||||
case Adopt:
|
||||
m_data = data;
|
||||
m_owned = true;
|
||||
break;
|
||||
case Wrap:
|
||||
m_data = data;
|
||||
m_owned = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
DataBuffer::~DataBuffer()
|
||||
{
|
||||
clear();
|
||||
#ifdef SANITIZE_DATABUFFER
|
||||
m_data = (BYTE*)0x88888888;
|
||||
#endif
|
||||
}
|
||||
|
||||
void DataBuffer::clear()
|
||||
{
|
||||
if (m_owned) {
|
||||
#ifdef SANITIZE_DATABUFFER
|
||||
memset(m_data, 0x99, m_length);
|
||||
#endif
|
||||
delete [] m_data;
|
||||
}
|
||||
m_owned = false;
|
||||
m_data = nullptr;
|
||||
m_length = 0;
|
||||
}
|
||||
|
||||
RefPtr<DataBuffer> DataBuffer::createUninitialized(size_t length)
|
||||
{
|
||||
return adoptRef(new DataBuffer(length));
|
||||
}
|
||||
|
||||
RefPtr<DataBuffer> DataBuffer::copy(const BYTE* data, size_t length)
|
||||
{
|
||||
return adoptRef(new DataBuffer(const_cast<BYTE*>(data), length, Copy));
|
||||
}
|
||||
|
||||
RefPtr<DataBuffer> DataBuffer::wrap(BYTE* data, size_t length)
|
||||
{
|
||||
return adoptRef(new DataBuffer(data, length, Wrap));
|
||||
}
|
||||
|
||||
RefPtr<DataBuffer> DataBuffer::adopt(BYTE* data, size_t length)
|
||||
{
|
||||
return adoptRef(new DataBuffer(data, length, Adopt));
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue