Big, possibly complete sweep of naming changes.

This commit is contained in:
Andreas Kling 2019-01-31 17:31:23 +01:00
parent 27fa09aee4
commit ffab6897aa
Notes: sideshowbarker 2024-07-19 15:54:26 +09:00
93 changed files with 830 additions and 885 deletions

View file

@ -15,7 +15,7 @@ public:
String() { } String() { }
String(const String& other) String(const String& other)
: m_impl(const_cast<String&>(other).m_impl.copyRef()) : m_impl(const_cast<String&>(other).m_impl.copy_ref())
{ {
} }
@ -44,7 +44,7 @@ public:
{ {
} }
unsigned toUInt(bool& ok) const; unsigned to_uint(bool& ok) const;
String to_lowercase() const String to_lowercase() const
{ {
@ -89,7 +89,7 @@ public:
String& operator=(const String& other) String& operator=(const String& other)
{ {
if (this != &other) if (this != &other)
m_impl = const_cast<String&>(other).m_impl.copyRef(); m_impl = const_cast<String&>(other).m_impl.copy_ref();
return *this; return *this;
} }

View file

@ -8,9 +8,9 @@
namespace AK { namespace AK {
inline void notImplemented() { ASSERT(false); } inline void not_implemented() { ASSERT(false); }
} }
using AK::notImplemented; using AK::not_implemented;

View file

@ -51,7 +51,7 @@ private:
, m_owned(true) , m_owned(true)
{ {
ASSERT(m_size != 0); ASSERT(m_size != 0);
size_t size_to_allocate = ceilDiv(size, 8u); size_t size_to_allocate = ceil_div(size, 8u);
m_data = reinterpret_cast<byte*>(kmalloc(size_to_allocate)); m_data = reinterpret_cast<byte*>(kmalloc(size_to_allocate));
memset(m_data, default_value ? 0xff : 0x00, size_to_allocate); memset(m_data, default_value ? 0xff : 0x00, size_to_allocate);
} }

View file

@ -11,7 +11,7 @@ public:
ByteBuffer() { } ByteBuffer() { }
ByteBuffer(std::nullptr_t) { } ByteBuffer(std::nullptr_t) { }
ByteBuffer(const ByteBuffer& other) ByteBuffer(const ByteBuffer& other)
: m_impl(other.m_impl.copyRef()) : m_impl(other.m_impl.copy_ref())
{ {
} }
ByteBuffer(ByteBuffer&& other) ByteBuffer(ByteBuffer&& other)
@ -26,7 +26,7 @@ public:
} }
ByteBuffer& operator=(const ByteBuffer& other) ByteBuffer& operator=(const ByteBuffer& other)
{ {
m_impl = other.m_impl.copyRef(); m_impl = other.m_impl.copy_ref();
return *this; return *this;
} }

View file

@ -48,7 +48,7 @@ public:
append_node(new Node(value)); append_node(new Node(value));
} }
bool containsSlow(const T& value) const bool contains_slow(const T& value) const
{ {
for (auto* node = m_head; node; node = node->next) { for (auto* node = m_head; node; node = node->next) {
if (node->value == value) if (node->value == value)

View file

@ -40,7 +40,7 @@ bool FileSystemPath::canonicalize(bool resolve_symbolic_links)
builder.append('/'); builder.append('/');
builder.append(cpart); builder.append(cpart);
} }
m_string = builder.build(); m_string = builder.to_string();
return true; return true;
} }

View file

@ -41,41 +41,41 @@ public:
template<typename CallableType, class = typename EnableIf<!(IsPointer<CallableType>::value && IsFunction<typename RemovePointer<CallableType>::Type>::value) && IsRvalueReference<CallableType&&>::value>::Type> template<typename CallableType, class = typename EnableIf<!(IsPointer<CallableType>::value && IsFunction<typename RemovePointer<CallableType>::Type>::value) && IsRvalueReference<CallableType&&>::value>::Type>
Function(CallableType&& callable) Function(CallableType&& callable)
: m_callableWrapper(make<CallableWrapper<CallableType>>(move(callable))) : m_callable_wrapper(make<CallableWrapper<CallableType>>(move(callable)))
{ {
} }
template<typename FunctionType, class = typename EnableIf<IsPointer<FunctionType>::value && IsFunction<typename RemovePointer<FunctionType>::Type>::value>::Type> template<typename FunctionType, class = typename EnableIf<IsPointer<FunctionType>::value && IsFunction<typename RemovePointer<FunctionType>::Type>::value>::Type>
Function(FunctionType f) Function(FunctionType f)
: m_callableWrapper(make<CallableWrapper<FunctionType>>(move(f))) : m_callable_wrapper(make<CallableWrapper<FunctionType>>(move(f)))
{ {
} }
Out operator()(In... in) const Out operator()(In... in) const
{ {
ASSERT(m_callableWrapper); ASSERT(m_callable_wrapper);
return m_callableWrapper->call(forward<In>(in)...); return m_callable_wrapper->call(forward<In>(in)...);
} }
explicit operator bool() const { return !!m_callableWrapper; } explicit operator bool() const { return !!m_callable_wrapper; }
template<typename CallableType, class = typename EnableIf<!(IsPointer<CallableType>::value && IsFunction<typename RemovePointer<CallableType>::Type>::value) && IsRvalueReference<CallableType&&>::value>::Type> template<typename CallableType, class = typename EnableIf<!(IsPointer<CallableType>::value && IsFunction<typename RemovePointer<CallableType>::Type>::value) && IsRvalueReference<CallableType&&>::value>::Type>
Function& operator=(CallableType&& callable) Function& operator=(CallableType&& callable)
{ {
m_callableWrapper = make<CallableWrapper<CallableType>>(move(callable)); m_callable_wrapper = make<CallableWrapper<CallableType>>(move(callable));
return *this; return *this;
} }
template<typename FunctionType, class = typename EnableIf<IsPointer<FunctionType>::value && IsFunction<typename RemovePointer<FunctionType>::Type>::value>::Type> template<typename FunctionType, class = typename EnableIf<IsPointer<FunctionType>::value && IsFunction<typename RemovePointer<FunctionType>::Type>::value>::Type>
Function& operator=(FunctionType f) Function& operator=(FunctionType f)
{ {
m_callableWrapper = make<CallableWrapper<FunctionType>>(move(f)); m_callable_wrapper = make<CallableWrapper<FunctionType>>(move(f));
return *this; return *this;
} }
Function& operator=(std::nullptr_t) Function& operator=(std::nullptr_t)
{ {
m_callableWrapper = nullptr; m_callable_wrapper = nullptr;
return *this; return *this;
} }
@ -103,7 +103,7 @@ private:
CallableType m_callable; CallableType m_callable;
}; };
OwnPtr<CallableWrapperBase> m_callableWrapper; OwnPtr<CallableWrapperBase> m_callable_wrapper;
}; };
} }

View file

@ -2,7 +2,7 @@
#include "Types.h" #include "Types.h"
inline unsigned intHash(dword key) inline unsigned int_hash(dword key)
{ {
key += ~(key << 15); key += ~(key << 15);
key ^= (key >> 10); key ^= (key >> 10);
@ -13,8 +13,8 @@ inline unsigned intHash(dword key)
return key; return key;
} }
inline unsigned pairIntHash(dword key1, dword key2) inline unsigned pair_int_hash(dword key1, dword key2)
{ {
return intHash((intHash(key1) * 209) ^ (intHash(key2 * 413))); return int_hash((int_hash(key1) * 209) ^ (int_hash(key2 * 413)));
} }

View file

@ -54,7 +54,7 @@ public:
void set(const K&, const V&); void set(const K&, const V&);
void set(const K&, V&&); void set(const K&, V&&);
void remove(const K&); void remove(const K&);
void removeOneRandomly() { m_table.remove(m_table.begin()); } void remove_one_randomly() { m_table.remove(m_table.begin()); }
typedef HashTable<Entry, EntryTraits> HashTableType; typedef HashTable<Entry, EntryTraits> HashTableType;
typedef typename HashTableType::Iterator IteratorType; typedef typename HashTableType::Iterator IteratorType;

View file

@ -6,40 +6,40 @@
namespace AK { namespace AK {
MappedFile::MappedFile(String&& fileName) MappedFile::MappedFile(String&& file_name)
: m_fileName(std::move(fileName)) : m_file_name(std::move(file_name))
{ {
m_fileLength = 1024; m_file_length = 1024;
m_fd = open(m_fileName.characters(), O_RDONLY); m_fd = open(m_file_name.characters(), O_RDONLY);
if (m_fd != -1) { if (m_fd != -1) {
struct stat st; struct stat st;
fstat(m_fd, &st); fstat(m_fd, &st);
m_fileLength = st.st_size; m_file_length = st.st_size;
m_map = mmap(nullptr, m_fileLength, PROT_READ, MAP_SHARED, m_fd, 0); m_map = mmap(nullptr, m_file_length, PROT_READ, MAP_SHARED, m_fd, 0);
if (m_map == MAP_FAILED) if (m_map == MAP_FAILED)
perror(""); perror("");
} }
printf("MappedFile{%s} := { m_fd=%d, m_fileLength=%zu, m_map=%p }\n", m_fileName.characters(), m_fd, m_fileLength, m_map); printf("MappedFile{%s} := { m_fd=%d, m_file_length=%zu, m_map=%p }\n", m_file_name.characters(), m_fd, m_file_length, m_map);
} }
MappedFile::~MappedFile() MappedFile::~MappedFile()
{ {
if (m_map != (void*)-1) { if (m_map != (void*)-1) {
ASSERT(m_fd != -1); ASSERT(m_fd != -1);
munmap(m_map, m_fileLength); munmap(m_map, m_file_length);
} }
} }
MappedFile::MappedFile(MappedFile&& other) MappedFile::MappedFile(MappedFile&& other)
: m_fileName(std::move(other.m_fileName)) : m_file_name(std::move(other.m_file_name))
, m_fileLength(other.m_fileLength) , m_file_length(other.m_file_length)
, m_fd(other.m_fd) , m_fd(other.m_fd)
, m_map(other.m_map) , m_map(other.m_map)
{ {
other.m_fileLength = 0; other.m_file_length = 0;
other.m_fd = -1; other.m_fd = -1;
other.m_map = (void*)-1; other.m_map = (void*)-1;
} }

View file

@ -7,19 +7,19 @@ namespace AK {
class MappedFile { class MappedFile {
public: public:
MappedFile() { } MappedFile() { }
explicit MappedFile(String&& fileName); explicit MappedFile(String&& file_name);
MappedFile(MappedFile&&); MappedFile(MappedFile&&);
~MappedFile(); ~MappedFile();
bool isValid() const { return m_map != (void*)-1; } bool is_valid() const { return m_map != (void*)-1; }
void* pointer() { return m_map; } void* pointer() { return m_map; }
const void* pointer() const { return m_map; } const void* pointer() const { return m_map; }
size_t fileLength() const { return m_fileLength; } size_t file_length() const { return m_file_length; }
private: private:
String m_fileName; String m_file_name;
size_t m_fileLength { 0 }; size_t m_file_length { 0 };
int m_fd { -1 }; int m_fd { -1 };
void* m_map { (void*)-1 }; void* m_map { (void*)-1 };
}; };

View file

@ -11,8 +11,8 @@ class OwnPtr {
public: public:
OwnPtr() { } OwnPtr() { }
explicit OwnPtr(T* ptr) : m_ptr(ptr) { } explicit OwnPtr(T* ptr) : m_ptr(ptr) { }
OwnPtr(OwnPtr&& other) : m_ptr(other.leakPtr()) { } OwnPtr(OwnPtr&& other) : m_ptr(other.leak_ptr()) { }
template<typename U> OwnPtr(OwnPtr<U>&& other) : m_ptr(static_cast<T*>(other.leakPtr())) { } template<typename U> OwnPtr(OwnPtr<U>&& other) : m_ptr(static_cast<T*>(other.leak_ptr())) { }
OwnPtr(std::nullptr_t) { }; OwnPtr(std::nullptr_t) { };
~OwnPtr() ~OwnPtr()
{ {
@ -29,7 +29,7 @@ public:
{ {
if (this != &other) { if (this != &other) {
delete m_ptr; delete m_ptr;
m_ptr = other.leakPtr(); m_ptr = other.leak_ptr();
} }
return *this; return *this;
} }
@ -39,7 +39,7 @@ public:
{ {
if (this != static_cast<void*>(&other)) { if (this != static_cast<void*>(&other)) {
delete m_ptr; delete m_ptr;
m_ptr = other.leakPtr(); m_ptr = other.leak_ptr();
} }
return *this; return *this;
} }
@ -69,7 +69,7 @@ public:
typedef T* OwnPtr::*UnspecifiedBoolType; typedef T* OwnPtr::*UnspecifiedBoolType;
operator UnspecifiedBoolType() const { return m_ptr ? &OwnPtr::m_ptr : nullptr; } operator UnspecifiedBoolType() const { return m_ptr ? &OwnPtr::m_ptr : nullptr; }
T* leakPtr() T* leak_ptr()
{ {
T* leakedPtr = m_ptr; T* leakedPtr = m_ptr;
m_ptr = nullptr; m_ptr = nullptr;

View file

@ -6,14 +6,14 @@
namespace AK { namespace AK {
template<typename T> template<typename T>
inline void retainIfNotNull(T* ptr) inline void retain_if_not_null(T* ptr)
{ {
if (ptr) if (ptr)
ptr->retain(); ptr->retain();
} }
template<typename T> template<typename T>
inline void releaseIfNotNull(T* ptr) inline void release_if_not_null(T* ptr)
{ {
if (ptr) if (ptr)
ptr->release(); ptr->release();
@ -25,15 +25,15 @@ public:
enum AdoptTag { Adopt }; enum AdoptTag { Adopt };
RetainPtr() { } RetainPtr() { }
RetainPtr(const T* ptr) : m_ptr(const_cast<T*>(ptr)) { retainIfNotNull(m_ptr); } RetainPtr(const T* ptr) : m_ptr(const_cast<T*>(ptr)) { retain_if_not_null(m_ptr); }
RetainPtr(T* ptr) : m_ptr(ptr) { retainIfNotNull(m_ptr); } RetainPtr(T* ptr) : m_ptr(ptr) { retain_if_not_null(m_ptr); }
RetainPtr(T& object) : m_ptr(&object) { m_ptr->retain(); } RetainPtr(T& object) : m_ptr(&object) { m_ptr->retain(); }
RetainPtr(AdoptTag, T& object) : m_ptr(&object) { } RetainPtr(AdoptTag, T& object) : m_ptr(&object) { }
RetainPtr(RetainPtr& other) : m_ptr(other.copyRef().leakRef()) { } RetainPtr(RetainPtr& other) : m_ptr(other.copy_ref().leak_ref()) { }
RetainPtr(RetainPtr&& other) : m_ptr(other.leakRef()) { } RetainPtr(RetainPtr&& other) : m_ptr(other.leak_ref()) { }
template<typename U> RetainPtr(RetainPtr<U>&& other) : m_ptr(static_cast<T*>(other.leakRef())) { } template<typename U> RetainPtr(RetainPtr<U>&& other) : m_ptr(static_cast<T*>(other.leak_ref())) { }
RetainPtr(const RetainPtr& other) : m_ptr(const_cast<RetainPtr&>(other).copyRef().leakRef()) { } RetainPtr(const RetainPtr& other) : m_ptr(const_cast<RetainPtr&>(other).copy_ref().leak_ref()) { }
template<typename U> RetainPtr(const RetainPtr<U>& other) : m_ptr(const_cast<RetainPtr<U>&>(other).copyRef().leakRef()) { } template<typename U> RetainPtr(const RetainPtr<U>& other) : m_ptr(const_cast<RetainPtr<U>&>(other).copy_ref().leak_ref()) { }
~RetainPtr() ~RetainPtr()
{ {
clear(); clear();
@ -49,8 +49,8 @@ public:
RetainPtr& operator=(RetainPtr&& other) RetainPtr& operator=(RetainPtr&& other)
{ {
if (this != &other) { if (this != &other) {
releaseIfNotNull(m_ptr); release_if_not_null(m_ptr);
m_ptr = other.leakRef(); m_ptr = other.leak_ref();
} }
return *this; return *this;
} }
@ -59,8 +59,8 @@ public:
RetainPtr& operator=(RetainPtr<U>&& other) RetainPtr& operator=(RetainPtr<U>&& other)
{ {
if (this != static_cast<void*>(&other)) { if (this != static_cast<void*>(&other)) {
releaseIfNotNull(m_ptr); release_if_not_null(m_ptr);
m_ptr = other.leakRef(); m_ptr = other.leak_ref();
} }
return *this; return *this;
} }
@ -68,18 +68,18 @@ public:
RetainPtr& operator=(T* ptr) RetainPtr& operator=(T* ptr)
{ {
if (m_ptr != ptr) if (m_ptr != ptr)
releaseIfNotNull(m_ptr); release_if_not_null(m_ptr);
m_ptr = ptr; m_ptr = ptr;
retainIfNotNull(m_ptr); retain_if_not_null(m_ptr);
return *this; return *this;
} }
RetainPtr& operator=(T& object) RetainPtr& operator=(T& object)
{ {
if (m_ptr != &object) if (m_ptr != &object)
releaseIfNotNull(m_ptr); release_if_not_null(m_ptr);
m_ptr = &object; m_ptr = &object;
retainIfNotNull(m_ptr); retain_if_not_null(m_ptr);
return *this; return *this;
} }
@ -89,14 +89,14 @@ public:
return *this; return *this;
} }
RetainPtr copyRef() const RetainPtr copy_ref() const
{ {
return RetainPtr(m_ptr); return RetainPtr(m_ptr);
} }
void clear() void clear()
{ {
releaseIfNotNull(m_ptr); release_if_not_null(m_ptr);
m_ptr = nullptr; m_ptr = nullptr;
} }
@ -105,7 +105,7 @@ public:
typedef T* RetainPtr::*UnspecifiedBoolType; typedef T* RetainPtr::*UnspecifiedBoolType;
operator UnspecifiedBoolType() const { return m_ptr ? &RetainPtr::m_ptr : nullptr; } operator UnspecifiedBoolType() const { return m_ptr ? &RetainPtr::m_ptr : nullptr; }
T* leakRef() T* leak_ref()
{ {
T* leakedPtr = m_ptr; T* leakedPtr = m_ptr;
m_ptr = nullptr; m_ptr = nullptr;

View file

@ -50,28 +50,28 @@ public:
void initialize(byte* base) void initialize(byte* base)
{ {
m_base = base; m_base = base;
m_free = capacityInAllocations(); m_free = capacity_in_allocations();
dump(); dump();
} }
static constexpr dword capacityInAllocations() static constexpr dword capacity_in_allocations()
{ {
return 1048576 / chunkSize; return 1048576 / chunkSize;
} }
static constexpr dword capacityInBytes() static constexpr dword capacity_in_bytes()
{ {
return capacityInAllocations() * chunkSize; return capacity_in_allocations() * chunkSize;
} }
byte* allocate() byte* allocate()
{ {
auto bitmap = this->bitmap(); auto bitmap = this->bitmap();
for (dword i = 0; i < capacityInAllocations(); ++i) { for (dword i = 0; i < capacity_in_allocations(); ++i) {
if (!bitmap.get(i)) { if (!bitmap.get(i)) {
bitmap.set(i, true); bitmap.set(i, true);
--m_free; --m_free;
return pointerToChunk(i); return pointer_to_chunk(i);
} }
} }
return nullptr; return nullptr;
@ -84,57 +84,57 @@ public:
void free(byte* ptr) void free(byte* ptr)
{ {
ASSERT(isInAllocator(ptr)); ASSERT(is_in_allocator(ptr));
auto bitmap = this->bitmap(); auto bitmap = this->bitmap();
auto chunkIndex = chunkIndexFromPointer(ptr); auto chunk_index = chunk_index_from_pointer(ptr);
ASSERT(bitmap.get(chunkIndex)); ASSERT(bitmap.get(chunk_index));
bitmap.set(chunkIndex, false); bitmap.set(chunk_index, false);
++m_free; ++m_free;
} }
bool isInAllocator(byte* ptr) bool is_in_allocator(byte* ptr)
{ {
return ptr >= pointerToChunk(0) && ptr <= addressAfterThisAllocator(); return ptr >= pointer_to_chunk(0) && ptr <= address_after_this_allocator();
} }
dword chunkIndexFromPointer(byte* ptr) dword chunk_index_from_pointer(byte* ptr)
{ {
return (ptr - pointerToChunk(0)) / chunkSize; return (ptr - pointer_to_chunk(0)) / chunkSize;
} }
byte* pointerToChunk(dword index) byte* pointer_to_chunk(dword index)
{ {
return m_base + sizeOfAllocationBitmapInBytes() + (index * chunkSize); return m_base + size_of_allocation_bitmap_in_bytes() + (index * chunkSize);
} }
AllocationBitmap bitmap() AllocationBitmap bitmap()
{ {
return AllocationBitmap::wrap(m_base, capacityInAllocations()); return AllocationBitmap::wrap(m_base, capacity_in_allocations());
} }
static constexpr dword sizeOfAllocationBitmapInBytes() static constexpr dword size_of_allocation_bitmap_in_bytes()
{ {
return capacityInAllocations() / 8; return capacity_in_allocations() / 8;
} }
byte* addressAfterThisAllocator() const byte* address_after_this_allocator() const
{ {
return m_base + sizeOfAllocationBitmapInBytes() + capacityInBytes(); return m_base + size_of_allocation_bitmap_in_bytes() + capacity_in_bytes();
} }
dword numberOfFreeChunks() const dword number_of_free_chunks() const
{ {
return m_free; return m_free;
} }
private: private:
byte* m_base { nullptr }; byte* m_base { nullptr };
dword m_free { capacityInAllocations() }; dword m_free { capacity_in_allocations() };
}; };
struct Allocator { struct Allocator {
void initialize(); void initialize();
void initializeIfNeeded(); void initialize_if_needed();
void dump(); void dump();
ChunkAllocator<8> alloc8; ChunkAllocator<8> alloc8;
@ -148,7 +148,7 @@ struct Allocator {
static Allocator allocator; static Allocator allocator;
void Allocator::initializeIfNeeded() void Allocator::initialize_if_needed()
{ {
if (initialized) if (initialized)
return; return;
@ -161,9 +161,9 @@ void Allocator::initialize()
space = (byte*)mmap((void*)0x20000000, 32 * MB, PROT_WRITE | PROT_READ | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); space = (byte*)mmap((void*)0x20000000, 32 * MB, PROT_WRITE | PROT_READ | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
ASSERT(space != MAP_FAILED); ASSERT(space != MAP_FAILED);
alloc8.initialize(space + 0x10000); alloc8.initialize(space + 0x10000);
alloc16.initialize(alloc8.addressAfterThisAllocator()); alloc16.initialize(alloc8.address_after_this_allocator());
alloc4096.initialize(alloc16.addressAfterThisAllocator()); alloc4096.initialize(alloc16.address_after_this_allocator());
alloc16384.initialize(alloc4096.addressAfterThisAllocator()); alloc16384.initialize(alloc4096.address_after_this_allocator());
} }
void Allocator::dump() void Allocator::dump()
@ -188,7 +188,7 @@ byte* allocate(dword size)
{ {
if (!size) if (!size)
return nullptr; return nullptr;
allocator.initializeIfNeeded(); allocator.initialize_if_needed();
if (size <= 8) { if (size <= 8) {
if (auto* ptr = allocator.alloc8.allocate()) if (auto* ptr = allocator.alloc8.allocate())
return ptr; return ptr;
@ -210,7 +210,7 @@ byte* allocate(dword size)
return nullptr; return nullptr;
} }
byte* allocateZeroed(dword size) byte* allocate_zeroed(dword size)
{ {
auto* ptr = allocate(size); auto* ptr = allocate(size);
if (!ptr) if (!ptr)
@ -232,20 +232,20 @@ void free(byte* ptr)
{ {
if (!ptr) if (!ptr)
return; return;
allocator.initializeIfNeeded(); allocator.initialize_if_needed();
if (allocator.alloc8.isInAllocator(ptr)) { if (allocator.alloc8.is_in_allocator(ptr)) {
allocator.alloc8.free(ptr); allocator.alloc8.free(ptr);
return; return;
} }
if (allocator.alloc16.isInAllocator(ptr)) { if (allocator.alloc16.is_in_allocator(ptr)) {
allocator.alloc16.free(ptr); allocator.alloc16.free(ptr);
return; return;
} }
if (allocator.alloc4096.isInAllocator(ptr)) { if (allocator.alloc4096.is_in_allocator(ptr)) {
allocator.alloc4096.free(ptr); allocator.alloc4096.free(ptr);
return; return;
} }
if (allocator.alloc16384.isInAllocator(ptr)) { if (allocator.alloc16384.is_in_allocator(ptr)) {
allocator.alloc16384.free(ptr); allocator.alloc16384.free(ptr);
return; return;
} }

View file

@ -7,7 +7,7 @@ namespace SimpleMalloc {
void initialize(); void initialize();
void dump(); void dump();
byte* allocate(dword); byte* allocate(dword);
byte* allocateZeroed(dword); byte* allocate_zeroed(dword);
void free(byte*); void free(byte*);
byte* reallocate(byte*, dword); byte* reallocate(byte*, dword);

View file

@ -47,7 +47,7 @@ public:
m_tail = node; m_tail = node;
} }
bool containsSlow(const T& value) const bool contains_slow(const T& value) const
{ {
for (auto* node = m_head; node; node = node->next) { for (auto* node = m_head; node; node = node->next) {
if (node->value == value) if (node->value == value)

View file

@ -45,7 +45,7 @@ inline T max(const T& a, const T& b)
template<typename T, typename U> template<typename T, typename U>
static inline T ceilDiv(T a, U b) static inline T ceil_div(T a, U b)
{ {
static_assert(sizeof(T) == sizeof(U)); static_assert(sizeof(T) == sizeof(U));
T result = a / b; T result = a / b;
@ -173,5 +173,5 @@ using AK::move;
using AK::forward; using AK::forward;
using AK::exchange; using AK::exchange;
using AK::swap; using AK::swap;
using AK::ceilDiv; using AK::ceil_div;

View file

@ -42,10 +42,10 @@ String String::substring(size_t start, size_t length) const
ASSERT(start + length <= m_impl->length()); ASSERT(start + length <= m_impl->length());
// FIXME: This needs some input bounds checking. // FIXME: This needs some input bounds checking.
char* buffer; char* buffer;
auto newImpl = StringImpl::create_uninitialized(length, buffer); auto new_impl = StringImpl::create_uninitialized(length, buffer);
memcpy(buffer, characters() + start, length); memcpy(buffer, characters() + start, length);
buffer[length] = '\0'; buffer[length] = '\0';
return newImpl; return new_impl;
} }
Vector<String> String::split(const char separator) const Vector<String> String::split(const char separator) const
@ -79,7 +79,7 @@ ByteBuffer String::to_byte_buffer() const
return ByteBuffer::copy(reinterpret_cast<const byte*>(characters()), length()); return ByteBuffer::copy(reinterpret_cast<const byte*>(characters()), length());
} }
unsigned String::toUInt(bool& ok) const unsigned String::to_uint(bool& ok) const
{ {
unsigned value = 0; unsigned value = 0;
for (size_t i = 0; i < length(); ++i) { for (size_t i = 0; i < length(); ++i) {
@ -101,7 +101,7 @@ String String::format(const char* fmt, ...)
va_start(ap, fmt); va_start(ap, fmt);
builder.appendvf(fmt, ap); builder.appendvf(fmt, ap);
va_end(ap); va_end(ap);
return builder.build(); return builder.to_string();
} }
} }

View file

@ -43,7 +43,7 @@ void StringBuilder::append(char ch)
void StringBuilder::appendvf(const char* fmt, va_list ap) void StringBuilder::appendvf(const char* fmt, va_list ap)
{ {
printfInternal([this] (char*&, char ch) { printf_internal([this] (char*&, char ch) {
append(ch); append(ch);
}, nullptr, fmt, ap); }, nullptr, fmt, ap);
} }
@ -62,7 +62,7 @@ ByteBuffer StringBuilder::to_byte_buffer()
return move(m_buffer); return move(m_buffer);
} }
String StringBuilder::build() String StringBuilder::to_string()
{ {
auto string = String((const char*)m_buffer.pointer(), m_length); auto string = String((const char*)m_buffer.pointer(), m_length);
m_buffer.clear(); m_buffer.clear();

View file

@ -17,7 +17,7 @@ public:
void appendf(const char*, ...); void appendf(const char*, ...);
void appendvf(const char*, va_list); void appendvf(const char*, va_list);
String build(); String to_string();
ByteBuffer to_byte_buffer(); ByteBuffer to_byte_buffer();
private: private:

View file

@ -55,7 +55,7 @@ StringImpl::~StringImpl()
#endif #endif
} }
static inline size_t allocationSizeForStringImpl(size_t length) static inline size_t allocation_size_for_stringimpl(size_t length)
{ {
return sizeof(StringImpl) + (sizeof(char) * length) + sizeof(char); return sizeof(StringImpl) + (sizeof(char) * length) + sizeof(char);
} }
@ -63,14 +63,14 @@ static inline size_t allocationSizeForStringImpl(size_t length)
RetainPtr<StringImpl> StringImpl::create_uninitialized(size_t length, char*& buffer) RetainPtr<StringImpl> StringImpl::create_uninitialized(size_t length, char*& buffer)
{ {
ASSERT(length); ASSERT(length);
void* slot = kmalloc(allocationSizeForStringImpl(length)); void* slot = kmalloc(allocation_size_for_stringimpl(length));
if (!slot) if (!slot)
return nullptr; return nullptr;
auto newStringImpl = adopt(*new (slot) StringImpl(ConstructWithInlineBuffer, length)); auto new_stringimpl = adopt(*new (slot) StringImpl(ConstructWithInlineBuffer, length));
buffer = const_cast<char*>(newStringImpl->m_characters); buffer = const_cast<char*>(new_stringimpl->m_characters);
buffer[length] = '\0'; buffer[length] = '\0';
return newStringImpl; return new_stringimpl;
} }
RetainPtr<StringImpl> StringImpl::create(const char* cstring, size_t length, ShouldChomp shouldChomp) RetainPtr<StringImpl> StringImpl::create(const char* cstring, size_t length, ShouldChomp shouldChomp)
@ -82,17 +82,17 @@ RetainPtr<StringImpl> StringImpl::create(const char* cstring, size_t length, Sho
return the_empty_stringimpl(); return the_empty_stringimpl();
char* buffer; char* buffer;
auto newStringImpl = create_uninitialized(length, buffer); auto new_stringimpl = create_uninitialized(length, buffer);
if (!newStringImpl) if (!new_stringimpl)
return nullptr; return nullptr;
memcpy(buffer, cstring, length * sizeof(char)); memcpy(buffer, cstring, length * sizeof(char));
if (shouldChomp && buffer[length - 1] == '\n') { if (shouldChomp && buffer[length - 1] == '\n') {
buffer[length - 1] = '\0'; buffer[length - 1] = '\0';
--newStringImpl->m_length; --new_stringimpl->m_length;
} }
return newStringImpl; return new_stringimpl;
} }
RetainPtr<StringImpl> StringImpl::create(const char* cstring, ShouldChomp shouldChomp) RetainPtr<StringImpl> StringImpl::create(const char* cstring, ShouldChomp shouldChomp)
@ -103,26 +103,26 @@ RetainPtr<StringImpl> StringImpl::create(const char* cstring, ShouldChomp should
return create(cstring, strlen(cstring), shouldChomp); return create(cstring, strlen(cstring), shouldChomp);
} }
static inline bool isASCIILowercase(char c) static inline bool is_ascii_lowercase(char c)
{ {
return c >= 'a' && c <= 'z'; return c >= 'a' && c <= 'z';
} }
static inline bool isASCIIUppercase(char c) static inline bool is_ascii_uppercase(char c)
{ {
return c >= 'A' && c <= 'Z'; return c >= 'A' && c <= 'Z';
} }
static inline char toASCIILowercase(char c) static inline char to_ascii_lowercase(char c)
{ {
if (isASCIIUppercase(c)) if (is_ascii_uppercase(c))
return c | 0x20; return c | 0x20;
return c; return c;
} }
static inline char toASCIIUppercase(char c) static inline char to_ascii_uppercase(char c)
{ {
if (isASCIILowercase(c)) if (is_ascii_lowercase(c))
return c & ~0x20; return c & ~0x20;
return c; return c;
} }
@ -133,18 +133,18 @@ RetainPtr<StringImpl> StringImpl::to_lowercase() const
return const_cast<StringImpl*>(this); return const_cast<StringImpl*>(this);
for (size_t i = 0; i < m_length; ++i) { for (size_t i = 0; i < m_length; ++i) {
if (!isASCIILowercase(m_characters[i])) if (!is_ascii_lowercase(m_characters[i]))
goto slowPath; goto slow_path;
} }
return const_cast<StringImpl*>(this); return const_cast<StringImpl*>(this);
slowPath: slow_path:
char* buffer; char* buffer;
auto lowercased = create_uninitialized(m_length, buffer); auto lowercased = create_uninitialized(m_length, buffer);
if (!lowercased) if (!lowercased)
return nullptr; return nullptr;
for (size_t i = 0; i < m_length; ++i) for (size_t i = 0; i < m_length; ++i)
buffer[i] = toASCIILowercase(m_characters[i]); buffer[i] = to_ascii_lowercase(m_characters[i]);
return lowercased; return lowercased;
} }
@ -155,18 +155,18 @@ RetainPtr<StringImpl> StringImpl::to_uppercase() const
return const_cast<StringImpl*>(this); return const_cast<StringImpl*>(this);
for (size_t i = 0; i < m_length; ++i) { for (size_t i = 0; i < m_length; ++i) {
if (!isASCIIUppercase(m_characters[i])) if (!is_ascii_uppercase(m_characters[i]))
goto slowPath; goto slow_path;
} }
return const_cast<StringImpl*>(this); return const_cast<StringImpl*>(this);
slowPath: slow_path:
char* buffer; char* buffer;
auto uppercased = create_uninitialized(m_length, buffer); auto uppercased = create_uninitialized(m_length, buffer);
if (!uppercased) if (!uppercased)
return nullptr; return nullptr;
for (size_t i = 0; i < m_length; ++i) for (size_t i = 0; i < m_length; ++i)
buffer[i] = toASCIIUppercase(m_characters[i]); buffer[i] = to_ascii_uppercase(m_characters[i]);
return uppercased; return uppercased;
} }

View file

@ -11,14 +11,14 @@ TemporaryFile::TemporaryFile()
int fd = mkstemp(nameBuffer); int fd = mkstemp(nameBuffer);
if (fd != -1) { if (fd != -1) {
m_stream = fdopen(fd, "w+"); m_stream = fdopen(fd, "w+");
m_fileName = nameBuffer; m_file_name = nameBuffer;
} }
} }
TemporaryFile::~TemporaryFile() TemporaryFile::~TemporaryFile()
{ {
if (isValid()) { if (is_valid()) {
unlink(m_fileName.characters()); unlink(m_file_name.characters());
fclose(m_stream); fclose(m_stream);
} }
} }

View file

@ -10,14 +10,14 @@ public:
TemporaryFile(); TemporaryFile();
~TemporaryFile(); ~TemporaryFile();
bool isValid() const { return m_stream; } bool is_valid() const { return m_stream; }
FILE* stream() { return m_stream; } FILE* stream() { return m_stream; }
String fileName() const { return m_fileName; } String file_name() const { return m_file_name; }
void sync(); void sync();
private: private:
FILE* m_stream { nullptr }; FILE* m_stream { nullptr };
String m_fileName; String m_file_name;
}; };
} }

View file

@ -12,13 +12,13 @@ struct Traits
template<> template<>
struct Traits<int> { struct Traits<int> {
static unsigned hash(int i) { return intHash(i); } static unsigned hash(int i) { return int_hash(i); }
static void dump(int i) { kprintf("%d", i); } static void dump(int i) { kprintf("%d", i); }
}; };
template<> template<>
struct Traits<unsigned> { struct Traits<unsigned> {
static unsigned hash(unsigned u) { return intHash(u); } static unsigned hash(unsigned u) { return int_hash(u); }
static void dump(unsigned u) { kprintf("%u", u); } static void dump(unsigned u) { kprintf("%u", u); }
}; };
@ -26,7 +26,7 @@ template<typename T>
struct Traits<T*> { struct Traits<T*> {
static unsigned hash(const T* p) static unsigned hash(const T* p)
{ {
return intHash((dword)p); return int_hash((dword)p);
} }
static void dump(const T* p) { kprintf("%p", p); } static void dump(const T* p) { kprintf("%p", p); }
}; };

View file

@ -219,16 +219,16 @@ public:
if (capacity() >= neededCapacity) if (capacity() >= neededCapacity)
return; return;
size_t new_capacity = padded_capacity(neededCapacity); size_t new_capacity = padded_capacity(neededCapacity);
auto newImpl = VectorImpl<T, Allocator>::create(new_capacity); auto new_impl = VectorImpl<T, Allocator>::create(new_capacity);
if (m_impl) { if (m_impl) {
newImpl->m_size = m_impl->m_size; new_impl->m_size = m_impl->m_size;
for (size_t i = 0; i < size(); ++i) { for (size_t i = 0; i < size(); ++i) {
new (newImpl->slot(i)) T(move(m_impl->at(i))); new (new_impl->slot(i)) T(move(m_impl->at(i)));
m_impl->at(i).~T(); m_impl->at(i).~T();
} }
Allocator::deallocate(m_impl); Allocator::deallocate(m_impl);
} }
m_impl = newImpl; m_impl = new_impl;
} }
void resize(size_t new_size) void resize(size_t new_size)

View file

@ -13,14 +13,14 @@ public:
template<typename U> template<typename U>
WeakPtr(WeakPtr<U>&& other) WeakPtr(WeakPtr<U>&& other)
: m_link(reinterpret_cast<WeakLink<T>*>(other.leakLink())) : m_link(reinterpret_cast<WeakLink<T>*>(other.leak_link()))
{ {
} }
template<typename U> template<typename U>
WeakPtr& operator=(WeakPtr<U>&& other) WeakPtr& operator=(WeakPtr<U>&& other)
{ {
m_link = reinterpret_cast<WeakLink<T>*>(other.leakLink()); m_link = reinterpret_cast<WeakLink<T>*>(other.leak_link());
return *this; return *this;
} }
@ -38,7 +38,7 @@ public:
bool is_null() const { return !m_link || !m_link->ptr(); } bool is_null() const { return !m_link || !m_link->ptr(); }
void clear() { m_link = nullptr; } void clear() { m_link = nullptr; }
WeakLink<T>* leakLink() { return m_link.leakRef(); } WeakLink<T>* leak_link() { return m_link.leak_ref(); }
private: private:
WeakPtr(RetainPtr<WeakLink<T>>&& link) : m_link(move(link)) { } WeakPtr(RetainPtr<WeakLink<T>>&& link) : m_link(move(link)) { }
@ -47,11 +47,11 @@ private:
}; };
template<typename T> template<typename T>
inline WeakPtr<T> Weakable<T>::makeWeakPtr() inline WeakPtr<T> Weakable<T>::make_weak_ptr()
{ {
if (!m_link) if (!m_link)
m_link = adopt(*new WeakLink<T>(static_cast<T&>(*this))); m_link = adopt(*new WeakLink<T>(static_cast<T&>(*this)));
return WeakPtr<T>(m_link.copyRef()); return WeakPtr<T>(m_link.copy_ref());
} }
} }

View file

@ -26,7 +26,7 @@ class Weakable {
private: private:
class Link; class Link;
public: public:
WeakPtr<T> makeWeakPtr(); WeakPtr<T> make_weak_ptr();
protected: protected:
Weakable() { } Weakable() { }

View file

@ -84,7 +84,7 @@ void* kcalloc(size_t nmemb, size_t size)
{ {
if (!nmemb || !size) if (!nmemb || !size)
return nullptr; return nullptr;
return SimpleMalloc::allocateZeroed(nmemb * size); return SimpleMalloc::allocate_zeroed(nmemb * size);
} }
void* kmalloc(size_t size) void* kmalloc(size_t size)

View file

@ -13,7 +13,7 @@ ALWAYS_INLINE size_t strlen(const char* str)
static constexpr const char* h = "0123456789abcdef"; static constexpr const char* h = "0123456789abcdef";
template<typename PutChFunc> template<typename PutChFunc>
ALWAYS_INLINE int printHex(PutChFunc putch, char*& bufptr, dword number, byte fields) ALWAYS_INLINE int print_hex(PutChFunc putch, char*& bufptr, dword number, byte fields)
{ {
int ret = 0; int ret = 0;
byte shr_count = fields * 4; byte shr_count = fields * 4;
@ -26,7 +26,7 @@ ALWAYS_INLINE int printHex(PutChFunc putch, char*& bufptr, dword number, byte fi
} }
template<typename PutChFunc> template<typename PutChFunc>
ALWAYS_INLINE int printNumber(PutChFunc putch, char*& bufptr, dword number, bool leftPad, bool zeroPad, dword fieldWidth) ALWAYS_INLINE int print_number(PutChFunc putch, char*& bufptr, dword number, bool leftPad, bool zeroPad, dword fieldWidth)
{ {
dword divisor = 1000000000; dword divisor = 1000000000;
char ch; char ch;
@ -108,7 +108,7 @@ ALWAYS_INLINE int print_octal_number(PutChFunc putch, char*& bufptr, dword numbe
} }
template<typename PutChFunc> template<typename PutChFunc>
ALWAYS_INLINE int printString(PutChFunc putch, char*& bufptr, const char* str, bool leftPad, dword fieldWidth) ALWAYS_INLINE int print_string(PutChFunc putch, char*& bufptr, const char* str, bool leftPad, dword fieldWidth)
{ {
size_t len = strlen(str); size_t len = strlen(str);
if (!fieldWidth || fieldWidth < len) if (!fieldWidth || fieldWidth < len)
@ -129,17 +129,17 @@ ALWAYS_INLINE int printString(PutChFunc putch, char*& bufptr, const char* str, b
template<typename PutChFunc> template<typename PutChFunc>
ALWAYS_INLINE int printSignedNumber(PutChFunc putch, char*& bufptr, int number, bool leftPad, bool zeroPad, dword fieldWidth) ALWAYS_INLINE int print_signed_number(PutChFunc putch, char*& bufptr, int number, bool leftPad, bool zeroPad, dword fieldWidth)
{ {
if (number < 0) { if (number < 0) {
putch(bufptr, '-'); putch(bufptr, '-');
return printNumber(putch, bufptr, 0 - number, leftPad, zeroPad, fieldWidth) + 1; return print_number(putch, bufptr, 0 - number, leftPad, zeroPad, fieldWidth) + 1;
} }
return printNumber(putch, bufptr, number, leftPad, zeroPad, fieldWidth); return print_number(putch, bufptr, number, leftPad, zeroPad, fieldWidth);
} }
template<typename PutChFunc> template<typename PutChFunc>
ALWAYS_INLINE int printfInternal(PutChFunc putch, char* buffer, const char*& fmt, char*& ap) ALWAYS_INLINE int printf_internal(PutChFunc putch, char* buffer, const char*& fmt, char*& ap)
{ {
const char *p; const char *p;
@ -174,16 +174,16 @@ one_more:
case 's': case 's':
{ {
const char* sp = va_arg(ap, const char*); const char* sp = va_arg(ap, const char*);
ret += printString(putch, bufptr, sp ? sp : "(null)", leftPad, fieldWidth); ret += print_string(putch, bufptr, sp ? sp : "(null)", leftPad, fieldWidth);
} }
break; break;
case 'd': case 'd':
ret += printSignedNumber(putch, bufptr, va_arg(ap, int), leftPad, zeroPad, fieldWidth); ret += print_signed_number(putch, bufptr, va_arg(ap, int), leftPad, zeroPad, fieldWidth);
break; break;
case 'u': case 'u':
ret += printNumber(putch, bufptr, va_arg(ap, dword), leftPad, zeroPad, fieldWidth); ret += print_number(putch, bufptr, va_arg(ap, dword), leftPad, zeroPad, fieldWidth);
break; break;
case 'o': case 'o':
@ -191,15 +191,15 @@ one_more:
break; break;
case 'x': case 'x':
ret += printHex(putch, bufptr, va_arg(ap, dword), 8); ret += print_hex(putch, bufptr, va_arg(ap, dword), 8);
break; break;
case 'w': case 'w':
ret += printHex(putch, bufptr, va_arg(ap, int), 4); ret += print_hex(putch, bufptr, va_arg(ap, int), 4);
break; break;
case 'b': case 'b':
ret += printHex(putch, bufptr, va_arg(ap, int), 2); ret += print_hex(putch, bufptr, va_arg(ap, int), 2);
break; break;
case 'c': case 'c':
@ -211,7 +211,7 @@ one_more:
putch(bufptr, '0'); putch(bufptr, '0');
putch(bufptr, 'x'); putch(bufptr, 'x');
ret += 2; ret += 2;
ret += printHex(putch, bufptr, va_arg(ap, dword), 8); ret += print_hex(putch, bufptr, va_arg(ap, dword), 8);
break; break;
} }
} }

View file

@ -13,7 +13,7 @@
#include "FileSystemPath.h" #include "FileSystemPath.h"
#include "Lock.h" #include "Lock.h"
static void testWeakPtr(); static void test_weak_ptr();
void log_locked() { } void log_locked() { }
void log_unlocked() { } void log_unlocked() { }
@ -223,7 +223,7 @@ int main(int c, char** v)
} }
{ {
auto printInts = [] (const Vector<int>& v) { auto print_ints = [] (const Vector<int>& v) {
printf("Vector {\n size: %zu\n capacity: %zu\n elements: ", v.size(), v.capacity()); printf("Vector {\n size: %zu\n capacity: %zu\n elements: ", v.size(), v.capacity());
for (auto i : v) for (auto i : v)
printf("%d ", i); printf("%d ", i);
@ -235,23 +235,23 @@ int main(int c, char** v)
v.append(1); v.append(1);
v.append(2); v.append(2);
v.append(3); v.append(3);
printInts(v); print_ints(v);
v.remove(1); v.remove(1);
printInts(v); print_ints(v);
v.remove(0); v.remove(0);
printInts(v); print_ints(v);
v.remove(0); v.remove(0);
printInts(v); print_ints(v);
v.remove(0); v.remove(0);
printInts(v); print_ints(v);
} }
{ {
auto printInts = [] (const HashTable<int>& h) { auto print_ints = [] (const HashTable<int>& h) {
printf("HashTable {\n size: %u\n capacity: %u\n elements: ", h.size(), h.capacity()); printf("HashTable {\n size: %u\n capacity: %u\n elements: ", h.size(), h.capacity());
for (auto i : h) for (auto i : h)
printf("%d ", i); printf("%d ", i);
@ -268,17 +268,17 @@ int main(int c, char** v)
h.dump(); h.dump();
printInts(h); print_ints(h);
h.remove(30); h.remove(30);
printInts(h); print_ints(h);
h.set(30); h.set(30);
h.remove(30); h.remove(30);
printInts(h); print_ints(h);
} }
testWeakPtr(); test_weak_ptr();
return 0; return 0;
} }
@ -289,16 +289,16 @@ public:
~TestWeakable() { } ~TestWeakable() { }
}; };
void testWeakPtr() void test_weak_ptr()
{ {
auto* weakable = new TestWeakable; auto* weakable = new TestWeakable;
auto weakPtr = weakable->makeWeakPtr(); auto weak_ptr = weakable->make_weak_ptr();
ASSERT(weakPtr); ASSERT(weak_ptr);
ASSERT(weakPtr.ptr() == weakable); ASSERT(weak_ptr.ptr() == weakable);
delete weakable; delete weakable;
ASSERT(!weakPtr); ASSERT(!weak_ptr);
ASSERT(weakPtr.ptr() == nullptr); ASSERT(weak_ptr.ptr() == nullptr);
} }

View file

@ -26,7 +26,7 @@ public:
virtual ssize_t write(Process&, const byte* data, size_t size) override; virtual ssize_t write(Process&, const byte* data, size_t size) override;
virtual const char* class_name() const override { return "Console"; } virtual const char* class_name() const override { return "Console"; }
void setImplementation(ConsoleImplementation* implementation) { m_implementation = implementation; } void set_implementation(ConsoleImplementation* implementation) { m_implementation = implementation; }
void put_char(char); void put_char(char);

View file

@ -42,7 +42,7 @@ RetainPtr<SynthFSInode> DevPtsFS::create_slave_pty_device_file(unsigned index)
StringBuilder builder; StringBuilder builder;
builder.appendf("%u", index); builder.appendf("%u", index);
file->m_name = builder.build(); file->m_name = builder.to_string();
auto* device = VFS::the().get_device(11, index); auto* device = VFS::the().get_device(11, index);
ASSERT(device); ASSERT(device);
@ -51,8 +51,8 @@ RetainPtr<SynthFSInode> DevPtsFS::create_slave_pty_device_file(unsigned index)
file->m_metadata.uid = device->uid(); file->m_metadata.uid = device->uid();
file->m_metadata.gid = device->gid(); file->m_metadata.gid = device->gid();
file->m_metadata.mode = 0020644; file->m_metadata.mode = 0020644;
file->m_metadata.majorDevice = device->major(); file->m_metadata.major_device = device->major();
file->m_metadata.minorDevice = device->minor(); file->m_metadata.minor_device = device->minor();
file->m_metadata.mtime = mepoch; file->m_metadata.mtime = mepoch;
return file; return file;
} }

View file

@ -13,63 +13,63 @@ DiskBackedFS::~DiskBackedFS()
{ {
} }
bool DiskBackedFS::writeBlock(unsigned index, const ByteBuffer& data) bool DiskBackedFS::write_block(unsigned index, const ByteBuffer& data)
{ {
#ifdef DBFS_DEBUG #ifdef DBFS_DEBUG
kprintf("DiskBackedFileSystem::writeBlock %u, size=%u\n", index, data.size()); kprintf("DiskBackedFileSystem::write_block %u, size=%u\n", index, data.size());
#endif #endif
ASSERT(data.size() == blockSize()); ASSERT(data.size() == block_size());
DiskOffset baseOffset = static_cast<DiskOffset>(index) * static_cast<DiskOffset>(blockSize()); DiskOffset base_offset = static_cast<DiskOffset>(index) * static_cast<DiskOffset>(block_size());
return device().write(baseOffset, blockSize(), data.pointer()); return device().write(base_offset, block_size(), data.pointer());
} }
bool DiskBackedFS::writeBlocks(unsigned index, unsigned count, const ByteBuffer& data) bool DiskBackedFS::write_blocks(unsigned index, unsigned count, const ByteBuffer& data)
{ {
#ifdef DBFS_DEBUG #ifdef DBFS_DEBUG
kprintf("DiskBackedFileSystem::writeBlocks %u x%u\n", index, count); kprintf("DiskBackedFileSystem::write_blocks %u x%u\n", index, count);
#endif #endif
DiskOffset baseOffset = static_cast<DiskOffset>(index) * static_cast<DiskOffset>(blockSize()); DiskOffset base_offset = static_cast<DiskOffset>(index) * static_cast<DiskOffset>(block_size());
return device().write(baseOffset, count * blockSize(), data.pointer()); return device().write(base_offset, count * block_size(), data.pointer());
} }
ByteBuffer DiskBackedFS::readBlock(unsigned index) const ByteBuffer DiskBackedFS::read_block(unsigned index) const
{ {
#ifdef DBFS_DEBUG #ifdef DBFS_DEBUG
kprintf("DiskBackedFileSystem::readBlock %u\n", index); kprintf("DiskBackedFileSystem::read_block %u\n", index);
#endif #endif
auto buffer = ByteBuffer::create_uninitialized(blockSize()); auto buffer = ByteBuffer::create_uninitialized(block_size());
//kprintf("created block buffer with size %u\n", blockSize()); //kprintf("created block buffer with size %u\n", block_size());
DiskOffset baseOffset = static_cast<DiskOffset>(index) * static_cast<DiskOffset>(blockSize()); DiskOffset base_offset = static_cast<DiskOffset>(index) * static_cast<DiskOffset>(block_size());
auto* bufferPointer = buffer.pointer(); auto* buffer_pointer = buffer.pointer();
bool success = device().read(baseOffset, blockSize(), bufferPointer); bool success = device().read(base_offset, block_size(), buffer_pointer);
ASSERT(success); ASSERT(success);
ASSERT(buffer.size() == blockSize()); ASSERT(buffer.size() == block_size());
return buffer; return buffer;
} }
ByteBuffer DiskBackedFS::readBlocks(unsigned index, unsigned count) const ByteBuffer DiskBackedFS::read_blocks(unsigned index, unsigned count) const
{ {
if (!count) if (!count)
return nullptr; return nullptr;
if (count == 1) if (count == 1)
return readBlock(index); return read_block(index);
auto blocks = ByteBuffer::create_uninitialized(count * blockSize()); auto blocks = ByteBuffer::create_uninitialized(count * block_size());
byte* out = blocks.pointer(); byte* out = blocks.pointer();
for (unsigned i = 0; i < count; ++i) { for (unsigned i = 0; i < count; ++i) {
auto block = readBlock(index + i); auto block = read_block(index + i);
if (!block) if (!block)
return nullptr; return nullptr;
memcpy(out, block.pointer(), block.size()); memcpy(out, block.pointer(), block.size());
out += blockSize(); out += block_size();
} }
return blocks; return blocks;
} }
void DiskBackedFS::setBlockSize(unsigned blockSize) void DiskBackedFS::set_block_size(unsigned block_size)
{ {
if (blockSize == m_blockSize) if (block_size == m_block_size)
return; return;
m_blockSize = blockSize; m_block_size = block_size;
} }

View file

@ -10,20 +10,20 @@ public:
DiskDevice& device() { return *m_device; } DiskDevice& device() { return *m_device; }
const DiskDevice& device() const { return *m_device; } const DiskDevice& device() const { return *m_device; }
size_t blockSize() const { return m_blockSize; } size_t block_size() const { return m_block_size; }
protected: protected:
explicit DiskBackedFS(RetainPtr<DiskDevice>&&); explicit DiskBackedFS(RetainPtr<DiskDevice>&&);
void setBlockSize(unsigned); void set_block_size(unsigned);
ByteBuffer readBlock(unsigned index) const; ByteBuffer read_block(unsigned index) const;
ByteBuffer readBlocks(unsigned index, unsigned count) const; ByteBuffer read_blocks(unsigned index, unsigned count) const;
bool writeBlock(unsigned index, const ByteBuffer&); bool write_block(unsigned index, const ByteBuffer&);
bool writeBlocks(unsigned index, unsigned count, const ByteBuffer&); bool write_blocks(unsigned index, unsigned count, const ByteBuffer&);
private: private:
size_t m_blockSize { 0 }; size_t m_block_size { 0 };
RetainPtr<DiskDevice> m_device; RetainPtr<DiskDevice> m_device;
}; };

View file

@ -13,10 +13,10 @@ bool DiskDevice::read(DiskOffset offset, unsigned length, byte* out) const
//kprintf("DD::read %u x%u\n", offset, length); //kprintf("DD::read %u x%u\n", offset, length);
ASSERT((offset % block_size()) == 0); ASSERT((offset % block_size()) == 0);
ASSERT((length % block_size()) == 0); ASSERT((length % block_size()) == 0);
dword firstBlock = offset / block_size(); dword first_block = offset / block_size();
dword endBlock = (offset + length) / block_size(); dword end_block = (offset + length) / block_size();
byte* outptr = out; byte* outptr = out;
for (unsigned bi = firstBlock; bi < endBlock; ++bi) { for (unsigned bi = first_block; bi < end_block; ++bi) {
if (!read_block(bi, outptr)) if (!read_block(bi, outptr))
return false; return false;
outptr += block_size(); outptr += block_size();
@ -28,12 +28,12 @@ bool DiskDevice::write(DiskOffset offset, unsigned length, const byte* in)
{ {
ASSERT((offset % block_size()) == 0); ASSERT((offset % block_size()) == 0);
ASSERT((length % block_size()) == 0); ASSERT((length % block_size()) == 0);
dword firstBlock = offset / block_size(); dword first_block = offset / block_size();
dword endBlock = (offset + length) / block_size(); dword end_block = (offset + length) / block_size();
ASSERT(firstBlock <= 0xffffffff); ASSERT(first_block <= 0xffffffff);
ASSERT(endBlock <= 0xffffffff); ASSERT(end_block <= 0xffffffff);
const byte* inptr = in; const byte* inptr = in;
for (unsigned bi = firstBlock; bi < endBlock; ++bi) { for (unsigned bi = first_block; bi < end_block; ++bi) {
if (!write_block(bi, inptr)) if (!write_block(bi, inptr))
return false; return false;
inptr += block_size(); inptr += block_size();

View file

@ -11,7 +11,7 @@ ELFImage::~ELFImage()
{ {
} }
static const char* objectFileTypeToString(Elf32_Half type) static const char* object_file_type_to_string(Elf32_Half type)
{ {
switch (type) { switch (type) {
case ET_NONE: return "None"; case ET_NONE: return "None";
@ -40,14 +40,14 @@ unsigned ELFImage::symbol_count() const
void ELFImage::dump() void ELFImage::dump()
{ {
kprintf("ELFImage{%p} {\n", this); kprintf("ELFImage{%p} {\n", this);
kprintf(" isValid: %u\n", is_valid()); kprintf(" is_valid: %u\n", is_valid());
if (!is_valid()) { if (!is_valid()) {
kprintf("}\n"); kprintf("}\n");
return; return;
} }
kprintf(" type: %s\n", objectFileTypeToString(header().e_type)); kprintf(" type: %s\n", object_file_type_to_string(header().e_type));
kprintf(" machine: %u\n", header().e_machine); kprintf(" machine: %u\n", header().e_machine);
kprintf(" entry: %x\n", header().e_entry); kprintf(" entry: %x\n", header().e_entry);
kprintf(" shoff: %u\n", header().e_shoff); kprintf(" shoff: %u\n", header().e_shoff);
@ -158,8 +158,8 @@ const Elf32_Shdr& ELFImage::section_header(unsigned index) const
const ELFImage::Symbol ELFImage::symbol(unsigned index) const const ELFImage::Symbol ELFImage::symbol(unsigned index) const
{ {
ASSERT(index < symbol_count()); ASSERT(index < symbol_count());
auto* rawSyms = reinterpret_cast<const Elf32_Sym*>(raw_data(section(m_symbol_table_section_index).offset())); auto* raw_syms = reinterpret_cast<const Elf32_Sym*>(raw_data(section(m_symbol_table_section_index).offset()));
return Symbol(*this, index, rawSyms[index]); return Symbol(*this, index, raw_syms[index]);
} }
const ELFImage::Section ELFImage::section(unsigned index) const const ELFImage::Section ELFImage::section(unsigned index) const
@ -185,23 +185,23 @@ const ELFImage::Relocation ELFImage::RelocationSection::relocation(unsigned inde
const ELFImage::RelocationSection ELFImage::Section::relocations() const const ELFImage::RelocationSection ELFImage::Section::relocations() const
{ {
// FIXME: This is ugly. // FIXME: This is ugly.
char relocationSectionName[128]; char relocation_sectionName[128];
ksprintf(relocationSectionName, ".rel%s", name()); ksprintf(relocation_sectionName, ".rel%s", name());
#ifdef ELFIMAGE_DEBUG #ifdef ELFIMAGE_DEBUG
kprintf("looking for '%s'\n", relocationSectionName); kprintf("looking for '%s'\n", relocation_sectionName);
#endif #endif
auto relocationSection = m_image.lookupSection(relocationSectionName); auto relocation_section = m_image.lookup_section(relocation_sectionName);
if (relocationSection.type() != SHT_REL) if (relocation_section.type() != SHT_REL)
return static_cast<const RelocationSection>(m_image.section(0)); return static_cast<const RelocationSection>(m_image.section(0));
#ifdef ELFIMAGE_DEBUG #ifdef ELFIMAGE_DEBUG
kprintf("Found relocations for %s in %s\n", name(), relocationSection.name()); kprintf("Found relocations for %s in %s\n", name(), relocation_section.name());
#endif #endif
return static_cast<const RelocationSection>(relocationSection); return static_cast<const RelocationSection>(relocation_section);
} }
const ELFImage::Section ELFImage::lookupSection(const char* name) const const ELFImage::Section ELFImage::lookup_section(const char* name) const
{ {
if (auto it = m_sections.find(name); it != m_sections.end()) if (auto it = m_sections.find(name); it != m_sections.end())
return section((*it).value); return section((*it).value);

View file

@ -150,7 +150,7 @@ public:
// NOTE: Returns section(0) if section with name is not found. // NOTE: Returns section(0) if section with name is not found.
// FIXME: I don't love this API. // FIXME: I don't love this API.
const Section lookupSection(const char* name) const; const Section lookup_section(const char* name) const;
bool is_executable() const { return header().e_type == ET_EXEC; } bool is_executable() const { return header().e_type == ET_EXEC; }
bool is_relocatable() const { return header().e_type == ET_REL; } bool is_relocatable() const { return header().e_type == ET_REL; }
@ -158,7 +158,7 @@ public:
LinearAddress entry() const { return LinearAddress(header().e_entry); } LinearAddress entry() const { return LinearAddress(header().e_entry); }
private: private:
bool parseHeader(); bool parse_header();
const char* raw_data(unsigned offset) const; const char* raw_data(unsigned offset) const;
const Elf32_Ehdr& header() const; const Elf32_Ehdr& header() const;
const Elf32_Shdr& section_header(unsigned) const; const Elf32_Shdr& section_header(unsigned) const;

View file

@ -142,7 +142,7 @@ bool ELFLoader::perform_relocations()
failed = true; failed = true;
return false; return false;
} }
ptrdiff_t relativeOffset = (char*)target_ptr - ((char*)&patch_ptr + 4); ptrdiff_t relative_offset = (char*)target_ptr - ((char*)&patch_ptr + 4);
#ifdef ELFLOADER_DEBUG #ifdef ELFLOADER_DEBUG
kprintf("ELFLoader: Relocate PC32: offset=%x, symbol=%u(%s) value=%x target=%p, offset=%d\n", kprintf("ELFLoader: Relocate PC32: offset=%x, symbol=%u(%s) value=%x target=%p, offset=%d\n",
relocation.offset(), relocation.offset(),
@ -150,10 +150,10 @@ bool ELFLoader::perform_relocations()
symbol.name(), symbol.name(),
symbol.value(), symbol.value(),
target_ptr, target_ptr,
relativeOffset relative_offset
); );
#endif #endif
patch_ptr = relativeOffset; patch_ptr = relative_offset;
break; break;
} }
case R_386_32: { case R_386_32: {

View file

@ -62,45 +62,45 @@ const ext2_super_block& Ext2FS::super_block() const
const ext2_group_desc& Ext2FS::group_descriptor(unsigned groupIndex) const const ext2_group_desc& Ext2FS::group_descriptor(unsigned groupIndex) const
{ {
// FIXME: Should this fail gracefully somehow? // FIXME: Should this fail gracefully somehow?
ASSERT(groupIndex <= m_blockGroupCount); ASSERT(groupIndex <= m_block_group_count);
if (!m_cached_group_descriptor_table) { if (!m_cached_group_descriptor_table) {
unsigned blocksToRead = ceilDiv(m_blockGroupCount * (unsigned)sizeof(ext2_group_desc), blockSize()); unsigned blocks_to_read = ceil_div(m_block_group_count * (unsigned)sizeof(ext2_group_desc), block_size());
unsigned firstBlockOfBGDT = blockSize() == 1024 ? 2 : 1; unsigned first_block_of_bgdt = block_size() == 1024 ? 2 : 1;
#ifdef EXT2_DEBUG #ifdef EXT2_DEBUG
kprintf("ext2fs: block group count: %u, blocks-to-read: %u\n", m_blockGroupCount, blocksToRead); kprintf("ext2fs: block group count: %u, blocks-to-read: %u\n", m_block_group_count, blocks_to_read);
kprintf("ext2fs: first block of BGDT: %u\n", firstBlockOfBGDT); kprintf("ext2fs: first block of BGDT: %u\n", first_block_of_bgdt);
#endif #endif
m_cached_group_descriptor_table = readBlocks(firstBlockOfBGDT, blocksToRead); m_cached_group_descriptor_table = read_blocks(first_block_of_bgdt, blocks_to_read);
} }
return reinterpret_cast<ext2_group_desc*>(m_cached_group_descriptor_table.pointer())[groupIndex - 1]; return reinterpret_cast<ext2_group_desc*>(m_cached_group_descriptor_table.pointer())[groupIndex - 1];
} }
bool Ext2FS::initialize() bool Ext2FS::initialize()
{ {
auto& superBlock = this->super_block(); auto& super_block = this->super_block();
#ifdef EXT2_DEBUG #ifdef EXT2_DEBUG
kprintf("ext2fs: super block magic: %x (super block size: %u)\n", superBlock.s_magic, sizeof(ext2_super_block)); kprintf("ext2fs: super block magic: %x (super block size: %u)\n", super_block.s_magic, sizeof(ext2_super_block));
#endif #endif
if (superBlock.s_magic != EXT2_SUPER_MAGIC) if (super_block.s_magic != EXT2_SUPER_MAGIC)
return false; return false;
#ifdef EXT2_DEBUG #ifdef EXT2_DEBUG
kprintf("ext2fs: %u inodes, %u blocks\n", superBlock.s_inodes_count, superBlock.s_blocks_count); kprintf("ext2fs: %u inodes, %u blocks\n", super_block.s_inodes_count, super_block.s_blocks_count);
kprintf("ext2fs: block size = %u\n", EXT2_BLOCK_SIZE(&superBlock)); kprintf("ext2fs: block size = %u\n", EXT2_BLOCK_SIZE(&super_block));
kprintf("ext2fs: first data block = %u\n", superBlock.s_first_data_block); kprintf("ext2fs: first data block = %u\n", super_block.s_first_data_block);
kprintf("ext2fs: inodes per block = %u\n", inodes_per_block()); kprintf("ext2fs: inodes per block = %u\n", inodes_per_block());
kprintf("ext2fs: inodes per group = %u\n", inodes_per_group()); kprintf("ext2fs: inodes per group = %u\n", inodes_per_group());
kprintf("ext2fs: free inodes = %u\n", superBlock.s_free_inodes_count); kprintf("ext2fs: free inodes = %u\n", super_block.s_free_inodes_count);
kprintf("ext2fs: desc per block = %u\n", EXT2_DESC_PER_BLOCK(&superBlock)); kprintf("ext2fs: desc per block = %u\n", EXT2_DESC_PER_BLOCK(&super_block));
kprintf("ext2fs: desc size = %u\n", EXT2_DESC_SIZE(&superBlock)); kprintf("ext2fs: desc size = %u\n", EXT2_DESC_SIZE(&super_block));
#endif #endif
setBlockSize(EXT2_BLOCK_SIZE(&superBlock)); set_block_size(EXT2_BLOCK_SIZE(&super_block));
m_blockGroupCount = ceilDiv(superBlock.s_blocks_count, superBlock.s_blocks_per_group); m_block_group_count = ceil_div(super_block.s_blocks_count, super_block.s_blocks_per_group);
if (m_blockGroupCount == 0) { if (m_block_group_count == 0) {
kprintf("ext2fs: no block groups :(\n"); kprintf("ext2fs: no block groups :(\n");
return false; return false;
} }
@ -109,7 +109,7 @@ bool Ext2FS::initialize()
group_descriptor(0); group_descriptor(0);
#ifdef EXT2_DEBUG #ifdef EXT2_DEBUG
for (unsigned i = 1; i <= m_blockGroupCount; ++i) { for (unsigned i = 1; i <= m_block_group_count; ++i) {
auto& group = group_descriptor(i); auto& group = group_descriptor(i);
kprintf("ext2fs: group[%u] { block_bitmap: %u, inode_bitmap: %u, inode_table: %u }\n", kprintf("ext2fs: group[%u] { block_bitmap: %u, inode_bitmap: %u, inode_table: %u }\n",
i, i,
@ -132,23 +132,23 @@ InodeIdentifier Ext2FS::root_inode() const
return { fsid(), EXT2_ROOT_INO }; return { fsid(), EXT2_ROOT_INO };
} }
ByteBuffer Ext2FS::read_block_containing_inode(unsigned inode, unsigned& blockIndex, unsigned& offset) const ByteBuffer Ext2FS::read_block_containing_inode(unsigned inode, unsigned& block_index, unsigned& offset) const
{ {
auto& superBlock = this->super_block(); auto& super_block = this->super_block();
if (inode != EXT2_ROOT_INO && inode < EXT2_FIRST_INO(&superBlock)) if (inode != EXT2_ROOT_INO && inode < EXT2_FIRST_INO(&super_block))
return { }; return { };
if (inode > superBlock.s_inodes_count) if (inode > super_block.s_inodes_count)
return { }; return { };
auto& bgd = group_descriptor(group_index_from_inode(inode)); auto& bgd = group_descriptor(group_index_from_inode(inode));
offset = ((inode - 1) % inodes_per_group()) * inode_size(); offset = ((inode - 1) % inodes_per_group()) * inode_size();
blockIndex = bgd.bg_inode_table + (offset >> EXT2_BLOCK_SIZE_BITS(&superBlock)); block_index = bgd.bg_inode_table + (offset >> EXT2_BLOCK_SIZE_BITS(&super_block));
offset &= blockSize() - 1; offset &= block_size() - 1;
return readBlock(blockIndex); return read_block(block_index);
} }
Ext2FS::BlockListShape Ext2FS::compute_block_list_shape(unsigned blocks) Ext2FS::BlockListShape Ext2FS::compute_block_list_shape(unsigned blocks)
@ -192,7 +192,7 @@ bool Ext2FS::write_block_list_for_inode(InodeIndex inode_index, ext2_inode& e2in
set_block_allocation_state(group_index_from_inode(inode_index), bi, true); set_block_allocation_state(group_index_from_inode(inode_index), bi, true);
} }
e2inode.i_blocks = (blocks.size() + new_shape.meta_blocks) * (blockSize() / 512); e2inode.i_blocks = (blocks.size() + new_shape.meta_blocks) * (block_size() / 512);
unsigned output_block_index = 0; unsigned output_block_index = 0;
unsigned remaining_blocks = blocks.size(); unsigned remaining_blocks = blocks.size();
@ -212,7 +212,7 @@ bool Ext2FS::write_block_list_for_inode(InodeIndex inode_index, ext2_inode& e2in
{ {
dbgprintf("Ext2FS: Writing out indirect blockptr block for inode %u\n", inode_index); dbgprintf("Ext2FS: Writing out indirect blockptr block for inode %u\n", inode_index);
auto block_contents = ByteBuffer::create_uninitialized(blockSize()); auto block_contents = ByteBuffer::create_uninitialized(block_size());
BufferStream stream(block_contents); BufferStream stream(block_contents);
ASSERT(new_shape.indirect_blocks <= EXT2_ADDR_PER_BLOCK(&super_block())); ASSERT(new_shape.indirect_blocks <= EXT2_ADDR_PER_BLOCK(&super_block()));
for (unsigned i = 0; i < new_shape.indirect_blocks; ++i) { for (unsigned i = 0; i < new_shape.indirect_blocks; ++i) {
@ -220,7 +220,7 @@ bool Ext2FS::write_block_list_for_inode(InodeIndex inode_index, ext2_inode& e2in
--remaining_blocks; --remaining_blocks;
} }
stream.fill_to_end(0); stream.fill_to_end(0);
writeBlock(e2inode.i_block[EXT2_IND_BLOCK], block_contents); write_block(e2inode.i_block[EXT2_IND_BLOCK], block_contents);
} }
if (!remaining_blocks) if (!remaining_blocks)
@ -232,11 +232,11 @@ bool Ext2FS::write_block_list_for_inode(InodeIndex inode_index, ext2_inode& e2in
Vector<unsigned> Ext2FS::block_list_for_inode(const ext2_inode& e2inode, bool include_block_list_blocks) const Vector<unsigned> Ext2FS::block_list_for_inode(const ext2_inode& e2inode, bool include_block_list_blocks) const
{ {
unsigned entriesPerBlock = EXT2_ADDR_PER_BLOCK(&super_block()); unsigned entries_per_block = EXT2_ADDR_PER_BLOCK(&super_block());
// NOTE: i_blocks is number of 512-byte blocks, not number of fs-blocks. // NOTE: i_blocks is number of 512-byte blocks, not number of fs-blocks.
unsigned blockCount = e2inode.i_blocks / (blockSize() / 512); unsigned block_count = e2inode.i_blocks / (block_size() / 512);
unsigned blocksRemaining = blockCount; unsigned blocksRemaining = block_count;
Vector<unsigned> list; Vector<unsigned> list;
if (include_block_list_blocks) { if (include_block_list_blocks) {
// This seems like an excessive over-estimate but w/e. // This seems like an excessive over-estimate but w/e.
@ -245,8 +245,8 @@ Vector<unsigned> Ext2FS::block_list_for_inode(const ext2_inode& e2inode, bool in
list.ensure_capacity(blocksRemaining); list.ensure_capacity(blocksRemaining);
} }
unsigned directCount = min(blockCount, (unsigned)EXT2_NDIR_BLOCKS); unsigned direct_count = min(block_count, (unsigned)EXT2_NDIR_BLOCKS);
for (unsigned i = 0; i < directCount; ++i) { for (unsigned i = 0; i < direct_count; ++i) {
list.unchecked_append(e2inode.i_block[i]); list.unchecked_append(e2inode.i_block[i]);
--blocksRemaining; --blocksRemaining;
} }
@ -254,13 +254,13 @@ Vector<unsigned> Ext2FS::block_list_for_inode(const ext2_inode& e2inode, bool in
if (!blocksRemaining) if (!blocksRemaining)
return list; return list;
auto processBlockArray = [&] (unsigned arrayBlockIndex, auto&& callback) { auto process_block_array = [&] (unsigned array_block_index, auto&& callback) {
if (include_block_list_blocks) if (include_block_list_blocks)
callback(arrayBlockIndex); callback(array_block_index);
auto arrayBlock = readBlock(arrayBlockIndex); auto array_block = read_block(array_block_index);
ASSERT(arrayBlock); ASSERT(array_block);
auto* array = reinterpret_cast<const __u32*>(arrayBlock.pointer()); auto* array = reinterpret_cast<const __u32*>(array_block.pointer());
unsigned count = min(blocksRemaining, entriesPerBlock); unsigned count = min(blocksRemaining, entries_per_block);
for (unsigned i = 0; i < count; ++i) { for (unsigned i = 0; i < count; ++i) {
if (!array[i]) { if (!array[i]) {
blocksRemaining = 0; blocksRemaining = 0;
@ -271,15 +271,15 @@ Vector<unsigned> Ext2FS::block_list_for_inode(const ext2_inode& e2inode, bool in
} }
}; };
processBlockArray(e2inode.i_block[EXT2_IND_BLOCK], [&] (unsigned entry) { process_block_array(e2inode.i_block[EXT2_IND_BLOCK], [&] (unsigned entry) {
list.unchecked_append(entry); list.unchecked_append(entry);
}); });
if (!blocksRemaining) if (!blocksRemaining)
return list; return list;
processBlockArray(e2inode.i_block[EXT2_DIND_BLOCK], [&] (unsigned entry) { process_block_array(e2inode.i_block[EXT2_DIND_BLOCK], [&] (unsigned entry) {
processBlockArray(entry, [&] (unsigned entry) { process_block_array(entry, [&] (unsigned entry) {
list.unchecked_append(entry); list.unchecked_append(entry);
}); });
}); });
@ -287,9 +287,9 @@ Vector<unsigned> Ext2FS::block_list_for_inode(const ext2_inode& e2inode, bool in
if (!blocksRemaining) if (!blocksRemaining)
return list; return list;
processBlockArray(e2inode.i_block[EXT2_TIND_BLOCK], [&] (unsigned entry) { process_block_array(e2inode.i_block[EXT2_TIND_BLOCK], [&] (unsigned entry) {
processBlockArray(entry, [&] (unsigned entry) { process_block_array(entry, [&] (unsigned entry) {
processBlockArray(entry, [&] (unsigned entry) { process_block_array(entry, [&] (unsigned entry) {
list.unchecked_append(entry); list.unchecked_append(entry);
}); });
}); });
@ -324,9 +324,9 @@ void Ext2FS::free_inode(Ext2FSInode& inode)
void Ext2FS::flush_block_group_descriptor_table() void Ext2FS::flush_block_group_descriptor_table()
{ {
unsigned blocks_to_write = ceilDiv(m_blockGroupCount * (unsigned)sizeof(ext2_group_desc), blockSize()); unsigned blocks_to_write = ceil_div(m_block_group_count * (unsigned)sizeof(ext2_group_desc), block_size());
unsigned first_block_of_bgdt = blockSize() == 1024 ? 2 : 1; unsigned first_block_of_bgdt = block_size() == 1024 ? 2 : 1;
writeBlocks(first_block_of_bgdt, blocks_to_write, m_cached_group_descriptor_table); write_blocks(first_block_of_bgdt, blocks_to_write, m_cached_group_descriptor_table);
} }
Ext2FSInode::Ext2FSInode(Ext2FS& fs, unsigned index, const ext2_inode& raw_inode) Ext2FSInode::Ext2FSInode(Ext2FS& fs, unsigned index, const ext2_inode& raw_inode)
@ -349,18 +349,18 @@ InodeMetadata Ext2FSInode::metadata() const
metadata.mode = m_raw_inode.i_mode; metadata.mode = m_raw_inode.i_mode;
metadata.uid = m_raw_inode.i_uid; metadata.uid = m_raw_inode.i_uid;
metadata.gid = m_raw_inode.i_gid; metadata.gid = m_raw_inode.i_gid;
metadata.linkCount = m_raw_inode.i_links_count; metadata.link_count = m_raw_inode.i_links_count;
metadata.atime = m_raw_inode.i_atime; metadata.atime = m_raw_inode.i_atime;
metadata.ctime = m_raw_inode.i_ctime; metadata.ctime = m_raw_inode.i_ctime;
metadata.mtime = m_raw_inode.i_mtime; metadata.mtime = m_raw_inode.i_mtime;
metadata.dtime = m_raw_inode.i_dtime; metadata.dtime = m_raw_inode.i_dtime;
metadata.blockSize = fs().blockSize(); metadata.block_size = fs().block_size();
metadata.blockCount = m_raw_inode.i_blocks; metadata.block_count = m_raw_inode.i_blocks;
if (isBlockDevice(m_raw_inode.i_mode) || isCharacterDevice(m_raw_inode.i_mode)) { if (::is_block_device(m_raw_inode.i_mode) || ::is_character_device(m_raw_inode.i_mode)) {
unsigned dev = m_raw_inode.i_block[0]; unsigned dev = m_raw_inode.i_block[0];
metadata.majorDevice = (dev & 0xfff00) >> 8; metadata.major_device = (dev & 0xfff00) >> 8;
metadata.minorDevice = (dev & 0xff) | ((dev >> 12) & 0xfff00); metadata.minor_device = (dev & 0xff) | ((dev >> 12) & 0xfff00);
} }
return metadata; return metadata;
} }
@ -414,7 +414,7 @@ RetainPtr<Inode> Ext2FS::get_inode(InodeIdentifier inode) const
if (it != m_inode_cache.end()) if (it != m_inode_cache.end())
return (*it).value; return (*it).value;
auto new_inode = adopt(*new Ext2FSInode(const_cast<Ext2FS&>(*this), inode.index(), *raw_inode)); auto new_inode = adopt(*new Ext2FSInode(const_cast<Ext2FS&>(*this), inode.index(), *raw_inode));
m_inode_cache.set(inode.index(), new_inode.copyRef()); m_inode_cache.set(inode.index(), new_inode.copy_ref());
return new_inode; return new_inode;
} }
@ -445,7 +445,7 @@ ssize_t Ext2FSInode::read_bytes(off_t offset, size_t count, byte* buffer, FileDe
return -EIO; return -EIO;
} }
const size_t block_size = fs().blockSize(); const size_t block_size = fs().block_size();
dword first_block_logical_index = offset / block_size; dword first_block_logical_index = offset / block_size;
dword last_block_logical_index = (offset + count) / block_size; dword last_block_logical_index = (offset + count) / block_size;
@ -464,9 +464,9 @@ ssize_t Ext2FSInode::read_bytes(off_t offset, size_t count, byte* buffer, FileDe
#endif #endif
for (dword bi = first_block_logical_index; remaining_count && bi <= last_block_logical_index; ++bi) { for (dword bi = first_block_logical_index; remaining_count && bi <= last_block_logical_index; ++bi) {
auto block = fs().readBlock(m_block_list[bi]); auto block = fs().read_block(m_block_list[bi]);
if (!block) { if (!block) {
kprintf("ext2fs: read_bytes: readBlock(%u) failed (lbi: %u)\n", m_block_list[bi], bi); kprintf("ext2fs: read_bytes: read_block(%u) failed (lbi: %u)\n", m_block_list[bi], bi);
return -EIO; return -EIO;
} }
@ -490,11 +490,11 @@ ssize_t Ext2FSInode::write_bytes(off_t offset, size_t count, const byte* data, F
ASSERT(offset >= 0); ASSERT(offset >= 0);
const size_t block_size = fs().blockSize(); const size_t block_size = fs().block_size();
size_t new_size = max(static_cast<size_t>(offset) + count, size()); size_t new_size = max(static_cast<size_t>(offset) + count, size());
unsigned blocks_needed_before = ceilDiv(size(), block_size); unsigned blocks_needed_before = ceil_div(size(), block_size);
unsigned blocks_needed_after = ceilDiv(new_size, block_size); unsigned blocks_needed_after = ceil_div(new_size, block_size);
auto block_list = fs().block_list_for_inode(m_raw_inode); auto block_list = fs().block_list_for_inode(m_raw_inode);
if (blocks_needed_after > blocks_needed_before) { if (blocks_needed_after > blocks_needed_before) {
@ -529,9 +529,9 @@ ssize_t Ext2FSInode::write_bytes(off_t offset, size_t count, const byte* data, F
ByteBuffer block; ByteBuffer block;
if (offset_into_block != 0) { if (offset_into_block != 0) {
block = fs().readBlock(block_list[bi]); block = fs().read_block(block_list[bi]);
if (!block) { if (!block) {
kprintf("Ext2FSInode::write_bytes: readBlock(%u) failed (lbi: %u)\n", block_list[bi], bi); kprintf("Ext2FSInode::write_bytes: read_block(%u) failed (lbi: %u)\n", block_list[bi], bi);
return -EIO; return -EIO;
} }
} else } else
@ -543,9 +543,9 @@ ssize_t Ext2FSInode::write_bytes(off_t offset, size_t count, const byte* data, F
#ifdef EXT2_DEBUG #ifdef EXT2_DEBUG
dbgprintf("Ext2FSInode::write_bytes: writing block %u (offset_into_block: %u)\n", block_list[bi], offset_into_block); dbgprintf("Ext2FSInode::write_bytes: writing block %u (offset_into_block: %u)\n", block_list[bi], offset_into_block);
#endif #endif
bool success = fs().writeBlock(block_list[bi], block); bool success = fs().write_block(block_list[bi], block);
if (!success) { if (!success) {
kprintf("Ext2FSInode::write_bytes: writeBlock(%u) failed (lbi: %u)\n", block_list[bi], bi); kprintf("Ext2FSInode::write_bytes: write_block(%u) failed (lbi: %u)\n", block_list[bi], bi);
return -EIO; return -EIO;
} }
remaining_count -= num_bytes_to_copy; remaining_count -= num_bytes_to_copy;
@ -569,7 +569,7 @@ ssize_t Ext2FSInode::write_bytes(off_t offset, size_t count, const byte* data, F
bool Ext2FSInode::traverse_as_directory(Function<bool(const FS::DirectoryEntry&)> callback) const bool Ext2FSInode::traverse_as_directory(Function<bool(const FS::DirectoryEntry&)> callback) const
{ {
ASSERT(metadata().isDirectory()); ASSERT(metadata().is_directory());
#ifdef EXT2_DEBUG #ifdef EXT2_DEBUG
kprintf("Ext2Inode::traverse_as_directory: inode=%u:\n", index()); kprintf("Ext2Inode::traverse_as_directory: inode=%u:\n", index());
@ -676,40 +676,40 @@ bool Ext2FS::write_directory_inode(unsigned directoryInode, Vector<DirectoryEntr
{ {
dbgprintf("Ext2FS: New directory inode %u contents to write:\n", directoryInode); dbgprintf("Ext2FS: New directory inode %u contents to write:\n", directoryInode);
unsigned directorySize = 0; unsigned directory_size = 0;
for (auto& entry : entries) { for (auto& entry : entries) {
//kprintf(" - %08u %s\n", entry.inode.index(), entry.name); //kprintf(" - %08u %s\n", entry.inode.index(), entry.name);
directorySize += EXT2_DIR_REC_LEN(entry.name_length); directory_size += EXT2_DIR_REC_LEN(entry.name_length);
} }
unsigned blocksNeeded = ceilDiv(directorySize, blockSize()); unsigned blocks_needed = ceil_div(directory_size, block_size());
unsigned occupiedSize = blocksNeeded * blockSize(); unsigned occupied_size = blocks_needed * block_size();
dbgprintf("Ext2FS: directory size: %u (occupied: %u)\n", directorySize, occupiedSize); dbgprintf("Ext2FS: directory size: %u (occupied: %u)\n", directory_size, occupied_size);
auto directoryData = ByteBuffer::create_uninitialized(occupiedSize); auto directory_data = ByteBuffer::create_uninitialized(occupied_size);
BufferStream stream(directoryData); BufferStream stream(directory_data);
for (unsigned i = 0; i < entries.size(); ++i) { for (unsigned i = 0; i < entries.size(); ++i) {
auto& entry = entries[i]; auto& entry = entries[i];
unsigned recordLength = EXT2_DIR_REC_LEN(entry.name_length); unsigned record_length = EXT2_DIR_REC_LEN(entry.name_length);
if (i == entries.size() - 1) if (i == entries.size() - 1)
recordLength += occupiedSize - directorySize; record_length += occupied_size - directory_size;
dbgprintf("* inode: %u", entry.inode.index()); dbgprintf("* inode: %u", entry.inode.index());
dbgprintf(", name_len: %u", word(entry.name_length)); dbgprintf(", name_len: %u", word(entry.name_length));
dbgprintf(", rec_len: %u", word(recordLength)); dbgprintf(", rec_len: %u", word(record_length));
dbgprintf(", file_type: %u", byte(entry.fileType)); dbgprintf(", file_type: %u", byte(entry.file_type));
dbgprintf(", name: %s\n", entry.name); dbgprintf(", name: %s\n", entry.name);
stream << dword(entry.inode.index()); stream << dword(entry.inode.index());
stream << word(recordLength); stream << word(record_length);
stream << byte(entry.name_length); stream << byte(entry.name_length);
stream << byte(entry.fileType); stream << byte(entry.file_type);
stream << entry.name; stream << entry.name;
unsigned padding = recordLength - entry.name_length - 8; unsigned padding = record_length - entry.name_length - 8;
//dbgprintf(" *** pad %u bytes\n", padding); //dbgprintf(" *** pad %u bytes\n", padding);
for (unsigned j = 0; j < padding; ++j) { for (unsigned j = 0; j < padding; ++j) {
stream << byte(0); stream << byte(0);
@ -719,9 +719,9 @@ bool Ext2FS::write_directory_inode(unsigned directoryInode, Vector<DirectoryEntr
stream.fill_to_end(0); stream.fill_to_end(0);
#if 0 #if 0
kprintf("data to write (%u):\n", directoryData.size()); kprintf("data to write (%u):\n", directory_data.size());
for (unsigned i = 0; i < directoryData.size(); ++i) { for (unsigned i = 0; i < directory_data.size(); ++i) {
kprintf("%02x ", directoryData[i]); kprintf("%02x ", directory_data[i]);
if ((i + 1) % 8 == 0) if ((i + 1) % 8 == 0)
kprintf(" "); kprintf(" ");
if ((i + 1) % 16 == 0) if ((i + 1) % 16 == 0)
@ -731,8 +731,8 @@ bool Ext2FS::write_directory_inode(unsigned directoryInode, Vector<DirectoryEntr
#endif #endif
auto directory_inode = get_inode({ fsid(), directoryInode }); auto directory_inode = get_inode({ fsid(), directoryInode });
ssize_t nwritten = directory_inode->write_bytes(0, directoryData.size(), directoryData.pointer(), nullptr); ssize_t nwritten = directory_inode->write_bytes(0, directory_data.size(), directory_data.pointer(), nullptr);
return nwritten == directoryData.size(); return nwritten == directory_data.size();
} }
unsigned Ext2FS::inodes_per_block() const unsigned Ext2FS::inodes_per_block() const
@ -757,19 +757,19 @@ unsigned Ext2FS::blocks_per_group() const
void Ext2FS::dump_block_bitmap(unsigned groupIndex) const void Ext2FS::dump_block_bitmap(unsigned groupIndex) const
{ {
ASSERT(groupIndex <= m_blockGroupCount); ASSERT(groupIndex <= m_block_group_count);
auto& bgd = group_descriptor(groupIndex); auto& bgd = group_descriptor(groupIndex);
unsigned blocksInGroup = min(blocks_per_group(), super_block().s_blocks_count); unsigned blocks_in_group = min(blocks_per_group(), super_block().s_blocks_count);
unsigned blockCount = ceilDiv(blocksInGroup, 8u); unsigned block_count = ceil_div(blocks_in_group, 8u);
auto bitmapBlocks = readBlocks(bgd.bg_block_bitmap, blockCount); auto bitmap_blocks = read_blocks(bgd.bg_block_bitmap, block_count);
ASSERT(bitmapBlocks); ASSERT(bitmap_blocks);
kprintf("ext2fs: group[%u] block bitmap (bitmap occupies %u blocks):\n", groupIndex, blockCount); kprintf("ext2fs: group[%u] block bitmap (bitmap occupies %u blocks):\n", groupIndex, block_count);
auto bitmap = Bitmap::wrap(bitmapBlocks.pointer(), blocksInGroup); auto bitmap = Bitmap::wrap(bitmap_blocks.pointer(), blocks_in_group);
for (unsigned i = 0; i < blocksInGroup; ++i) { for (unsigned i = 0; i < blocks_in_group; ++i) {
kprintf("%c", bitmap.get(i) ? '1' : '0'); kprintf("%c", bitmap.get(i) ? '1' : '0');
} }
kprintf("\n"); kprintf("\n");
@ -787,17 +787,17 @@ void Ext2FS::dump_inode_bitmap(unsigned groupIndex) const
template<typename F> template<typename F>
void Ext2FS::traverse_inode_bitmap(unsigned groupIndex, F callback) const void Ext2FS::traverse_inode_bitmap(unsigned groupIndex, F callback) const
{ {
ASSERT(groupIndex <= m_blockGroupCount); ASSERT(groupIndex <= m_block_group_count);
auto& bgd = group_descriptor(groupIndex); auto& bgd = group_descriptor(groupIndex);
unsigned inodesInGroup = min(inodes_per_group(), super_block().s_inodes_count); unsigned inodes_in_group = min(inodes_per_group(), super_block().s_inodes_count);
unsigned blockCount = ceilDiv(inodesInGroup, 8u); unsigned block_count = ceil_div(inodes_in_group, 8u);
for (unsigned i = 0; i < blockCount; ++i) { for (unsigned i = 0; i < block_count; ++i) {
auto block = readBlock(bgd.bg_inode_bitmap + i); auto block = read_block(bgd.bg_inode_bitmap + i);
ASSERT(block); ASSERT(block);
bool shouldContinue = callback(i * (blockSize() / 8) + 1, Bitmap::wrap(block.pointer(), inodesInGroup)); bool should_continue = callback(i * (block_size() / 8) + 1, Bitmap::wrap(block.pointer(), inodes_in_group));
if (!shouldContinue) if (!should_continue)
break; break;
} }
} }
@ -805,30 +805,30 @@ void Ext2FS::traverse_inode_bitmap(unsigned groupIndex, F callback) const
template<typename F> template<typename F>
void Ext2FS::traverse_block_bitmap(unsigned groupIndex, F callback) const void Ext2FS::traverse_block_bitmap(unsigned groupIndex, F callback) const
{ {
ASSERT(groupIndex <= m_blockGroupCount); ASSERT(groupIndex <= m_block_group_count);
auto& bgd = group_descriptor(groupIndex); auto& bgd = group_descriptor(groupIndex);
unsigned blocksInGroup = min(blocks_per_group(), super_block().s_blocks_count); unsigned blocks_in_group = min(blocks_per_group(), super_block().s_blocks_count);
unsigned blockCount = ceilDiv(blocksInGroup, 8u); unsigned block_count = ceil_div(blocks_in_group, 8u);
for (unsigned i = 0; i < blockCount; ++i) { for (unsigned i = 0; i < block_count; ++i) {
auto block = readBlock(bgd.bg_block_bitmap + i); auto block = read_block(bgd.bg_block_bitmap + i);
ASSERT(block); ASSERT(block);
bool shouldContinue = callback(i * (blockSize() / 8) + 1, Bitmap::wrap(block.pointer(), blocksInGroup)); bool should_continue = callback(i * (block_size() / 8) + 1, Bitmap::wrap(block.pointer(), blocks_in_group));
if (!shouldContinue) if (!should_continue)
break; break;
} }
} }
bool Ext2FS::write_ext2_inode(unsigned inode, const ext2_inode& e2inode) bool Ext2FS::write_ext2_inode(unsigned inode, const ext2_inode& e2inode)
{ {
unsigned blockIndex; unsigned block_index;
unsigned offset; unsigned offset;
auto block = read_block_containing_inode(inode, blockIndex, offset); auto block = read_block_containing_inode(inode, block_index, offset);
if (!block) if (!block)
return false; return false;
memcpy(reinterpret_cast<ext2_inode*>(block.offset_pointer(offset)), &e2inode, inode_size()); memcpy(reinterpret_cast<ext2_inode*>(block.offset_pointer(offset)), &e2inode, inode_size());
writeBlock(blockIndex, block); write_block(block_index, block);
return true; return true;
} }
@ -864,36 +864,36 @@ Vector<Ext2FS::BlockIndex> Ext2FS::allocate_blocks(unsigned group, unsigned coun
return blocks; return blocks;
} }
unsigned Ext2FS::allocate_inode(unsigned preferredGroup, unsigned expectedSize) unsigned Ext2FS::allocate_inode(unsigned preferred_group, unsigned expected_size)
{ {
dbgprintf("Ext2FS: allocate_inode(preferredGroup: %u, expectedSize: %u)\n", preferredGroup, expectedSize); dbgprintf("Ext2FS: allocate_inode(preferredGroup: %u, expectedSize: %u)\n", preferred_group, expected_size);
unsigned neededBlocks = ceilDiv(expectedSize, blockSize()); unsigned needed_blocks = ceil_div(expected_size, block_size());
dbgprintf("Ext2FS: minimum needed blocks: %u\n", neededBlocks); dbgprintf("Ext2FS: minimum needed blocks: %u\n", needed_blocks);
unsigned groupIndex = 0; unsigned groupIndex = 0;
auto isSuitableGroup = [this, neededBlocks] (unsigned groupIndex) { auto is_suitable_group = [this, needed_blocks] (unsigned groupIndex) {
auto& bgd = group_descriptor(groupIndex); auto& bgd = group_descriptor(groupIndex);
return bgd.bg_free_inodes_count && bgd.bg_free_blocks_count >= neededBlocks; return bgd.bg_free_inodes_count && bgd.bg_free_blocks_count >= needed_blocks;
}; };
if (preferredGroup && isSuitableGroup(preferredGroup)) { if (preferred_group && is_suitable_group(preferred_group)) {
groupIndex = preferredGroup; groupIndex = preferred_group;
} else { } else {
for (unsigned i = 1; i <= m_blockGroupCount; ++i) { for (unsigned i = 1; i <= m_block_group_count; ++i) {
if (isSuitableGroup(i)) if (is_suitable_group(i))
groupIndex = i; groupIndex = i;
} }
} }
if (!groupIndex) { if (!groupIndex) {
kprintf("Ext2FS: allocate_inode: no suitable group found for new inode with %u blocks needed :(\n", neededBlocks); kprintf("Ext2FS: allocate_inode: no suitable group found for new inode with %u blocks needed :(\n", needed_blocks);
return 0; return 0;
} }
dbgprintf("Ext2FS: allocate_inode: found suitable group [%u] for new inode with %u blocks needed :^)\n", groupIndex, neededBlocks); dbgprintf("Ext2FS: allocate_inode: found suitable group [%u] for new inode with %u blocks needed :^)\n", groupIndex, needed_blocks);
unsigned firstFreeInodeInGroup = 0; unsigned firstFreeInodeInGroup = 0;
traverse_inode_bitmap(groupIndex, [&firstFreeInodeInGroup] (unsigned firstInodeInBitmap, const Bitmap& bitmap) { traverse_inode_bitmap(groupIndex, [&firstFreeInodeInGroup] (unsigned firstInodeInBitmap, const Bitmap& bitmap) {
@ -931,10 +931,10 @@ bool Ext2FS::get_inode_allocation_state(InodeIndex index) const
if (index == 0) if (index == 0)
return true; return true;
auto& bgd = group_descriptor(group_index_from_inode(index)); auto& bgd = group_descriptor(group_index_from_inode(index));
unsigned inodes_per_bitmap_block = blockSize() * 8; unsigned inodes_per_bitmap_block = block_size() * 8;
unsigned bitmap_block_index = (index - 1) / inodes_per_bitmap_block; unsigned bitmap_block_index = (index - 1) / inodes_per_bitmap_block;
unsigned bit_index = (index - 1) % inodes_per_bitmap_block; unsigned bit_index = (index - 1) % inodes_per_bitmap_block;
auto block = readBlock(bgd.bg_inode_bitmap + bitmap_block_index); auto block = read_block(bgd.bg_inode_bitmap + bitmap_block_index);
ASSERT(block); ASSERT(block);
auto bitmap = Bitmap::wrap(block.pointer(), block.size()); auto bitmap = Bitmap::wrap(block.pointer(), block.size());
return bitmap.get(bit_index); return bitmap.get(bit_index);
@ -945,20 +945,20 @@ bool Ext2FS::set_inode_allocation_state(unsigned index, bool newState)
auto& bgd = group_descriptor(group_index_from_inode(index)); auto& bgd = group_descriptor(group_index_from_inode(index));
// Update inode bitmap // Update inode bitmap
unsigned inodes_per_bitmap_block = blockSize() * 8; unsigned inodes_per_bitmap_block = block_size() * 8;
unsigned bitmap_block_index = (index - 1) / inodes_per_bitmap_block; unsigned bitmap_block_index = (index - 1) / inodes_per_bitmap_block;
unsigned bit_index = (index - 1) % inodes_per_bitmap_block; unsigned bit_index = (index - 1) % inodes_per_bitmap_block;
auto block = readBlock(bgd.bg_inode_bitmap + bitmap_block_index); auto block = read_block(bgd.bg_inode_bitmap + bitmap_block_index);
ASSERT(block); ASSERT(block);
auto bitmap = Bitmap::wrap(block.pointer(), block.size()); auto bitmap = Bitmap::wrap(block.pointer(), block.size());
bool currentState = bitmap.get(bit_index); bool current_state = bitmap.get(bit_index);
dbgprintf("Ext2FS: set_inode_allocation_state(%u) %u -> %u\n", index, currentState, newState); dbgprintf("Ext2FS: set_inode_allocation_state(%u) %u -> %u\n", index, current_state, newState);
if (currentState == newState) if (current_state == newState)
return true; return true;
bitmap.set(bit_index, newState); bitmap.set(bit_index, newState);
writeBlock(bgd.bg_inode_bitmap + bitmap_block_index, block); write_block(bgd.bg_inode_bitmap + bitmap_block_index, block);
// Update superblock // Update superblock
auto& sb = *reinterpret_cast<ext2_super_block*>(m_cached_super_block.pointer()); auto& sb = *reinterpret_cast<ext2_super_block*>(m_cached_super_block.pointer());
@ -970,53 +970,53 @@ bool Ext2FS::set_inode_allocation_state(unsigned index, bool newState)
write_super_block(sb); write_super_block(sb);
// Update BGD // Update BGD
auto& mutableBGD = const_cast<ext2_group_desc&>(bgd); auto& mutable_bgd = const_cast<ext2_group_desc&>(bgd);
if (newState) if (newState)
--mutableBGD.bg_free_inodes_count; --mutable_bgd.bg_free_inodes_count;
else else
++mutableBGD.bg_free_inodes_count; ++mutable_bgd.bg_free_inodes_count;
dbgprintf("Ext2FS: group free inode count %u -> %u\n", bgd.bg_free_inodes_count, bgd.bg_free_inodes_count - 1); dbgprintf("Ext2FS: group free inode count %u -> %u\n", bgd.bg_free_inodes_count, bgd.bg_free_inodes_count - 1);
flush_block_group_descriptor_table(); flush_block_group_descriptor_table();
return true; return true;
} }
bool Ext2FS::set_block_allocation_state(GroupIndex group, BlockIndex bi, bool newState) bool Ext2FS::set_block_allocation_state(GroupIndex group, BlockIndex bi, bool new_state)
{ {
dbgprintf("Ext2FS: set_block_allocation_state(group=%u, block=%u, state=%u)\n", group, bi, newState); dbgprintf("Ext2FS: set_block_allocation_state(group=%u, block=%u, state=%u)\n", group, bi, new_state);
auto& bgd = group_descriptor(group); auto& bgd = group_descriptor(group);
// Update block bitmap // Update block bitmap
unsigned blocksPerBitmapBlock = blockSize() * 8; unsigned blocks_per_bitmap_block = block_size() * 8;
unsigned bitmapBlockIndex = (bi - 1) / blocksPerBitmapBlock; unsigned bitmap_block_index = (bi - 1) / blocks_per_bitmap_block;
unsigned bitIndex = (bi - 1) % blocksPerBitmapBlock; unsigned bit_index = (bi - 1) % blocks_per_bitmap_block;
auto block = readBlock(bgd.bg_block_bitmap + bitmapBlockIndex); auto block = read_block(bgd.bg_block_bitmap + bitmap_block_index);
ASSERT(block); ASSERT(block);
auto bitmap = Bitmap::wrap(block.pointer(), blocksPerBitmapBlock); auto bitmap = Bitmap::wrap(block.pointer(), blocks_per_bitmap_block);
bool currentState = bitmap.get(bitIndex); bool current_state = bitmap.get(bit_index);
dbgprintf("Ext2FS: block %u state: %u -> %u\n", bi, currentState, newState); dbgprintf("Ext2FS: block %u state: %u -> %u\n", bi, current_state, new_state);
if (currentState == newState) if (current_state == new_state)
return true; return true;
bitmap.set(bitIndex, newState); bitmap.set(bit_index, new_state);
writeBlock(bgd.bg_block_bitmap + bitmapBlockIndex, block); write_block(bgd.bg_block_bitmap + bitmap_block_index, block);
// Update superblock // Update superblock
auto& sb = *reinterpret_cast<ext2_super_block*>(m_cached_super_block.pointer()); auto& sb = *reinterpret_cast<ext2_super_block*>(m_cached_super_block.pointer());
dbgprintf("Ext2FS: superblock free block count %u -> %u\n", sb.s_free_blocks_count, sb.s_free_blocks_count - 1); dbgprintf("Ext2FS: superblock free block count %u -> %u\n", sb.s_free_blocks_count, sb.s_free_blocks_count - 1);
if (newState) if (new_state)
--sb.s_free_blocks_count; --sb.s_free_blocks_count;
else else
++sb.s_free_blocks_count; ++sb.s_free_blocks_count;
write_super_block(sb); write_super_block(sb);
// Update BGD // Update BGD
auto& mutableBGD = const_cast<ext2_group_desc&>(bgd); auto& mutable_bgd = const_cast<ext2_group_desc&>(bgd);
if (newState) if (new_state)
--mutableBGD.bg_free_blocks_count; --mutable_bgd.bg_free_blocks_count;
else else
++mutableBGD.bg_free_blocks_count; ++mutable_bgd.bg_free_blocks_count;
dbgprintf("Ext2FS: group free block count %u -> %u\n", bgd.bg_free_blocks_count, bgd.bg_free_blocks_count - 1); dbgprintf("Ext2FS: group free block count %u -> %u\n", bgd.bg_free_blocks_count, bgd.bg_free_blocks_count - 1);
flush_block_group_descriptor_table(); flush_block_group_descriptor_table();
@ -1034,7 +1034,7 @@ RetainPtr<Inode> Ext2FS::create_directory(InodeIdentifier parent_id, const Strin
// NOTE: When creating a new directory, make the size 1 block. // NOTE: When creating a new directory, make the size 1 block.
// There's probably a better strategy here, but this works for now. // There's probably a better strategy here, but this works for now.
auto inode = create_inode(parent_id, name, mode, blockSize(), error); auto inode = create_inode(parent_id, name, mode, block_size(), error);
if (!inode) if (!inode)
return nullptr; return nullptr;
@ -1077,7 +1077,7 @@ RetainPtr<Inode> Ext2FS::create_inode(InodeIdentifier parent_id, const String& n
return { }; return { };
} }
auto needed_blocks = ceilDiv(size, blockSize()); auto needed_blocks = ceil_div(size, block_size());
auto blocks = allocate_blocks(group_index_from_inode(inode_id), needed_blocks); auto blocks = allocate_blocks(group_index_from_inode(inode_id), needed_blocks);
if (blocks.size() != needed_blocks) { if (blocks.size() != needed_blocks) {
kprintf("Ext2FS: create_inode: allocate_blocks failed\n"); kprintf("Ext2FS: create_inode: allocate_blocks failed\n");
@ -1085,24 +1085,24 @@ RetainPtr<Inode> Ext2FS::create_inode(InodeIdentifier parent_id, const String& n
return { }; return { };
} }
byte fileType = 0; byte file_type = 0;
if (isRegularFile(mode)) if (is_regular_file(mode))
fileType = EXT2_FT_REG_FILE; file_type = EXT2_FT_REG_FILE;
else if (isDirectory(mode)) else if (is_directory(mode))
fileType = EXT2_FT_DIR; file_type = EXT2_FT_DIR;
else if (isCharacterDevice(mode)) else if (is_character_device(mode))
fileType = EXT2_FT_CHRDEV; file_type = EXT2_FT_CHRDEV;
else if (isBlockDevice(mode)) else if (is_block_device(mode))
fileType = EXT2_FT_BLKDEV; file_type = EXT2_FT_BLKDEV;
else if (isFIFO(mode)) else if (is_fifo(mode))
fileType = EXT2_FT_FIFO; file_type = EXT2_FT_FIFO;
else if (isSocket(mode)) else if (is_socket(mode))
fileType = EXT2_FT_SOCK; file_type = EXT2_FT_SOCK;
else if (isSymbolicLink(mode)) else if (is_symlink(mode))
fileType = EXT2_FT_SYMLINK; file_type = EXT2_FT_SYMLINK;
// Try adding it to the directory first, in case the name is already in use. // Try adding it to the directory first, in case the name is already in use.
bool success = parent_inode->add_child({ fsid(), inode_id }, name, fileType, error); bool success = parent_inode->add_child({ fsid(), inode_id }, name, file_type, error);
if (!success) if (!success)
return { }; return { };
@ -1115,11 +1115,11 @@ RetainPtr<Inode> Ext2FS::create_inode(InodeIdentifier parent_id, const String& n
ASSERT(success); ASSERT(success);
} }
unsigned initialLinksCount; unsigned initial_links_count;
if (isDirectory(mode)) if (is_directory(mode))
initialLinksCount = 2; // (parent directory + "." entry in self) initial_links_count = 2; // (parent directory + "." entry in self)
else else
initialLinksCount = 1; initial_links_count = 1;
auto timestamp = RTC::now(); auto timestamp = RTC::now();
ext2_inode e2inode; ext2_inode e2inode;
@ -1132,7 +1132,7 @@ RetainPtr<Inode> Ext2FS::create_inode(InodeIdentifier parent_id, const String& n
e2inode.i_mtime = timestamp; e2inode.i_mtime = timestamp;
e2inode.i_dtime = 0; e2inode.i_dtime = 0;
e2inode.i_gid = 0; e2inode.i_gid = 0;
e2inode.i_links_count = initialLinksCount; e2inode.i_links_count = initial_links_count;
success = write_block_list_for_inode(inode_id, e2inode, blocks); success = write_block_list_for_inode(inode_id, e2inode, blocks);
ASSERT(success); ASSERT(success);

View file

@ -18,7 +18,7 @@ public:
virtual ~Ext2FSInode() override; virtual ~Ext2FSInode() override;
size_t size() const { return m_raw_inode.i_size; } size_t size() const { return m_raw_inode.i_size; }
bool is_symlink() const { return isSymbolicLink(m_raw_inode.i_mode); } bool is_symlink() const { return ::is_symlink(m_raw_inode.i_mode); }
// ^Inode (Retainable magic) // ^Inode (Retainable magic)
virtual void one_retain_left() override; virtual void one_retain_left() override;
@ -78,7 +78,7 @@ private:
unsigned inode_size() const; unsigned inode_size() const;
bool write_ext2_inode(unsigned, const ext2_inode&); bool write_ext2_inode(unsigned, const ext2_inode&);
ByteBuffer read_block_containing_inode(unsigned inode, unsigned& blockIndex, unsigned& offset) const; ByteBuffer read_block_containing_inode(unsigned inode, unsigned& block_index, unsigned& offset) const;
ByteBuffer read_super_block() const; ByteBuffer read_super_block() const;
bool write_super_block(const ext2_super_block&); bool write_super_block(const ext2_super_block&);
@ -102,7 +102,7 @@ private:
template<typename F> void traverse_inode_bitmap(unsigned groupIndex, F) const; template<typename F> void traverse_inode_bitmap(unsigned groupIndex, F) const;
template<typename F> void traverse_block_bitmap(unsigned groupIndex, F) const; template<typename F> void traverse_block_bitmap(unsigned groupIndex, F) const;
bool add_inode_to_directory(InodeIndex parent, InodeIndex child, const String& name, byte fileType, int& error); bool add_inode_to_directory(InodeIndex parent, InodeIndex child, const String& name, byte file_type, int& error);
bool write_directory_inode(unsigned directoryInode, Vector<DirectoryEntry>&&); bool write_directory_inode(unsigned directoryInode, Vector<DirectoryEntry>&&);
bool get_inode_allocation_state(InodeIndex) const; bool get_inode_allocation_state(InodeIndex) const;
bool set_inode_allocation_state(unsigned inode, bool); bool set_inode_allocation_state(unsigned inode, bool);
@ -121,7 +121,7 @@ private:
BlockListShape compute_block_list_shape(unsigned blocks); BlockListShape compute_block_list_shape(unsigned blocks);
unsigned m_blockGroupCount { 0 }; unsigned m_block_group_count { 0 };
mutable ByteBuffer m_cached_super_block; mutable ByteBuffer m_cached_super_block;
mutable ByteBuffer m_cached_group_descriptor_table; mutable ByteBuffer m_cached_group_descriptor_table;

View file

@ -47,7 +47,7 @@ bool FileBackedDiskDevice::write_block(unsigned index, const byte* data)
bool FileBackedDiskDevice::read_internal(DiskOffset offset, unsigned length, byte* out) const bool FileBackedDiskDevice::read_internal(DiskOffset offset, unsigned length, byte* out) const
{ {
#ifndef IGNORE_FILE_LENGTH #ifndef IGNORE_FILE_LENGTH
if (offset + length >= m_fileLength) if (offset + length >= m_file_length)
return false; return false;
#endif #endif
#ifdef FBBD_DEBUG #ifdef FBBD_DEBUG
@ -62,7 +62,7 @@ bool FileBackedDiskDevice::read_internal(DiskOffset offset, unsigned length, byt
bool FileBackedDiskDevice::write_internal(DiskOffset offset, unsigned length, const byte* data) bool FileBackedDiskDevice::write_internal(DiskOffset offset, unsigned length, const byte* data)
{ {
#ifndef IGNORE_FILE_LENGTH #ifndef IGNORE_FILE_LENGTH
if (offset + length >= m_fileLength) if (offset + length >= m_file_length)
return false; return false;
#endif #endif
#ifdef FBBD_DEBUG #ifdef FBBD_DEBUG

View file

@ -60,10 +60,10 @@ RetainPtr<FileDescriptor> FileDescriptor::clone()
: FileDescriptor::create_pipe_writer(*m_fifo); : FileDescriptor::create_pipe_writer(*m_fifo);
} else { } else {
if (m_device) { if (m_device) {
descriptor = FileDescriptor::create(m_device.copyRef()); descriptor = FileDescriptor::create(m_device.copy_ref());
descriptor->m_inode = m_inode.copyRef(); descriptor->m_inode = m_inode.copy_ref();
} else { } else {
descriptor = FileDescriptor::create(m_inode.copyRef()); descriptor = FileDescriptor::create(m_inode.copy_ref());
} }
} }
if (!descriptor) if (!descriptor)
@ -74,7 +74,7 @@ RetainPtr<FileDescriptor> FileDescriptor::clone()
return descriptor; return descriptor;
} }
bool additionWouldOverflow(off_t a, off_t b) bool addition_would_overflow(off_t a, off_t b)
{ {
ASSERT(a > 0); ASSERT(a > 0);
uint64_t ua = a; uint64_t ua = a;
@ -88,19 +88,19 @@ int FileDescriptor::fstat(stat* buffer)
return -EBADF; return -EBADF;
auto metadata = this->metadata(); auto metadata = this->metadata();
if (!metadata.isValid()) if (!metadata.is_valid())
return -EIO; return -EIO;
buffer->st_dev = encodedDevice(metadata.majorDevice, metadata.minorDevice); buffer->st_dev = encoded_device(metadata.major_device, metadata.minor_device);
buffer->st_ino = metadata.inode.index(); buffer->st_ino = metadata.inode.index();
buffer->st_mode = metadata.mode; buffer->st_mode = metadata.mode;
buffer->st_nlink = metadata.linkCount; buffer->st_nlink = metadata.link_count;
buffer->st_uid = metadata.uid; buffer->st_uid = metadata.uid;
buffer->st_gid = metadata.gid; buffer->st_gid = metadata.gid;
buffer->st_rdev = 0; // FIXME buffer->st_rdev = 0; // FIXME
buffer->st_size = metadata.size; buffer->st_size = metadata.size;
buffer->st_blksize = metadata.blockSize; buffer->st_blksize = metadata.block_size;
buffer->st_blocks = metadata.blockCount; buffer->st_blocks = metadata.block_count;
buffer->st_atime = metadata.atime; buffer->st_atime = metadata.atime;
buffer->st_mtime = metadata.mtime; buffer->st_mtime = metadata.mtime;
buffer->st_ctime = metadata.ctime; buffer->st_ctime = metadata.ctime;
@ -116,10 +116,10 @@ off_t FileDescriptor::seek(off_t offset, int whence)
// FIXME: The file type should be cached on the vnode. // FIXME: The file type should be cached on the vnode.
// It's silly that we have to do a full metadata lookup here. // It's silly that we have to do a full metadata lookup here.
auto metadata = this->metadata(); auto metadata = this->metadata();
if (!metadata.isValid()) if (!metadata.is_valid())
return -EIO; return -EIO;
if (metadata.isSocket() || metadata.isFIFO()) if (metadata.is_socket() || metadata.is_fifo())
return -ESPIPE; return -ESPIPE;
off_t newOffset; off_t newOffset;
@ -217,23 +217,23 @@ ByteBuffer FileDescriptor::read_entire_file(Process& process)
bool FileDescriptor::is_directory() const bool FileDescriptor::is_directory() const
{ {
ASSERT(!is_fifo()); ASSERT(!is_fifo());
return metadata().isDirectory(); return metadata().is_directory();
} }
ssize_t FileDescriptor::get_dir_entries(byte* buffer, size_t size) ssize_t FileDescriptor::get_dir_entries(byte* buffer, size_t size)
{ {
auto metadata = this->metadata(); auto metadata = this->metadata();
if (!metadata.isValid()) if (!metadata.is_valid())
return -EIO; return -EIO;
if (!metadata.isDirectory()) if (!metadata.is_directory())
return -ENOTDIR; return -ENOTDIR;
// FIXME: Compute the actual size needed. // FIXME: Compute the actual size needed.
auto tempBuffer = ByteBuffer::create_uninitialized(2048); auto temp_buffer = ByteBuffer::create_uninitialized(2048);
BufferStream stream(tempBuffer); BufferStream stream(temp_buffer);
VFS::the().traverse_directory_inode(*m_inode, [&stream] (auto& entry) { VFS::the().traverse_directory_inode(*m_inode, [&stream] (auto& entry) {
stream << (dword)entry.inode.index(); stream << (dword)entry.inode.index();
stream << (byte)entry.fileType; stream << (byte)entry.file_type;
stream << (dword)entry.name_length; stream << (dword)entry.name_length;
stream << entry.name; stream << entry.name;
return true; return true;
@ -242,7 +242,7 @@ ssize_t FileDescriptor::get_dir_entries(byte* buffer, size_t size)
if (size < stream.offset()) if (size < stream.offset())
return -1; return -1;
memcpy(buffer, tempBuffer.pointer(), stream.offset()); memcpy(buffer, temp_buffer.pointer(), stream.offset());
return stream.offset(); return stream.offset();
} }

View file

@ -76,7 +76,7 @@ ByteBuffer Inode::read_entire(FileDescriptor* descriptor) const
FS::DirectoryEntry::DirectoryEntry(const char* n, InodeIdentifier i, byte ft) FS::DirectoryEntry::DirectoryEntry(const char* n, InodeIdentifier i, byte ft)
: name_length(strlen(n)) : name_length(strlen(n))
, inode(i) , inode(i)
, fileType(ft) , file_type(ft)
{ {
memcpy(name, n, name_length); memcpy(name, n, name_length);
name[name_length] = '\0'; name[name_length] = '\0';
@ -85,7 +85,7 @@ FS::DirectoryEntry::DirectoryEntry(const char* n, InodeIdentifier i, byte ft)
FS::DirectoryEntry::DirectoryEntry(const char* n, size_t nl, InodeIdentifier i, byte ft) FS::DirectoryEntry::DirectoryEntry(const char* n, size_t nl, InodeIdentifier i, byte ft)
: name_length(nl) : name_length(nl)
, inode(i) , inode(i)
, fileType(ft) , file_type(ft)
{ {
memcpy(name, n, nl); memcpy(name, n, nl);
name[nl] = '\0'; name[nl] = '\0';

View file

@ -37,12 +37,12 @@ public:
bool is_readonly() const { return m_readonly; } bool is_readonly() const { return m_readonly; }
struct DirectoryEntry { struct DirectoryEntry {
DirectoryEntry(const char* name, InodeIdentifier, byte fileType); DirectoryEntry(const char* name, InodeIdentifier, byte file_type);
DirectoryEntry(const char* name, size_t name_length, InodeIdentifier, byte fileType); DirectoryEntry(const char* name, size_t name_length, InodeIdentifier, byte file_type);
char name[256]; char name[256];
size_t name_length { 0 }; size_t name_length { 0 };
InodeIdentifier inode; InodeIdentifier inode;
byte fileType { 0 }; byte file_type { 0 };
}; };
virtual RetainPtr<Inode> create_inode(InodeIdentifier parentInode, const String& name, mode_t, unsigned size, int& error) = 0; virtual RetainPtr<Inode> create_inode(InodeIdentifier parentInode, const String& name, mode_t, unsigned size, int& error) = 0;
@ -71,9 +71,9 @@ public:
unsigned index() const { return m_index; } unsigned index() const { return m_index; }
size_t size() const { return metadata().size; } size_t size() const { return metadata().size; }
bool is_symlink() const { return metadata().isSymbolicLink(); } bool is_symlink() const { return metadata().is_symlink(); }
bool is_directory() const { return metadata().isDirectory(); } bool is_directory() const { return metadata().is_directory(); }
bool is_character_device() const { return metadata().isCharacterDevice(); } bool is_character_device() const { return metadata().is_character_device(); }
mode_t mode() const { return metadata().mode; } mode_t mode() const { return metadata().mode; }
InodeIdentifier identifier() const { return { fsid(), index() }; } InodeIdentifier identifier() const { return { fsid(), index() }; }

View file

@ -9,8 +9,8 @@ struct InodeMetadata;
class InodeIdentifier { class InodeIdentifier {
public: public:
InodeIdentifier() { } InodeIdentifier() { }
InodeIdentifier(dword fileSystemID, dword inode) InodeIdentifier(dword fsid, dword inode)
: m_fsid(fileSystemID) : m_fsid(fsid)
, m_index(inode) , m_index(inode)
{ {
} }

View file

@ -4,21 +4,21 @@
#include "UnixTypes.h" #include "UnixTypes.h"
#include <AK/HashTable.h> #include <AK/HashTable.h>
inline bool isDirectory(mode_t mode) { return (mode & 0170000) == 0040000; } inline bool is_directory(mode_t mode) { return (mode & 0170000) == 0040000; }
inline bool isCharacterDevice(mode_t mode) { return (mode & 0170000) == 0020000; } inline bool is_character_device(mode_t mode) { return (mode & 0170000) == 0020000; }
inline bool isBlockDevice(mode_t mode) { return (mode & 0170000) == 0060000; } inline bool is_block_device(mode_t mode) { return (mode & 0170000) == 0060000; }
inline bool isRegularFile(mode_t mode) { return (mode & 0170000) == 0100000; } inline bool is_regular_file(mode_t mode) { return (mode & 0170000) == 0100000; }
inline bool isFIFO(mode_t mode) { return (mode & 0170000) == 0010000; } inline bool is_fifo(mode_t mode) { return (mode & 0170000) == 0010000; }
inline bool isSymbolicLink(mode_t mode) { return (mode & 0170000) == 0120000; } inline bool is_symlink(mode_t mode) { return (mode & 0170000) == 0120000; }
inline bool isSocket(mode_t mode) { return (mode & 0170000) == 0140000; } inline bool is_socket(mode_t mode) { return (mode & 0170000) == 0140000; }
inline bool isSticky(mode_t mode) { return mode & 01000; } inline bool is_sticky(mode_t mode) { return mode & 01000; }
inline bool isSetUID(mode_t mode) { return mode & 04000; } inline bool is_setuid(mode_t mode) { return mode & 04000; }
inline bool isSetGID(mode_t mode) { return mode & 02000; } inline bool is_setgid(mode_t mode) { return mode & 02000; }
struct InodeMetadata { struct InodeMetadata {
bool isValid() const { return inode.is_valid(); } bool is_valid() const { return inode.is_valid(); }
bool mayExecute(uid_t u, const HashTable<gid_t>& g) const bool may_execute(uid_t u, const HashTable<gid_t>& g) const
{ {
if (uid == u) if (uid == u)
return mode & 0100; return mode & 0100;
@ -27,31 +27,31 @@ struct InodeMetadata {
return mode & 0001; return mode & 0001;
} }
bool isDirectory() const { return ::isDirectory(mode); } bool is_directory() const { return ::is_directory(mode); }
bool isCharacterDevice() const { return ::isCharacterDevice(mode); } bool is_character_device() const { return ::is_character_device(mode); }
bool isBlockDevice() const { return ::isBlockDevice(mode); } bool is_block_device() const { return ::is_block_device(mode); }
bool isRegularFile() const { return ::isRegularFile(mode); } bool is_regular_file() const { return ::is_regular_file(mode); }
bool isFIFO() const { return ::isFIFO(mode); } bool is_fifo() const { return ::is_fifo(mode); }
bool isSymbolicLink() const { return ::isSymbolicLink(mode); } bool is_symlink() const { return ::is_symlink(mode); }
bool isSocket() const { return ::isSocket(mode); } bool is_socket() const { return ::is_socket(mode); }
bool isSticky() const { return ::isSticky(mode); } bool is_sticky() const { return ::is_sticky(mode); }
bool isSetUID() const { return ::isSetUID(mode); } bool is_setuid() const { return ::is_setuid(mode); }
bool isSetGID() const { return ::isSetGID(mode); } bool is_setgid() const { return ::is_setgid(mode); }
InodeIdentifier inode; InodeIdentifier inode;
off_t size { 0 }; off_t size { 0 };
mode_t mode { 0 }; mode_t mode { 0 };
uid_t uid { 0 }; uid_t uid { 0 };
gid_t gid { 0 }; gid_t gid { 0 };
nlink_t linkCount { 0 }; nlink_t link_count { 0 };
time_t atime { 0 }; time_t atime { 0 };
time_t ctime { 0 }; time_t ctime { 0 };
time_t mtime { 0 }; time_t mtime { 0 };
time_t dtime { 0 }; time_t dtime { 0 };
blkcnt_t blockCount { 0 }; blkcnt_t block_count { 0 };
blksize_t blockSize { 0 }; blksize_t block_size { 0 };
unsigned majorDevice { 0 }; unsigned major_device { 0 };
unsigned minorDevice { 0 }; unsigned minor_device { 0 };
}; };

View file

@ -89,21 +89,21 @@ void dump_backtrace(bool use_ksyms)
}; };
Vector<RecognizedSymbol> recognized_symbols; Vector<RecognizedSymbol> recognized_symbols;
if (use_ksyms) { if (use_ksyms) {
for (dword* stackPtr = (dword*)&use_ksyms; current->validate_read_from_kernel(LinearAddress((dword)stackPtr)); stackPtr = (dword*)*stackPtr) { for (dword* stack_ptr = (dword*)&use_ksyms; current->validate_read_from_kernel(LinearAddress((dword)stack_ptr)); stack_ptr = (dword*)*stack_ptr) {
dword retaddr = stackPtr[1]; dword retaddr = stack_ptr[1];
if (auto* ksym = ksymbolicate(retaddr)) if (auto* ksym = ksymbolicate(retaddr))
recognized_symbols.append({ retaddr, ksym }); recognized_symbols.append({ retaddr, ksym });
} }
} else{ } else{
for (dword* stackPtr = (dword*)&use_ksyms; current->validate_read_from_kernel(LinearAddress((dword)stackPtr)); stackPtr = (dword*)*stackPtr) { for (dword* stack_ptr = (dword*)&use_ksyms; current->validate_read_from_kernel(LinearAddress((dword)stack_ptr)); stack_ptr = (dword*)*stack_ptr) {
dword retaddr = stackPtr[1]; dword retaddr = stack_ptr[1];
kprintf("%x (next: %x)\n", retaddr, stackPtr ? (dword*)*stackPtr : 0); kprintf("%x (next: %x)\n", retaddr, stack_ptr ? (dword*)*stack_ptr : 0);
} }
return; return;
} }
size_t bytesNeeded = 0; size_t bytes_needed = 0;
for (auto& symbol : recognized_symbols) { for (auto& symbol : recognized_symbols) {
bytesNeeded += strlen(symbol.ksym->name) + 8 + 16; bytes_needed += strlen(symbol.ksym->name) + 8 + 16;
} }
for (auto& symbol : recognized_symbols) { for (auto& symbol : recognized_symbols) {
unsigned offset = symbol.address - symbol.ksym->address; unsigned offset = symbol.address - symbol.ksym->address;

View file

@ -112,7 +112,7 @@ RetainPtr<PhysicalPage> MemoryManager::allocate_page_table(PageDirectory& page_d
auto physical_page = allocate_supervisor_physical_page(); auto physical_page = allocate_supervisor_physical_page();
if (!physical_page) if (!physical_page)
return nullptr; return nullptr;
page_directory.m_physical_pages.set(index, physical_page.copyRef()); page_directory.m_physical_pages.set(index, physical_page.copy_ref());
return physical_page; return physical_page;
} }
@ -144,7 +144,7 @@ auto MemoryManager::ensure_pte(PageDirectory& page_directory, LinearAddress ladd
#endif #endif
if (page_directory_index == 0) { if (page_directory_index == 0) {
ASSERT(&page_directory == m_kernel_page_directory.ptr()); ASSERT(&page_directory == m_kernel_page_directory.ptr());
pde.setPageTableBase((dword)m_page_table_zero); pde.set_page_table_base((dword)m_page_table_zero);
pde.set_user_allowed(false); pde.set_user_allowed(false);
pde.set_present(true); pde.set_present(true);
pde.set_writable(true); pde.set_writable(true);
@ -161,14 +161,14 @@ auto MemoryManager::ensure_pte(PageDirectory& page_directory, LinearAddress ladd
page_table->paddr().get()); page_table->paddr().get());
#endif #endif
pde.setPageTableBase(page_table->paddr().get()); pde.set_page_table_base(page_table->paddr().get());
pde.set_user_allowed(true); pde.set_user_allowed(true);
pde.set_present(true); pde.set_present(true);
pde.set_writable(true); pde.set_writable(true);
page_directory.m_physical_pages.set(page_directory_index, move(page_table)); page_directory.m_physical_pages.set(page_directory_index, move(page_table));
} }
} }
return PageTableEntry(&pde.pageTableBase()[page_table_index]); return PageTableEntry(&pde.page_table_base()[page_table_index]);
} }
void MemoryManager::map_protected(LinearAddress laddr, size_t length) void MemoryManager::map_protected(LinearAddress laddr, size_t length)
@ -176,13 +176,13 @@ void MemoryManager::map_protected(LinearAddress laddr, size_t length)
InterruptDisabler disabler; InterruptDisabler disabler;
// FIXME: ASSERT(linearAddress is 4KB aligned); // FIXME: ASSERT(linearAddress is 4KB aligned);
for (dword offset = 0; offset < length; offset += PAGE_SIZE) { for (dword offset = 0; offset < length; offset += PAGE_SIZE) {
auto pteAddress = laddr.offset(offset); auto pte_address = laddr.offset(offset);
auto pte = ensure_pte(kernel_page_directory(), pteAddress); auto pte = ensure_pte(kernel_page_directory(), pte_address);
pte.set_physical_page_base(pteAddress.get()); pte.set_physical_page_base(pte_address.get());
pte.set_user_allowed(false); pte.set_user_allowed(false);
pte.set_present(false); pte.set_present(false);
pte.set_writable(false); pte.set_writable(false);
flush_tlb(pteAddress); flush_tlb(pte_address);
} }
} }
@ -191,13 +191,13 @@ void MemoryManager::create_identity_mapping(PageDirectory& page_directory, Linea
InterruptDisabler disabler; InterruptDisabler disabler;
ASSERT((laddr.get() & ~PAGE_MASK) == 0); ASSERT((laddr.get() & ~PAGE_MASK) == 0);
for (dword offset = 0; offset < size; offset += PAGE_SIZE) { for (dword offset = 0; offset < size; offset += PAGE_SIZE) {
auto pteAddress = laddr.offset(offset); auto pte_address = laddr.offset(offset);
auto pte = ensure_pte(page_directory, pteAddress); auto pte = ensure_pte(page_directory, pte_address);
pte.set_physical_page_base(pteAddress.get()); pte.set_physical_page_base(pte_address.get());
pte.set_user_allowed(false); pte.set_user_allowed(false);
pte.set_present(true); pte.set_present(true);
pte.set_writable(true); pte.set_writable(true);
page_directory.flush(pteAddress); page_directory.flush(pte_address);
} }
} }
@ -560,7 +560,7 @@ RetainPtr<Region> Region::clone()
if (m_shared || (m_readable && !m_writable)) { if (m_shared || (m_readable && !m_writable)) {
// Create a new region backed by the same VMObject. // Create a new region backed by the same VMObject.
return adopt(*new Region(laddr(), size(), m_vmo.copyRef(), m_offset_in_vmo, String(m_name), m_readable, m_writable)); return adopt(*new Region(laddr(), size(), m_vmo.copy_ref(), m_offset_in_vmo, String(m_name), m_readable, m_writable));
} }
dbgprintf("%s<%u> Region::clone(): cowing %s (L%x)\n", dbgprintf("%s<%u> Region::clone(): cowing %s (L%x)\n",
@ -647,7 +647,7 @@ RetainPtr<VMObject> VMObject::create_file_backed(RetainPtr<Inode>&& inode, size_
InterruptDisabler disabler; InterruptDisabler disabler;
if (inode->vmo()) if (inode->vmo())
return static_cast<VMObject*>(inode->vmo()); return static_cast<VMObject*>(inode->vmo());
size = ceilDiv(size, PAGE_SIZE) * PAGE_SIZE; size = ceil_div(size, PAGE_SIZE) * PAGE_SIZE;
auto vmo = adopt(*new VMObject(move(inode), size)); auto vmo = adopt(*new VMObject(move(inode), size));
vmo->inode()->set_vmo(vmo.ptr()); vmo->inode()->set_vmo(vmo.ptr());
return vmo; return vmo;
@ -655,13 +655,13 @@ RetainPtr<VMObject> VMObject::create_file_backed(RetainPtr<Inode>&& inode, size_
RetainPtr<VMObject> VMObject::create_anonymous(size_t size) RetainPtr<VMObject> VMObject::create_anonymous(size_t size)
{ {
size = ceilDiv(size, PAGE_SIZE) * PAGE_SIZE; size = ceil_div(size, PAGE_SIZE) * PAGE_SIZE;
return adopt(*new VMObject(size)); return adopt(*new VMObject(size));
} }
RetainPtr<VMObject> VMObject::create_framebuffer_wrapper(PhysicalAddress paddr, size_t size) RetainPtr<VMObject> VMObject::create_framebuffer_wrapper(PhysicalAddress paddr, size_t size)
{ {
size = ceilDiv(size, PAGE_SIZE) * PAGE_SIZE; size = ceil_div(size, PAGE_SIZE) * PAGE_SIZE;
return adopt(*new VMObject(paddr, size)); return adopt(*new VMObject(paddr, size));
} }

View file

@ -264,8 +264,8 @@ private:
struct PageDirectoryEntry { struct PageDirectoryEntry {
explicit PageDirectoryEntry(dword* pde) : m_pde(pde) { } explicit PageDirectoryEntry(dword* pde) : m_pde(pde) { }
dword* pageTableBase() { return reinterpret_cast<dword*>(raw() & 0xfffff000u); } dword* page_table_base() { return reinterpret_cast<dword*>(raw() & 0xfffff000u); }
void setPageTableBase(dword value) void set_page_table_base(dword value)
{ {
*m_pde &= 0xfff; *m_pde &= 0xfff;
*m_pde |= value & 0xfffff000; *m_pde |= value & 0xfffff000;

View file

@ -90,7 +90,7 @@ void initialize()
#endif #endif
} }
word getISR() word get_isr()
{ {
IO::out8(PIC0_CTL, 0x0b); IO::out8(PIC0_CTL, 0x0b);
IO::out8(PIC1_CTL, 0x0b); IO::out8(PIC1_CTL, 0x0b);

View file

@ -8,7 +8,7 @@ void enable(byte number);
void disable(byte number); void disable(byte number);
void eoi(byte number); void eoi(byte number);
void initialize(); void initialize();
word getISR(); word get_isr();
word get_irr(); word get_irr();
} }

View file

@ -94,21 +94,21 @@ ByteBuffer procfs$pid_vmo(Process& process)
ByteBuffer procfs$pid_stack(Process& process) ByteBuffer procfs$pid_stack(Process& process)
{ {
ProcessInspectionHandle handle(process); ProcessInspectionHandle handle(process);
ProcessPagingScope pagingScope(process); ProcessPagingScope paging_scope(process);
struct RecognizedSymbol { struct RecognizedSymbol {
dword address; dword address;
const KSym* ksym; const KSym* ksym;
}; };
Vector<RecognizedSymbol> recognizedSymbols; Vector<RecognizedSymbol> recognized_symbols;
if (auto* eipKsym = ksymbolicate(process.tss().eip)) if (auto* eip_ksym = ksymbolicate(process.tss().eip))
recognizedSymbols.append({ process.tss().eip, eipKsym }); recognized_symbols.append({ process.tss().eip, eip_ksym });
for (dword* stackPtr = (dword*)process.framePtr(); process.validate_read_from_kernel(LinearAddress((dword)stackPtr)); stackPtr = (dword*)*stackPtr) { for (dword* stack_ptr = (dword*)process.frame_ptr(); process.validate_read_from_kernel(LinearAddress((dword)stack_ptr)); stack_ptr = (dword*)*stack_ptr) {
dword retaddr = stackPtr[1]; dword retaddr = stack_ptr[1];
if (auto* ksym = ksymbolicate(retaddr)) if (auto* ksym = ksymbolicate(retaddr))
recognizedSymbols.append({ retaddr, ksym }); recognized_symbols.append({ retaddr, ksym });
} }
StringBuilder builder; StringBuilder builder;
for (auto& symbol : recognizedSymbols) { for (auto& symbol : recognized_symbols) {
unsigned offset = symbol.address - symbol.ksym->address; unsigned offset = symbol.address - symbol.ksym->address;
builder.appendf("%p %s +%u\n", symbol.address, symbol.ksym->name, offset); builder.appendf("%p %s +%u\n", symbol.address, symbol.ksym->name, offset);
} }
@ -306,7 +306,7 @@ ByteBuffer procfs$kmalloc(SynthFSInode&)
ByteBuffer procfs$summary(SynthFSInode&) ByteBuffer procfs$summary(SynthFSInode&)
{ {
InterruptDisabler disabler; InterruptDisabler disabler;
auto processes = Process::allProcesses(); auto processes = Process::all_processes();
StringBuilder builder; StringBuilder builder;
builder.appendf("PID TPG PGP SID OWNER STATE PPID NSCHED FDS TTY NAME\n"); builder.appendf("PID TPG PGP SID OWNER STATE PPID NSCHED FDS TTY NAME\n");
for (auto* process : processes) { for (auto* process : processes) {
@ -316,9 +316,9 @@ ByteBuffer procfs$summary(SynthFSInode&)
process->pgid(), process->pgid(),
process->sid(), process->sid(),
process->uid(), process->uid(),
toString(process->state()), to_string(process->state()),
process->ppid(), process->ppid(),
process->timesScheduled(), process->times_scheduled(),
process->number_of_open_file_descriptors(), process->number_of_open_file_descriptors(),
process->tty() ? strrchr(process->tty()->tty_name().characters(), '/') + 1 : "n/a", process->tty() ? strrchr(process->tty()->tty_name().characters(), '/') + 1 : "n/a",
process->name().characters()); process->name().characters());

View file

@ -19,7 +19,6 @@ public:
void remove_process(Process&); void remove_process(Process&);
void add_sys_file(String&&, Function<ByteBuffer(SynthFSInode&)>&& read_callback, Function<ssize_t(SynthFSInode&, const ByteBuffer&)>&& write_callback); void add_sys_file(String&&, Function<ByteBuffer(SynthFSInode&)>&& read_callback, Function<ssize_t(SynthFSInode&, const ByteBuffer&)>&& write_callback);
void add_sys_bool(String&&, bool*, Function<void()>&& change_callback = nullptr); void add_sys_bool(String&&, bool*, Function<void()>&& change_callback = nullptr);
private: private:

View file

@ -27,22 +27,22 @@
#define SIGNAL_DEBUG #define SIGNAL_DEBUG
#define MAX_PROCESS_GIDS 32 #define MAX_PROCESS_GIDS 32
static const dword defaultStackSize = 16384; static const dword default_stack_size = 16384;
static pid_t next_pid; static pid_t next_pid;
InlineLinkedList<Process>* g_processes; InlineLinkedList<Process>* g_processes;
static String* s_hostname; static String* s_hostname;
static String& hostnameStorage(InterruptDisabler&) static String& hostname_storage(InterruptDisabler&)
{ {
ASSERT(s_hostname); ASSERT(s_hostname);
return *s_hostname; return *s_hostname;
} }
static String getHostname() static String get_hostname()
{ {
InterruptDisabler disabler; InterruptDisabler disabler;
return hostnameStorage(disabler).isolated_copy(); return hostname_storage(disabler).isolated_copy();
} }
CoolGlobals* g_cool_globals; CoolGlobals* g_cool_globals;
@ -59,7 +59,7 @@ void Process::initialize()
initialize_gui_statics(); initialize_gui_statics();
} }
Vector<Process*> Process::allProcesses() Vector<Process*> Process::all_processes()
{ {
InterruptDisabler disabler; InterruptDisabler disabler;
Vector<Process*> processes; Vector<Process*> processes;
@ -74,8 +74,8 @@ Region* Process::allocate_region(LinearAddress laddr, size_t size, String&& name
size = PAGE_ROUND_UP(size); size = PAGE_ROUND_UP(size);
// FIXME: This needs sanity checks. What if this overlaps existing regions? // FIXME: This needs sanity checks. What if this overlaps existing regions?
if (laddr.is_null()) { if (laddr.is_null()) {
laddr = m_nextRegion; laddr = m_next_region;
m_nextRegion = m_nextRegion.offset(size).offset(PAGE_SIZE); m_next_region = m_next_region.offset(size).offset(PAGE_SIZE);
} }
laddr.mask(0xfffff000); laddr.mask(0xfffff000);
m_regions.append(adopt(*new Region(laddr, size, move(name), is_readable, is_writable))); m_regions.append(adopt(*new Region(laddr, size, move(name), is_readable, is_writable)));
@ -90,8 +90,8 @@ Region* Process::allocate_file_backed_region(LinearAddress laddr, size_t size, R
size = PAGE_ROUND_UP(size); size = PAGE_ROUND_UP(size);
// FIXME: This needs sanity checks. What if this overlaps existing regions? // FIXME: This needs sanity checks. What if this overlaps existing regions?
if (laddr.is_null()) { if (laddr.is_null()) {
laddr = m_nextRegion; laddr = m_next_region;
m_nextRegion = m_nextRegion.offset(size).offset(PAGE_SIZE); m_next_region = m_next_region.offset(size).offset(PAGE_SIZE);
} }
laddr.mask(0xfffff000); laddr.mask(0xfffff000);
m_regions.append(adopt(*new Region(laddr, size, move(inode), move(name), is_readable, is_writable))); m_regions.append(adopt(*new Region(laddr, size, move(inode), move(name), is_readable, is_writable)));
@ -105,12 +105,12 @@ Region* Process::allocate_region_with_vmo(LinearAddress laddr, size_t size, Reta
size = PAGE_ROUND_UP(size); size = PAGE_ROUND_UP(size);
// FIXME: This needs sanity checks. What if this overlaps existing regions? // FIXME: This needs sanity checks. What if this overlaps existing regions?
if (laddr.is_null()) { if (laddr.is_null()) {
laddr = m_nextRegion; laddr = m_next_region;
m_nextRegion = m_nextRegion.offset(size).offset(PAGE_SIZE); m_next_region = m_next_region.offset(size).offset(PAGE_SIZE);
} }
laddr.mask(0xfffff000); laddr.mask(0xfffff000);
offset_in_vmo &= PAGE_MASK; offset_in_vmo &= PAGE_MASK;
size = ceilDiv(size, PAGE_SIZE) * PAGE_SIZE; size = ceil_div(size, PAGE_SIZE) * PAGE_SIZE;
m_regions.append(adopt(*new Region(laddr, size, move(vmo), offset_in_vmo, move(name), is_readable, is_writable))); m_regions.append(adopt(*new Region(laddr, size, move(vmo), offset_in_vmo, move(name), is_readable, is_writable)));
MM.map_region(*this, *m_regions.last()); MM.map_region(*this, *m_regions.last());
return m_regions.last().ptr(); return m_regions.last().ptr();
@ -129,7 +129,7 @@ bool Process::deallocate_region(Region& region)
return false; return false;
} }
Region* Process::regionFromRange(LinearAddress laddr, size_t size) Region* Process::region_from_range(LinearAddress laddr, size_t size)
{ {
for (auto& region : m_regions) { for (auto& region : m_regions) {
if (region->laddr() == laddr && region->size() == size) if (region->laddr() == laddr && region->size() == size)
@ -142,7 +142,7 @@ int Process::sys$set_mmap_name(void* addr, size_t size, const char* name)
{ {
if (!validate_read_str(name)) if (!validate_read_str(name))
return -EFAULT; return -EFAULT;
auto* region = regionFromRange(LinearAddress((dword)addr), size); auto* region = region_from_range(LinearAddress((dword)addr), size);
if (!region) if (!region)
return -EINVAL; return -EINVAL;
region->set_name(String(name)); region->set_name(String(name));
@ -193,7 +193,7 @@ void* Process::sys$mmap(const Syscall::SC_mmap_params* params)
int Process::sys$munmap(void* addr, size_t size) int Process::sys$munmap(void* addr, size_t size)
{ {
InterruptDisabler disabler; InterruptDisabler disabler;
auto* region = regionFromRange(LinearAddress((dword)addr), size); auto* region = region_from_range(LinearAddress((dword)addr), size);
if (!region) if (!region)
return -1; return -1;
if (!deallocate_region(*region)) if (!deallocate_region(*region))
@ -205,7 +205,7 @@ int Process::sys$gethostname(char* buffer, size_t size)
{ {
if (!validate_write(buffer, size)) if (!validate_write(buffer, size))
return -EFAULT; return -EFAULT;
auto hostname = getHostname(); auto hostname = get_hostname();
if (size < (hostname.length() + 1)) if (size < (hostname.length() + 1))
return -ENAMETOOLONG; return -ENAMETOOLONG;
memcpy(buffer, hostname.characters(), size); memcpy(buffer, hostname.characters(), size);
@ -214,7 +214,7 @@ int Process::sys$gethostname(char* buffer, size_t size)
Process* Process::fork(RegisterDump& regs) Process* Process::fork(RegisterDump& regs)
{ {
auto* child = new Process(String(m_name), m_uid, m_gid, m_pid, m_ring, m_cwd.copyRef(), m_executable.copyRef(), m_tty, this); auto* child = new Process(String(m_name), m_uid, m_gid, m_pid, m_ring, m_cwd.copy_ref(), m_executable.copy_ref(), m_tty, this);
if (!child) if (!child)
return nullptr; return nullptr;
@ -235,7 +235,7 @@ Process* Process::fork(RegisterDump& regs)
child->m_regions.append(move(cloned_region)); child->m_regions.append(move(cloned_region));
MM.map_region(*child, *child->m_regions.last()); MM.map_region(*child, *child->m_regions.last());
if (region.ptr() == m_display_framebuffer_region.ptr()) if (region.ptr() == m_display_framebuffer_region.ptr())
child->m_display_framebuffer_region = child->m_regions.last().copyRef(); child->m_display_framebuffer_region = child->m_regions.last().copy_ref();
} }
for (auto gid : m_gids) for (auto gid : m_gids)
@ -298,7 +298,7 @@ int Process::do_exec(const String& path, Vector<String>&& arguments, Vector<Stri
return error; return error;
} }
if (!descriptor->metadata().mayExecute(m_euid, m_gids)) if (!descriptor->metadata().may_execute(m_euid, m_gids))
return -EACCES; return -EACCES;
if (!descriptor->metadata().size) { if (!descriptor->metadata().size) {
@ -317,7 +317,7 @@ int Process::do_exec(const String& path, Vector<String>&& arguments, Vector<Stri
auto vmo = VMObject::create_file_backed(descriptor->inode(), descriptor->metadata().size); auto vmo = VMObject::create_file_backed(descriptor->inode(), descriptor->metadata().size);
vmo->set_name(descriptor->absolute_path()); vmo->set_name(descriptor->absolute_path());
auto* region = allocate_region_with_vmo(LinearAddress(), descriptor->metadata().size, vmo.copyRef(), 0, "helper", true, false); auto* region = allocate_region_with_vmo(LinearAddress(), descriptor->metadata().size, vmo.copy_ref(), 0, "helper", true, false);
// FIXME: Should we consider doing on-demand paging here? Is it actually useful? // FIXME: Should we consider doing on-demand paging here? Is it actually useful?
bool success = region->page_in(); bool success = region->page_in();
@ -332,7 +332,7 @@ int Process::do_exec(const String& path, Vector<String>&& arguments, Vector<Stri
ASSERT(size); ASSERT(size);
ASSERT(alignment == PAGE_SIZE); ASSERT(alignment == PAGE_SIZE);
size = ((size / 4096) + 1) * 4096; // FIXME: Use ceil_div? size = ((size / 4096) + 1) * 4096; // FIXME: Use ceil_div?
(void) allocate_region_with_vmo(laddr, size, vmo.copyRef(), offset_in_image, String(name), is_readable, is_writable); (void) allocate_region_with_vmo(laddr, size, vmo.copy_ref(), offset_in_image, String(name), is_readable, is_writable);
return laddr.as_ptr(); return laddr.as_ptr();
}; };
loader.alloc_section_hook = [&] (LinearAddress laddr, size_t size, size_t alignment, bool is_readable, bool is_writable, const String& name) { loader.alloc_section_hook = [&] (LinearAddress laddr, size_t size, size_t alignment, bool is_readable, bool is_writable, const String& name) {
@ -400,10 +400,10 @@ int Process::do_exec(const String& path, Vector<String>&& arguments, Vector<Stri
m_tss.gs = 0x23; m_tss.gs = 0x23;
m_tss.ss = 0x23; m_tss.ss = 0x23;
m_tss.cr3 = page_directory().cr3(); m_tss.cr3 = page_directory().cr3();
m_stack_region = allocate_region(LinearAddress(), defaultStackSize, "stack"); m_stack_region = allocate_region(LinearAddress(), default_stack_size, "stack");
ASSERT(m_stack_region); ASSERT(m_stack_region);
m_stackTop3 = m_stack_region->laddr().offset(defaultStackSize).get(); m_stack_top3 = m_stack_region->laddr().offset(default_stack_size).get();
m_tss.esp = m_stackTop3; m_tss.esp = m_stack_top3;
m_tss.ss0 = 0x10; m_tss.ss0 = 0x10;
m_tss.esp0 = old_esp0; m_tss.esp0 = old_esp0;
m_tss.ss2 = m_pid; m_tss.ss2 = m_pid;
@ -490,7 +490,7 @@ Process* Process::create_user_process(const String& path, uid_t uid, gid_t gid,
{ {
InterruptDisabler disabler; InterruptDisabler disabler;
if (auto* parent = Process::from_pid(parent_pid)) if (auto* parent = Process::from_pid(parent_pid))
cwd = parent->m_cwd.copyRef(); cwd = parent->m_cwd.copy_ref();
} }
if (!cwd) if (!cwd)
@ -634,9 +634,9 @@ Process::Process(String&& name, uid_t uid, gid_t gid, pid_t ppid, RingLevel ring
} }
if (fork_parent) if (fork_parent)
m_nextRegion = fork_parent->m_nextRegion; m_next_region = fork_parent->m_next_region;
else else
m_nextRegion = LinearAddress(0x10000000); m_next_region = LinearAddress(0x10000000);
if (fork_parent) { if (fork_parent) {
memcpy(&m_tss, &fork_parent->m_tss, sizeof(m_tss)); memcpy(&m_tss, &fork_parent->m_tss, sizeof(m_tss));
@ -647,7 +647,7 @@ Process::Process(String&& name, uid_t uid, gid_t gid, pid_t ppid, RingLevel ring
m_tss.eflags = 0x0202; m_tss.eflags = 0x0202;
word cs, ds, ss; word cs, ds, ss;
if (isRing0()) { if (is_ring0()) {
cs = 0x08; cs = 0x08;
ds = 0x10; ds = 0x10;
ss = 0x10; ss = 0x10;
@ -667,34 +667,34 @@ Process::Process(String&& name, uid_t uid, gid_t gid, pid_t ppid, RingLevel ring
m_tss.cr3 = page_directory().cr3(); m_tss.cr3 = page_directory().cr3();
if (isRing0()) { if (is_ring0()) {
// FIXME: This memory is leaked. // FIXME: This memory is leaked.
// But uh, there's also no kernel process termination, so I guess it's not technically leaked... // But uh, there's also no kernel process termination, so I guess it's not technically leaked...
dword stackBottom = (dword)kmalloc_eternal(defaultStackSize); dword stack_bottom = (dword)kmalloc_eternal(default_stack_size);
m_stackTop0 = (stackBottom + defaultStackSize) & 0xffffff8; m_stack_top0 = (stack_bottom + default_stack_size) & 0xffffff8;
m_tss.esp = m_stackTop0; m_tss.esp = m_stack_top0;
} else { } else {
if (fork_parent) { if (fork_parent) {
m_stackTop3 = fork_parent->m_stackTop3; m_stack_top3 = fork_parent->m_stack_top3;
} else { } else {
auto* region = allocate_region(LinearAddress(), defaultStackSize, "stack"); auto* region = allocate_region(LinearAddress(), default_stack_size, "stack");
ASSERT(region); ASSERT(region);
m_stackTop3 = region->laddr().offset(defaultStackSize).get(); m_stack_top3 = region->laddr().offset(default_stack_size).get();
m_tss.esp = m_stackTop3; m_tss.esp = m_stack_top3;
} }
} }
if (isRing3()) { if (is_ring3()) {
// Ring3 processes need a separate stack for Ring0. // Ring3 processes need a separate stack for Ring0.
m_kernelStack = kmalloc(defaultStackSize); m_kernel_stack = kmalloc(default_stack_size);
m_stackTop0 = ((dword)m_kernelStack + defaultStackSize) & 0xffffff8; m_stack_top0 = ((dword)m_kernel_stack + default_stack_size) & 0xffffff8;
m_tss.ss0 = 0x10; m_tss.ss0 = 0x10;
m_tss.esp0 = m_stackTop0; m_tss.esp0 = m_stack_top0;
} }
// HACK: Ring2 SS in the TSS is the current PID. // HACK: Ring2 SS in the TSS is the current PID.
m_tss.ss2 = m_pid; m_tss.ss2 = m_pid;
m_farPtr.offset = 0x98765432; m_far_ptr.offset = 0x98765432;
} }
Process::~Process() Process::~Process()
@ -709,13 +709,13 @@ Process::~Process()
if (selector()) if (selector())
gdt_free_entry(selector()); gdt_free_entry(selector());
if (m_kernelStack) { if (m_kernel_stack) {
kfree(m_kernelStack); kfree(m_kernel_stack);
m_kernelStack = nullptr; m_kernel_stack = nullptr;
} }
} }
void Process::dumpRegions() void Process::dump_regions()
{ {
kprintf("Process %s(%u) regions:\n", name().characters(), pid()); kprintf("Process %s(%u) regions:\n", name().characters(), pid());
kprintf("BEGIN END SIZE NAME\n"); kprintf("BEGIN END SIZE NAME\n");
@ -818,7 +818,7 @@ bool Process::dispatch_signal(byte signal)
bool interrupting_in_kernel = (ret_cs & 3) == 0; bool interrupting_in_kernel = (ret_cs & 3) == 0;
if (interrupting_in_kernel) { if (interrupting_in_kernel) {
dbgprintf("dispatch_signal to %s(%u) in state=%s with return to %w:%x\n", name().characters(), pid(), toString(state()), ret_cs, ret_eip); dbgprintf("dispatch_signal to %s(%u) in state=%s with return to %w:%x\n", name().characters(), pid(), to_string(state()), ret_cs, ret_eip);
ASSERT(is_blocked()); ASSERT(is_blocked());
m_tss_to_resume_kernel = m_tss; m_tss_to_resume_kernel = m_tss;
#ifdef SIGNAL_DEBUG #ifdef SIGNAL_DEBUG
@ -826,19 +826,19 @@ bool Process::dispatch_signal(byte signal)
#endif #endif
} }
ProcessPagingScope pagingScope(*this); ProcessPagingScope paging_scope(*this);
if (interrupting_in_kernel) { if (interrupting_in_kernel) {
if (!m_signal_stack_user_region) { if (!m_signal_stack_user_region) {
m_signal_stack_user_region = allocate_region(LinearAddress(), defaultStackSize, "signal stack (user)"); m_signal_stack_user_region = allocate_region(LinearAddress(), default_stack_size, "signal stack (user)");
ASSERT(m_signal_stack_user_region); ASSERT(m_signal_stack_user_region);
m_signal_stack_kernel_region = allocate_region(LinearAddress(), defaultStackSize, "signal stack (kernel)"); m_signal_stack_kernel_region = allocate_region(LinearAddress(), default_stack_size, "signal stack (kernel)");
ASSERT(m_signal_stack_user_region); ASSERT(m_signal_stack_user_region);
} }
m_tss.ss = 0x23; m_tss.ss = 0x23;
m_tss.esp = m_signal_stack_user_region->laddr().offset(defaultStackSize).get() & 0xfffffff8; m_tss.esp = m_signal_stack_user_region->laddr().offset(default_stack_size).get() & 0xfffffff8;
m_tss.ss0 = 0x10; m_tss.ss0 = 0x10;
m_tss.esp0 = m_signal_stack_kernel_region->laddr().offset(defaultStackSize).get() & 0xfffffff8; m_tss.esp0 = m_signal_stack_kernel_region->laddr().offset(default_stack_size).get() & 0xfffffff8;
push_value_on_stack(ret_eflags); push_value_on_stack(ret_eflags);
push_value_on_stack(ret_cs); push_value_on_stack(ret_cs);
push_value_on_stack(ret_eip); push_value_on_stack(ret_eip);
@ -903,7 +903,7 @@ bool Process::dispatch_signal(byte signal)
set_state(Skip1SchedulerPass); set_state(Skip1SchedulerPass);
#ifdef SIGNAL_DEBUG #ifdef SIGNAL_DEBUG
dbgprintf("signal: Okay, %s(%u) {%s} has been primed with signal handler %w:%x\n", name().characters(), pid(), toString(state()), m_tss.cs, m_tss.eip); dbgprintf("signal: Okay, %s(%u) {%s} has been primed with signal handler %w:%x\n", name().characters(), pid(), to_string(state()), m_tss.cs, m_tss.eip);
#endif #endif
return true; return true;
} }
@ -935,7 +935,7 @@ void Process::crash()
ASSERT_INTERRUPTS_DISABLED(); ASSERT_INTERRUPTS_DISABLED();
ASSERT(state() != Dead); ASSERT(state() != Dead);
m_termination_signal = SIGSEGV; m_termination_signal = SIGSEGV;
dumpRegions(); dump_regions();
die(); die();
Scheduler::pick_next_and_switch_now(); Scheduler::pick_next_and_switch_now();
ASSERT_NOT_REACHED(); ASSERT_NOT_REACHED();
@ -996,10 +996,10 @@ int Process::sys$ttyname_r(int fd, char* buffer, size_t size)
return -EBADF; return -EBADF;
if (!descriptor->is_tty()) if (!descriptor->is_tty())
return -ENOTTY; return -ENOTTY;
auto ttyName = descriptor->tty()->tty_name(); auto tty_name = descriptor->tty()->tty_name();
if (size < ttyName.length() + 1) if (size < tty_name.length() + 1)
return -ERANGE; return -ERANGE;
strcpy(buffer, ttyName.characters()); strcpy(buffer, tty_name.characters());
return 0; return 0;
} }
@ -1246,7 +1246,7 @@ int Process::sys$readlink(const char* path, char* buffer, size_t size)
if (!descriptor) if (!descriptor)
return error; return error;
if (!descriptor->metadata().isSymbolicLink()) if (!descriptor->metadata().is_symlink())
return -EINVAL; return -EINVAL;
auto contents = descriptor->read_entire_file(*this); auto contents = descriptor->read_entire_file(*this);
@ -1389,7 +1389,7 @@ int Process::sys$uname(utsname* buf)
strcpy(buf->release, "1.0-dev"); strcpy(buf->release, "1.0-dev");
strcpy(buf->version, "FIXME"); strcpy(buf->version, "FIXME");
strcpy(buf->machine, "i386"); strcpy(buf->machine, "i386");
strcpy(buf->nodename, getHostname().characters()); strcpy(buf->nodename, get_hostname().characters());
return 0; return 0;
} }
@ -1427,9 +1427,9 @@ int Process::sys$sleep(unsigned seconds)
if (!seconds) if (!seconds)
return 0; return 0;
sleep(seconds * TICKS_PER_SECOND); sleep(seconds * TICKS_PER_SECOND);
if (m_wakeupTime > system.uptime) { if (m_wakeup_time > system.uptime) {
ASSERT(m_was_interrupted_while_blocked); ASSERT(m_was_interrupted_while_blocked);
dword ticks_left_until_original_wakeup_time = m_wakeupTime - system.uptime; dword ticks_left_until_original_wakeup_time = m_wakeup_time - system.uptime;
return ticks_left_until_original_wakeup_time / TICKS_PER_SECOND; return ticks_left_until_original_wakeup_time / TICKS_PER_SECOND;
} }
return 0; return 0;
@ -1496,7 +1496,7 @@ int Process::reap(Process& process)
} }
} }
dbgprintf("reap: %s(%u) {%s}\n", process.name().characters(), process.pid(), toString(process.state())); dbgprintf("reap: %s(%u) {%s}\n", process.name().characters(), process.pid(), to_string(process.state()));
ASSERT(process.state() == Dead); ASSERT(process.state() == Dead);
g_processes->remove(&process); g_processes->remove(&process);
delete &process; delete &process;
@ -1576,7 +1576,7 @@ void Process::unblock()
void Process::block(Process::State new_state) void Process::block(Process::State new_state)
{ {
if (state() != Process::Running) { if (state() != Process::Running) {
kprintf("Process::block: %s(%u) block(%u/%s) with state=%u/%s\n", name().characters(), pid(), new_state, toString(new_state), state(), toString(state())); kprintf("Process::block: %s(%u) block(%u/%s) with state=%u/%s\n", name().characters(), pid(), new_state, to_string(new_state), state(), to_string(state()));
} }
ASSERT(state() == Process::Running); ASSERT(state() == Process::Running);
system.nblocked++; system.nblocked++;
@ -1593,7 +1593,7 @@ void block(Process::State state)
void sleep(dword ticks) void sleep(dword ticks)
{ {
ASSERT(current->state() == Process::Running); ASSERT(current->state() == Process::Running);
current->setWakeupTime(system.uptime + ticks); current->set_wakeup_time(system.uptime + ticks);
current->block(Process::BlockedSleep); current->block(Process::BlockedSleep);
sched_yield(); sched_yield();
} }
@ -1619,7 +1619,7 @@ bool Process::validate_read_from_kernel(LinearAddress laddr) const
bool Process::validate_read(const void* address, size_t size) const bool Process::validate_read(const void* address, size_t size) const
{ {
if (isRing0()) { if (is_ring0()) {
if (is_inside_kernel_code(LinearAddress((dword)address))) if (is_inside_kernel_code(LinearAddress((dword)address)))
return true; return true;
if (is_kmalloc_address(address)) if (is_kmalloc_address(address))
@ -1639,7 +1639,7 @@ bool Process::validate_read(const void* address, size_t size) const
bool Process::validate_write(void* address, size_t size) const bool Process::validate_write(void* address, size_t size) const
{ {
if (isRing0()) { if (is_ring0()) {
if (is_kmalloc_address(address)) if (is_kmalloc_address(address))
return true; return true;
} }

View file

@ -55,7 +55,7 @@ public:
static Process* create_user_process(const String& path, uid_t, gid_t, pid_t ppid, int& error, Vector<String>&& arguments = Vector<String>(), Vector<String>&& environment = Vector<String>(), TTY* = nullptr); static Process* create_user_process(const String& path, uid_t, gid_t, pid_t ppid, int& error, Vector<String>&& arguments = Vector<String>(), Vector<String>&& environment = Vector<String>(), TTY* = nullptr);
~Process(); ~Process();
static Vector<Process*> allProcesses(); static Vector<Process*> all_processes();
enum State { enum State {
Invalid = 0, Invalid = 0,
@ -78,8 +78,8 @@ public:
Ring3 = 3, Ring3 = 3,
}; };
bool isRing0() const { return m_ring == Ring0; } bool is_ring0() const { return m_ring == Ring0; }
bool isRing3() const { return m_ring == Ring3; } bool is_ring3() const { return m_ring == Ring3; }
bool is_blocked() const bool is_blocked() const
{ {
@ -98,7 +98,7 @@ public:
pid_t sid() const { return m_sid; } pid_t sid() const { return m_sid; }
pid_t pgid() const { return m_pgid; } pid_t pgid() const { return m_pgid; }
dword ticks() const { return m_ticks; } dword ticks() const { return m_ticks; }
word selector() const { return m_farPtr.selector; } word selector() const { return m_far_ptr.selector; }
TSS32& tss() { return m_tss; } TSS32& tss() { return m_tss; }
State state() const { return m_state; } State state() const { return m_state; }
uid_t uid() const { return m_uid; } uid_t uid() const { return m_uid; }
@ -107,7 +107,7 @@ public:
gid_t egid() const { return m_egid; } gid_t egid() const { return m_egid; }
pid_t ppid() const { return m_ppid; } pid_t ppid() const { return m_ppid; }
const FarPtr& farPtr() const { return m_farPtr; } const FarPtr& far_ptr() const { return m_far_ptr; }
FileDescriptor* file_descriptor(int fd); FileDescriptor* file_descriptor(int fd);
const FileDescriptor* file_descriptor(int fd) const; const FileDescriptor* file_descriptor(int fd) const;
@ -115,8 +115,8 @@ public:
void block(Process::State); void block(Process::State);
void unblock(); void unblock();
void setWakeupTime(dword t) { m_wakeupTime = t; } void set_wakeup_time(dword t) { m_wakeup_time = t; }
dword wakeupTime() const { return m_wakeupTime; } dword wakeup_time() const { return m_wakeup_time; }
template<typename Callback> static void for_each(Callback); template<typename Callback> static void for_each(Callback);
template<typename Callback> static void for_each_in_pgrp(pid_t, Callback); template<typename Callback> static void for_each_in_pgrp(pid_t, Callback);
@ -124,10 +124,10 @@ public:
template<typename Callback> static void for_each_not_in_state(State, Callback); template<typename Callback> static void for_each_not_in_state(State, Callback);
template<typename Callback> void for_each_child(Callback); template<typename Callback> void for_each_child(Callback);
bool tick() { ++m_ticks; return --m_ticksLeft; } bool tick() { ++m_ticks; return --m_ticks_left; }
void set_ticks_left(dword t) { m_ticksLeft = t; } void set_ticks_left(dword t) { m_ticks_left = t; }
void setSelector(word s) { m_farPtr.selector = s; } void set_selector(word s) { m_far_ptr.selector = s; }
void set_state(State s) { m_state = s; } void set_state(State s) { m_state = s; }
void die(); void die();
@ -225,12 +225,12 @@ public:
const TTY* tty() const { return m_tty; } const TTY* tty() const { return m_tty; }
void set_tty(TTY* tty) { m_tty = tty; } void set_tty(TTY* tty) { m_tty = tty; }
size_t regionCount() const { return m_regions.size(); } size_t region_count() const { return m_regions.size(); }
const Vector<RetainPtr<Region>>& regions() const { return m_regions; } const Vector<RetainPtr<Region>>& regions() const { return m_regions; }
void dumpRegions(); void dump_regions();
void did_schedule() { ++m_timesScheduled; } void did_schedule() { ++m_times_scheduled; }
dword timesScheduled() const { return m_timesScheduled; } dword times_scheduled() const { return m_times_scheduled; }
dword m_ticks_in_user { 0 }; dword m_ticks_in_user { 0 };
dword m_ticks_in_kernel { 0 }; dword m_ticks_in_kernel { 0 };
@ -240,9 +240,9 @@ public:
pid_t waitee_pid() const { return m_waitee_pid; } pid_t waitee_pid() const { return m_waitee_pid; }
dword framePtr() const { return m_tss.ebp; } dword frame_ptr() const { return m_tss.ebp; }
dword stackPtr() const { return m_tss.esp; } dword stack_ptr() const { return m_tss.esp; }
dword stackTop() const { return m_tss.ss == 0x10 ? m_stackTop0 : m_stackTop3; } dword stack_top() const { return m_tss.ss == 0x10 ? m_stack_top0 : m_stack_top3; }
bool validate_read_from_kernel(LinearAddress) const; bool validate_read_from_kernel(LinearAddress) const;
@ -306,12 +306,12 @@ private:
pid_t m_sid { 0 }; pid_t m_sid { 0 };
pid_t m_pgid { 0 }; pid_t m_pgid { 0 };
dword m_ticks { 0 }; dword m_ticks { 0 };
dword m_ticksLeft { 0 }; dword m_ticks_left { 0 };
dword m_stackTop0 { 0 }; dword m_stack_top0 { 0 };
dword m_stackTop3 { 0 }; dword m_stack_top3 { 0 };
FarPtr m_farPtr; FarPtr m_far_ptr;
State m_state { Invalid }; State m_state { Invalid };
dword m_wakeupTime { 0 }; dword m_wakeup_time { 0 };
TSS32 m_tss; TSS32 m_tss;
TSS32 m_tss_to_resume_kernel; TSS32 m_tss_to_resume_kernel;
FPUState m_fpu_state; FPUState m_fpu_state;
@ -325,8 +325,8 @@ private:
Vector<FileDescriptorAndFlags> m_fds; Vector<FileDescriptorAndFlags> m_fds;
RingLevel m_ring { Ring0 }; RingLevel m_ring { Ring0 };
int m_error { 0 }; int m_error { 0 };
void* m_kernelStack { nullptr }; void* m_kernel_stack { nullptr };
dword m_timesScheduled { 0 }; dword m_times_scheduled { 0 };
pid_t m_waitee_pid { -1 }; pid_t m_waitee_pid { -1 };
int m_blocked_fd { -1 }; int m_blocked_fd { -1 };
Vector<int> m_select_read_fds; Vector<int> m_select_read_fds;
@ -349,12 +349,12 @@ private:
Region* allocate_region_with_vmo(LinearAddress, size_t, RetainPtr<VMObject>&&, size_t offset_in_vmo, String&& name, bool is_readable, bool is_writable); Region* allocate_region_with_vmo(LinearAddress, size_t, RetainPtr<VMObject>&&, size_t offset_in_vmo, String&& name, bool is_readable, bool is_writable);
bool deallocate_region(Region& region); bool deallocate_region(Region& region);
Region* regionFromRange(LinearAddress, size_t); Region* region_from_range(LinearAddress, size_t);
Vector<RetainPtr<Region>> m_regions; Vector<RetainPtr<Region>> m_regions;
// FIXME: Implement some kind of ASLR? // FIXME: Implement some kind of ASLR?
LinearAddress m_nextRegion; LinearAddress m_next_region;
LinearAddress m_return_to_ring3_from_signal_trampoline; LinearAddress m_return_to_ring3_from_signal_trampoline;
LinearAddress m_return_to_ring0_from_signal_trampoline; LinearAddress m_return_to_ring0_from_signal_trampoline;
@ -411,7 +411,7 @@ private:
Process::State m_original_state { Process::Invalid }; Process::State m_original_state { Process::Invalid };
}; };
static inline const char* toString(Process::State state) static inline const char* to_string(Process::State state)
{ {
switch (state) { switch (state) {
case Process::Invalid: return "Invalid"; case Process::Invalid: return "Invalid";

View file

@ -81,7 +81,7 @@ int Process::gui$destroy_window(int window_id)
if (it == m_windows.end()) if (it == m_windows.end())
return -EBADWINDOW; return -EBADWINDOW;
auto message = make<WSMessage>(WSMessage::WM_DestroyWindow); auto message = make<WSMessage>(WSMessage::WM_DestroyWindow);
WSMessageLoop::the().post_message((*it).value.leakPtr(), move(message), true); WSMessageLoop::the().post_message((*it).value.leak_ptr(), move(message), true);
m_windows.remove(window_id); m_windows.remove(window_id);
return 0; return 0;
} }
@ -264,7 +264,7 @@ void Process::destroy_all_windows()
{ {
for (auto& it : m_windows) { for (auto& it : m_windows) {
auto message = make<WSMessage>(WSMessage::WM_DestroyWindow); auto message = make<WSMessage>(WSMessage::WM_DestroyWindow);
WSMessageLoop::the().post_message(it.value.leakPtr(), move(message), true); WSMessageLoop::the().post_message(it.value.leak_ptr(), move(message), true);
} }
m_windows.clear(); m_windows.clear();
} }

View file

@ -18,21 +18,21 @@ public:
Queue() { } Queue() { }
~Queue() ~Queue()
{ {
while (!isEmpty()) while (!is_empty())
dequeue(); dequeue();
} }
bool isEmpty() const { return !m_head; } bool is_empty() const { return !m_head; }
void enqueue(T&& item) void enqueue(T&& item)
{ {
auto* newNode = new Node(move(item)); auto* new_node = new Node(move(item));
if (!m_head) { if (!m_head) {
m_head = newNode; m_head = new_node;
m_tail = newNode; m_tail = new_node;
} else if (m_tail) { } else if (m_tail) {
newNode->prev = m_tail; new_node->prev = m_tail;
m_tail->next = newNode; m_tail->next = new_node;
m_tail = newNode; m_tail = new_node;
} }
dump("enqueue"); dump("enqueue");
} }

View file

@ -4,34 +4,34 @@
namespace RTC { namespace RTC {
static time_t s_bootTime; static time_t s_boot_time;
void initialize() void initialize()
{ {
byte cmosMode = CMOS::read(0x0b); byte cmos_mode = CMOS::read(0x0b);
cmosMode |= 2; // 24 hour mode cmos_mode |= 2; // 24 hour mode
cmosMode |= 4; // No BCD mode cmos_mode |= 4; // No BCD mode
CMOS::write(0x0b, cmosMode); CMOS::write(0x0b, cmos_mode);
s_bootTime = now(); s_boot_time = now();
} }
time_t bootTime() time_t boot_time()
{ {
return s_bootTime; return s_boot_time;
} }
static bool updateInProgress() static bool update_in_progress()
{ {
return CMOS::read(0x0a) & 0x80; return CMOS::read(0x0a) & 0x80;
} }
inline bool isLeapYear(unsigned year) inline bool is_leap_year(unsigned year)
{ {
return ((year % 4 == 0) && ((year % 100 != 0) || (year % 400) == 0)); return ((year % 4 == 0) && ((year % 100 != 0) || (year % 400) == 0));
} }
static unsigned daysInMonthsSinceStartOfYear(unsigned month, unsigned year) static unsigned days_in_months_since_start_of_year(unsigned month, unsigned year)
{ {
switch (month) { switch (month) {
case 11: return 30; case 11: return 30;
@ -44,7 +44,7 @@ static unsigned daysInMonthsSinceStartOfYear(unsigned month, unsigned year)
case 4: return 30; case 4: return 30;
case 3: return 31; case 3: return 31;
case 2: case 2:
if (isLeapYear(year)) if (is_leap_year(year))
return 29; return 29;
return 28; return 28;
case 1: return 31; case 1: return 31;
@ -52,12 +52,12 @@ static unsigned daysInMonthsSinceStartOfYear(unsigned month, unsigned year)
} }
} }
static unsigned daysInYearsSinceEpoch(unsigned year) static unsigned days_in_years_since_epoch(unsigned year)
{ {
unsigned days = 0; unsigned days = 0;
while (year > 1969) { while (year > 1969) {
days += 365; days += 365;
if (isLeapYear(year)) if (is_leap_year(year))
++days; ++days;
--year; --year;
} }
@ -69,7 +69,7 @@ time_t now()
// FIXME: We should probably do something more robust here. // FIXME: We should probably do something more robust here.
// Perhaps read all the values twice and verify that they were identical. // Perhaps read all the values twice and verify that they were identical.
// We don't want to be caught in the middle of an RTC register update. // We don't want to be caught in the middle of an RTC register update.
while (updateInProgress()) while (update_in_progress())
; ;
unsigned year = (CMOS::read(0x32) * 100) + CMOS::read(0x09); unsigned year = (CMOS::read(0x32) * 100) + CMOS::read(0x09);
@ -81,8 +81,8 @@ time_t now()
ASSERT(year >= 2018); ASSERT(year >= 2018);
return daysInYearsSinceEpoch(year - 1) * 86400 return days_in_years_since_epoch(year - 1) * 86400
+ daysInMonthsSinceStartOfYear(month - 1, year) * 86400 + days_in_months_since_start_of_year(month - 1, year) * 86400
+ day * 86400 + day * 86400
+ hour * 3600 + hour * 3600
+ minute * 60 + minute * 60

View file

@ -6,7 +6,7 @@ namespace RTC {
void initialize(); void initialize();
time_t now(); time_t now();
time_t bootTime(); time_t boot_time();
} }

View file

@ -31,7 +31,7 @@ bool Scheduler::pick_next()
// Check and unblock processes whose wait conditions have been met. // Check and unblock processes whose wait conditions have been met.
Process::for_each([] (auto& process) { Process::for_each([] (auto& process) {
if (process.state() == Process::BlockedSleep) { if (process.state() == Process::BlockedSleep) {
if (process.wakeupTime() <= system.uptime) if (process.wakeup_time() <= system.uptime)
process.unblock(); process.unblock();
return true; return true;
} }
@ -139,11 +139,11 @@ bool Scheduler::pick_next()
for (auto* process = g_processes->head(); process; process = process->next()) { for (auto* process = g_processes->head(); process; process = process->next()) {
//if (process->state() == Process::BlockedWait || process->state() == Process::BlockedSleep) //if (process->state() == Process::BlockedWait || process->state() == Process::BlockedSleep)
// continue; // continue;
dbgprintf("[K%x] % 12s %s(%u) @ %w:%x\n", process, toString(process->state()), process->name().characters(), process->pid(), process->tss().cs, process->tss().eip); dbgprintf("[K%x] % 12s %s(%u) @ %w:%x\n", process, to_string(process->state()), process->name().characters(), process->pid(), process->tss().cs, process->tss().eip);
} }
#endif #endif
auto* prevHead = g_processes->head(); auto* previous_head = g_processes->head();
for (;;) { for (;;) {
// Move head to tail. // Move head to tail.
g_processes->append(g_processes->remove_head()); g_processes->append(g_processes->remove_head());
@ -156,7 +156,7 @@ bool Scheduler::pick_next()
return context_switch(*process); return context_switch(*process);
} }
if (process == prevHead) { if (process == previous_head) {
// Back at process_head, nothing wants to run. Send in the colonel! // Back at process_head, nothing wants to run. Send in the colonel!
return context_switch(*s_colonel_process); return context_switch(*s_colonel_process);
} }
@ -182,7 +182,7 @@ bool Scheduler::yield()
} }
s_in_yield = false; s_in_yield = false;
//dbgprintf("yield() jumping to new process: %x (%s)\n", current->farPtr().selector, current->name().characters()); //dbgprintf("yield() jumping to new process: %x (%s)\n", current->far_ptr().selector, current->name().characters());
switch_now(); switch_now();
return 0; return 0;
} }
@ -201,7 +201,7 @@ void Scheduler::switch_now()
flush_gdt(); flush_gdt();
asm("sti\n" asm("sti\n"
"ljmp *(%%eax)\n" "ljmp *(%%eax)\n"
::"a"(&current->farPtr()) ::"a"(&current->far_ptr())
); );
} }
@ -238,10 +238,10 @@ bool Scheduler::context_switch(Process& process)
#endif #endif
if (!process.selector()) { if (!process.selector()) {
process.setSelector(gdt_alloc_entry()); process.set_selector(gdt_alloc_entry());
auto& descriptor = get_gdt_entry(process.selector()); auto& descriptor = get_gdt_entry(process.selector());
descriptor.setBase(&process.tss()); descriptor.set_base(&process.tss());
descriptor.setLimit(0xffff); descriptor.set_limit(0xffff);
descriptor.dpl = 0; descriptor.dpl = 0;
descriptor.segment_present = 1; descriptor.segment_present = 1;
descriptor.granularity = 1; descriptor.granularity = 1;
@ -264,8 +264,8 @@ int sched_yield()
static void initialize_redirection() static void initialize_redirection()
{ {
auto& descriptor = get_gdt_entry(s_redirection.selector); auto& descriptor = get_gdt_entry(s_redirection.selector);
descriptor.setBase(&s_redirection.tss); descriptor.set_base(&s_redirection.tss);
descriptor.setLimit(0xffff); descriptor.set_limit(0xffff);
descriptor.dpl = 0; descriptor.dpl = 0;
descriptor.segment_present = 1; descriptor.segment_present = 1;
descriptor.granularity = 1; descriptor.granularity = 1;

View file

@ -202,18 +202,18 @@ ssize_t SynthFSInode::read_bytes(off_t offset, size_t count, byte* buffer, FileD
ASSERT(offset >= 0); ASSERT(offset >= 0);
ASSERT(buffer); ASSERT(buffer);
ByteBuffer generatedData; ByteBuffer generated_data;
if (m_generator) { if (m_generator) {
if (!descriptor) { if (!descriptor) {
generatedData = m_generator(const_cast<SynthFSInode&>(*this)); generated_data = m_generator(const_cast<SynthFSInode&>(*this));
} else { } else {
if (!descriptor->generator_cache()) if (!descriptor->generator_cache())
descriptor->generator_cache() = m_generator(const_cast<SynthFSInode&>(*this)); descriptor->generator_cache() = m_generator(const_cast<SynthFSInode&>(*this));
generatedData = descriptor->generator_cache(); generated_data = descriptor->generator_cache();
} }
} }
auto* data = generatedData ? &generatedData : &m_data; auto* data = generated_data ? &generated_data : &m_data;
ssize_t nread = min(static_cast<off_t>(data->size() - offset), static_cast<off_t>(count)); ssize_t nread = min(static_cast<off_t>(data->size() - offset), static_cast<off_t>(count));
memcpy(buffer, data->pointer() + offset, nread); memcpy(buffer, data->pointer() + offset, nread);
if (nread == 0 && descriptor && descriptor->generator_cache()) if (nread == 0 && descriptor && descriptor->generator_cache())
@ -228,14 +228,14 @@ bool SynthFSInode::traverse_as_directory(Function<bool(const FS::DirectoryEntry&
kprintf("SynthFS: traverse_as_directory %u\n", index()); kprintf("SynthFS: traverse_as_directory %u\n", index());
#endif #endif
if (!m_metadata.isDirectory()) if (!m_metadata.is_directory())
return false; return false;
callback({ ".", 1, m_metadata.inode, 2 }); callback({ ".", 1, m_metadata.inode, 2 });
callback({ "..", 2, m_parent, 2 }); callback({ "..", 2, m_parent, 2 });
for (auto& child : m_children) for (auto& child : m_children)
callback({ child->m_name.characters(), child->m_name.length(), child->m_metadata.inode, child->m_metadata.isDirectory() ? (byte)2 : (byte)1 }); callback({ child->m_name.characters(), child->m_name.length(), child->m_metadata.inode, child->m_metadata.is_directory() ? (byte)2 : (byte)1 });
return true; return true;
} }

View file

@ -4,13 +4,13 @@
#include "Console.h" #include "Console.h"
#include "Scheduler.h" #include "Scheduler.h"
extern "C" void syscall_entry(RegisterDump&); extern "C" void syscall_trap_entry(RegisterDump&);
extern "C" void syscall_ISR(); extern "C" void syscall_trap_handler();
extern volatile RegisterDump* syscallRegDump; extern volatile RegisterDump* syscallRegDump;
asm( asm(
".globl syscall_ISR \n" ".globl syscall_trap_handler \n"
"syscall_ISR:\n" "syscall_trap_handler:\n"
" pusha\n" " pusha\n"
" pushw %ds\n" " pushw %ds\n"
" pushw %es\n" " pushw %es\n"
@ -26,7 +26,7 @@ asm(
" popw %fs\n" " popw %fs\n"
" popw %gs\n" " popw %gs\n"
" mov %esp, %eax\n" " mov %esp, %eax\n"
" call syscall_entry\n" " call syscall_trap_entry\n"
" popw %gs\n" " popw %gs\n"
" popw %gs\n" " popw %gs\n"
" popw %fs\n" " popw %fs\n"
@ -40,7 +40,7 @@ namespace Syscall {
void initialize() void initialize()
{ {
register_user_callable_interrupt_handler(0x80, syscall_ISR); register_user_callable_interrupt_handler(0x80, syscall_trap_handler);
kprintf("syscall: int 0x80 handler installed\n"); kprintf("syscall: int 0x80 handler installed\n");
} }
@ -232,7 +232,7 @@ static dword handle(RegisterDump& regs, dword function, dword arg1, dword arg2,
} }
void syscall_entry(RegisterDump& regs) void syscall_trap_entry(RegisterDump& regs)
{ {
dword function = regs.eax; dword function = regs.eax;
dword arg1 = regs.edx; dword arg1 = regs.edx;

View file

@ -99,7 +99,7 @@ enum Function {
#undef __ENUMERATE_SYSCALL #undef __ENUMERATE_SYSCALL
}; };
inline constexpr const char* toString(Function function) inline constexpr const char* to_string(Function function)
{ {
switch (function) { switch (function) {
#undef __ENUMERATE_SYSCALL #undef __ENUMERATE_SYSCALL

View file

@ -88,7 +88,7 @@ void VirtualConsole::switch_to(unsigned index)
s_consoles[s_active_console]->set_active(false); s_consoles[s_active_console]->set_active(false);
s_active_console = index; s_active_console = index;
s_consoles[s_active_console]->set_active(true); s_consoles[s_active_console]->set_active(true);
Console::the().setImplementation(s_consoles[s_active_console]); Console::the().set_implementation(s_consoles[s_active_console]);
} }
void VirtualConsole::set_active(bool b) void VirtualConsole::set_active(bool b)
@ -128,7 +128,7 @@ inline bool is_valid_final_character(byte ch)
return ch >= 0x40 && ch <= 0x7e; return ch >= 0x40 && ch <= 0x7e;
} }
unsigned parseUInt(const String& str, bool& ok) unsigned parse_uint(const String& str, bool& ok)
{ {
unsigned value = 0; unsigned value = 0;
for (size_t i = 0; i < str.length(); ++i) { for (size_t i = 0; i < str.length(); ++i) {
@ -302,11 +302,11 @@ void VirtualConsole::escape$J(const Vector<unsigned>& params)
switch (mode) { switch (mode) {
case 0: case 0:
// FIXME: Clear from cursor to end of screen. // FIXME: Clear from cursor to end of screen.
notImplemented(); not_implemented();
break; break;
case 1: case 1:
// FIXME: Clear from cursor to beginning of screen. // FIXME: Clear from cursor to beginning of screen.
notImplemented(); not_implemented();
break; break;
case 2: case 2:
clear(); clear();
@ -324,7 +324,7 @@ void VirtualConsole::execute_escape_sequence(byte final)
Vector<unsigned> params; Vector<unsigned> params;
for (auto& parampart : paramparts) { for (auto& parampart : paramparts) {
bool ok; bool ok;
unsigned value = parseUInt(parampart, ok); unsigned value = parse_uint(parampart, ok);
if (!ok) { if (!ok) {
// FIXME: Should we do something else? // FIXME: Should we do something else?
return; return;

View file

@ -43,9 +43,9 @@ InodeIdentifier VFS::root_inode_id() const
return m_root_inode->identifier(); return m_root_inode->identifier();
} }
bool VFS::mount(RetainPtr<FS>&& fileSystem, const String& path) bool VFS::mount(RetainPtr<FS>&& file_system, const String& path)
{ {
ASSERT(fileSystem); ASSERT(file_system);
int error; int error;
auto inode = resolve_path(path, root_inode_id(), error); auto inode = resolve_path(path, root_inode_id(), error);
if (!inode.is_valid()) { if (!inode.is_valid()) {
@ -53,21 +53,21 @@ bool VFS::mount(RetainPtr<FS>&& fileSystem, const String& path)
return false; return false;
} }
kprintf("VFS: mounting %s{%p} at %s (inode: %u)\n", fileSystem->class_name(), fileSystem.ptr(), path.characters(), inode.index()); kprintf("VFS: mounting %s{%p} at %s (inode: %u)\n", file_system->class_name(), file_system.ptr(), path.characters(), inode.index());
// FIXME: check that this is not already a mount point // FIXME: check that this is not already a mount point
auto mount = make<Mount>(inode, move(fileSystem)); auto mount = make<Mount>(inode, move(file_system));
m_mounts.append(move(mount)); m_mounts.append(move(mount));
return true; return true;
} }
bool VFS::mount_root(RetainPtr<FS>&& fileSystem) bool VFS::mount_root(RetainPtr<FS>&& file_system)
{ {
if (m_root_inode) { if (m_root_inode) {
kprintf("VFS: mount_root can't mount another root\n"); kprintf("VFS: mount_root can't mount another root\n");
return false; return false;
} }
auto mount = make<Mount>(InodeIdentifier(), move(fileSystem)); auto mount = make<Mount>(InodeIdentifier(), move(file_system));
auto root_inode_id = mount->guest().fs()->root_inode(); auto root_inode_id = mount->guest().fs()->root_inode();
auto root_inode = mount->guest().fs()->get_inode(root_inode_id); auto root_inode = mount->guest().fs()->get_inode(root_inode_id);
@ -112,18 +112,18 @@ bool VFS::is_vfs_root(InodeIdentifier inode) const
void VFS::traverse_directory_inode(Inode& dir_inode, Function<bool(const FS::DirectoryEntry&)> callback) void VFS::traverse_directory_inode(Inode& dir_inode, Function<bool(const FS::DirectoryEntry&)> callback)
{ {
dir_inode.traverse_as_directory([&] (const FS::DirectoryEntry& entry) { dir_inode.traverse_as_directory([&] (const FS::DirectoryEntry& entry) {
InodeIdentifier resolvedInode; InodeIdentifier resolved_inode;
if (auto mount = find_mount_for_host(entry.inode)) if (auto mount = find_mount_for_host(entry.inode))
resolvedInode = mount->guest(); resolved_inode = mount->guest();
else else
resolvedInode = entry.inode; resolved_inode = entry.inode;
if (dir_inode.identifier().is_root_inode() && !is_vfs_root(dir_inode.identifier()) && !strcmp(entry.name, "..")) { if (dir_inode.identifier().is_root_inode() && !is_vfs_root(dir_inode.identifier()) && !strcmp(entry.name, "..")) {
auto mount = find_mount_for_guest(entry.inode); auto mount = find_mount_for_guest(entry.inode);
ASSERT(mount); ASSERT(mount);
resolvedInode = mount->host(); resolved_inode = mount->host();
} }
callback(FS::DirectoryEntry(entry.name, entry.name_length, resolvedInode, entry.fileType)); callback(FS::DirectoryEntry(entry.name, entry.name_length, resolved_inode, entry.file_type));
return true; return true;
}); });
} }
@ -146,10 +146,10 @@ RetainPtr<FileDescriptor> VFS::open(const String& path, int& error, int options,
return nullptr; return nullptr;
} }
auto metadata = inode->metadata(); auto metadata = inode->metadata();
if (!(options & O_DONT_OPEN_DEVICE) && metadata.isCharacterDevice()) { if (!(options & O_DONT_OPEN_DEVICE) && metadata.is_character_device()) {
auto it = m_character_devices.find(encodedDevice(metadata.majorDevice, metadata.minorDevice)); auto it = m_character_devices.find(encoded_device(metadata.major_device, metadata.minor_device));
if (it == m_character_devices.end()) { if (it == m_character_devices.end()) {
kprintf("VFS::open: no such character device %u,%u\n", metadata.majorDevice, metadata.minorDevice); kprintf("VFS::open: no such character device %u,%u\n", metadata.major_device, metadata.minor_device);
return nullptr; return nullptr;
} }
auto descriptor = (*it).value->open(error, options); auto descriptor = (*it).value->open(error, options);
@ -164,7 +164,7 @@ RetainPtr<FileDescriptor> VFS::create(const String& path, int& error, int option
(void) options; (void) options;
error = -EWHYTHO; error = -EWHYTHO;
if (!isSocket(mode) && !isFIFO(mode) && !isBlockDevice(mode) && !isCharacterDevice(mode)) { if (!is_socket(mode) && !is_fifo(mode) && !is_block_device(mode) && !is_character_device(mode)) {
// Turn it into a regular file. (This feels rather hackish.) // Turn it into a regular file. (This feels rather hackish.)
mode |= 0100000; mode |= 0100000;
} }
@ -412,7 +412,7 @@ String VFS::absolute_path(Inode& core_inode)
auto parent_inode = get_inode(parent); auto parent_inode = get_inode(parent);
builder.append(parent_inode->reverse_lookup(child)); builder.append(parent_inode->reverse_lookup(child));
} }
return builder.build(); return builder.to_string();
} }
InodeIdentifier VFS::resolve_path(const String& path, InodeIdentifier base, int& error, int options, InodeIdentifier* parent_id) InodeIdentifier VFS::resolve_path(const String& path, InodeIdentifier base, int& error, int options, InodeIdentifier* parent_id)
@ -447,7 +447,7 @@ InodeIdentifier VFS::resolve_path(const String& path, InodeIdentifier base, int&
return { }; return { };
} }
auto metadata = crumb_inode->metadata(); auto metadata = crumb_inode->metadata();
if (!metadata.isDirectory()) { if (!metadata.is_directory()) {
#ifdef VFS_DEBUG #ifdef VFS_DEBUG
kprintf("parent of <%s> not directory, it's inode %u:%u / %u:%u, mode: %u, size: %u\n", part.characters(), inode.fsid(), inode.index(), metadata.inode.fsid(), metadata.inode.index(), metadata.mode, metadata.size); kprintf("parent of <%s> not directory, it's inode %u:%u / %u:%u, mode: %u, size: %u\n", part.characters(), inode.fsid(), inode.index(), metadata.inode.fsid(), metadata.inode.index(), metadata.mode, metadata.size);
#endif #endif
@ -482,13 +482,13 @@ InodeIdentifier VFS::resolve_path(const String& path, InodeIdentifier base, int&
} }
crumb_inode = get_inode(crumb_id); crumb_inode = get_inode(crumb_id);
metadata = crumb_inode->metadata(); metadata = crumb_inode->metadata();
if (metadata.isDirectory()) { if (metadata.is_directory()) {
if (i != parts.size() - 1) { if (i != parts.size() - 1) {
if (parent_id) if (parent_id)
*parent_id = crumb_id; *parent_id = crumb_id;
} }
} }
if (metadata.isSymbolicLink()) { if (metadata.is_symlink()) {
if (i == parts.size() - 1) { if (i == parts.size() - 1) {
if (options & O_NOFOLLOW) { if (options & O_NOFOLLOW) {
error = -ELOOP; error = -ELOOP;
@ -517,17 +517,17 @@ VFS::Mount::Mount(InodeIdentifier host, RetainPtr<FS>&& guest_fs)
void VFS::register_character_device(CharacterDevice& device) void VFS::register_character_device(CharacterDevice& device)
{ {
m_character_devices.set(encodedDevice(device.major(), device.minor()), &device); m_character_devices.set(encoded_device(device.major(), device.minor()), &device);
} }
void VFS::unregister_character_device(CharacterDevice& device) void VFS::unregister_character_device(CharacterDevice& device)
{ {
m_character_devices.remove(encodedDevice(device.major(), device.minor())); m_character_devices.remove(encoded_device(device.major(), device.minor()));
} }
CharacterDevice* VFS::get_device(unsigned major, unsigned minor) CharacterDevice* VFS::get_device(unsigned major, unsigned minor)
{ {
auto it = m_character_devices.find(encodedDevice(major, minor)); auto it = m_character_devices.find(encoded_device(major, minor));
if (it == m_character_devices.end()) if (it == m_character_devices.end())
return nullptr; return nullptr;
return (*it).value; return (*it).value;

View file

@ -29,7 +29,7 @@
class CharacterDevice; class CharacterDevice;
class FileDescriptor; class FileDescriptor;
inline constexpr dword encodedDevice(unsigned major, unsigned minor) inline constexpr dword encoded_device(unsigned major, unsigned minor)
{ {
return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12); return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12);
} }

View file

@ -20,7 +20,7 @@ static DescriptorTablePointer s_gdtr;
static Descriptor* s_idt; static Descriptor* s_idt;
static Descriptor* s_gdt; static Descriptor* s_gdt;
static IRQHandler** s_irqHandler; static IRQHandler** s_irq_handler;
static Vector<word, KmallocEternalAllocator>* s_gdt_freelist; static Vector<word, KmallocEternalAllocator>* s_gdt_freelist;
@ -125,11 +125,11 @@ asm( \
EH_ENTRY_NO_CODE(6); EH_ENTRY_NO_CODE(6);
void exception_6_handler(RegisterDump& regs) void exception_6_handler(RegisterDump& regs)
{ {
kprintf("%s invalid opcode: %u(%s)\n", current->isRing0() ? "Kernel" : "Process", current->pid(), current->name().characters()); kprintf("%s invalid opcode: %u(%s)\n", current->is_ring0() ? "Kernel" : "Process", current->pid(), current->name().characters());
word ss; word ss;
dword esp; dword esp;
if (current->isRing0()) { if (current->is_ring0()) {
ss = regs.ds; ss = regs.ds;
esp = regs.esp; esp = regs.esp;
} else { } else {
@ -142,7 +142,7 @@ void exception_6_handler(RegisterDump& regs)
kprintf("eax=%x ebx=%x ecx=%x edx=%x\n", regs.eax, regs.ebx, regs.ecx, regs.edx); kprintf("eax=%x ebx=%x ecx=%x edx=%x\n", regs.eax, regs.ebx, regs.ecx, regs.edx);
kprintf("ebp=%x esp=%x esi=%x edi=%x\n", regs.ebp, esp, regs.esi, regs.edi); kprintf("ebp=%x esp=%x esi=%x edi=%x\n", regs.ebp, esp, regs.esi, regs.edi);
if (current->isRing0()) { if (current->is_ring0()) {
kprintf("Oh shit, we've crashed in ring 0 :(\n"); kprintf("Oh shit, we've crashed in ring 0 :(\n");
HANG; HANG;
} }
@ -175,11 +175,11 @@ void exception_7_handler(RegisterDump& regs)
} }
#ifdef FPU_EXCEPTION_DEBUG #ifdef FPU_EXCEPTION_DEBUG
kprintf("%s FPU not available exception: %u(%s)\n", current->isRing0() ? "Kernel" : "Process", current->pid(), current->name().characters()); kprintf("%s FPU not available exception: %u(%s)\n", current->is_ring0() ? "Kernel" : "Process", current->pid(), current->name().characters());
word ss; word ss;
dword esp; dword esp;
if (current->isRing0()) { if (current->is_ring0()) {
ss = regs.ds; ss = regs.ds;
esp = regs.esp; esp = regs.esp;
} else { } else {
@ -199,11 +199,11 @@ void exception_7_handler(RegisterDump& regs)
EH_ENTRY(13); EH_ENTRY(13);
void exception_13_handler(RegisterDumpWithExceptionCode& regs) void exception_13_handler(RegisterDumpWithExceptionCode& regs)
{ {
kprintf("%s GPF: %u(%s)\n", current->isRing0() ? "Kernel" : "User", current->pid(), current->name().characters()); kprintf("%s GPF: %u(%s)\n", current->is_ring0() ? "Kernel" : "User", current->pid(), current->name().characters());
word ss; word ss;
dword esp; dword esp;
if (current->isRing0()) { if (current->is_ring0()) {
ss = regs.ds; ss = regs.ds;
esp = regs.esp; esp = regs.esp;
} else { } else {
@ -217,7 +217,7 @@ void exception_13_handler(RegisterDumpWithExceptionCode& regs)
kprintf("eax=%x ebx=%x ecx=%x edx=%x\n", regs.eax, regs.ebx, regs.ecx, regs.edx); kprintf("eax=%x ebx=%x ecx=%x edx=%x\n", regs.eax, regs.ebx, regs.ecx, regs.edx);
kprintf("ebp=%x esp=%x esi=%x edi=%x\n", regs.ebp, esp, regs.esi, regs.edi); kprintf("ebp=%x esp=%x esi=%x edi=%x\n", regs.ebp, esp, regs.esi, regs.edi);
if (current->isRing0()) { if (current->is_ring0()) {
kprintf("Oh shit, we've crashed in ring 0 :(\n"); kprintf("Oh shit, we've crashed in ring 0 :(\n");
HANG; HANG;
} }
@ -248,7 +248,7 @@ void exception_14_handler(RegisterDumpWithExceptionCode& regs)
word ss; word ss;
dword esp; dword esp;
if (current->isRing0()) { if (current->is_ring0()) {
ss = regs.ds; ss = regs.ds;
esp = regs.esp; esp = regs.esp;
} else { } else {
@ -278,9 +278,9 @@ void exception_14_handler(RegisterDumpWithExceptionCode& regs)
} }
}; };
if (current->isRing0()) { if (current->is_ring0()) {
dump_registers_and_code(); dump_registers_and_code();
current->dumpRegions(); current->dump_regions();
HANG; HANG;
} }
@ -335,7 +335,7 @@ EH(12, "Stack exception")
EH(15, "Unknown error") EH(15, "Unknown error")
EH(16, "Coprocessor error") EH(16, "Coprocessor error")
static void writeRawGDTEntry(word selector, dword low, dword high) static void write_raw_gdt_entry(word selector, dword low, dword high)
{ {
word i = (selector & 0xfffc) >> 3; word i = (selector & 0xfffc) >> 3;
s_gdt[i].low = low; s_gdt[i].low = low;
@ -348,7 +348,7 @@ static void writeRawGDTEntry(word selector, dword low, dword high)
void write_gdt_entry(word selector, Descriptor& descriptor) void write_gdt_entry(word selector, Descriptor& descriptor)
{ {
writeRawGDTEntry(selector, descriptor.low, descriptor.high); write_raw_gdt_entry(selector, descriptor.low, descriptor.high);
} }
Descriptor& get_gdt_entry(word selector) Descriptor& get_gdt_entry(word selector)
@ -378,11 +378,11 @@ void gdt_init()
s_gdtr.address = s_gdt; s_gdtr.address = s_gdt;
s_gdtr.size = (s_gdtLength * 8) - 1; s_gdtr.size = (s_gdtLength * 8) - 1;
writeRawGDTEntry(0x0000, 0x00000000, 0x00000000); write_raw_gdt_entry(0x0000, 0x00000000, 0x00000000);
writeRawGDTEntry(0x0008, 0x0000ffff, 0x00cf9a00); write_raw_gdt_entry(0x0008, 0x0000ffff, 0x00cf9a00);
writeRawGDTEntry(0x0010, 0x0000ffff, 0x00cf9200); write_raw_gdt_entry(0x0010, 0x0000ffff, 0x00cf9200);
writeRawGDTEntry(0x0018, 0x0000ffff, 0x00cffa00); write_raw_gdt_entry(0x0018, 0x0000ffff, 0x00cffa00);
writeRawGDTEntry(0x0020, 0x0000ffff, 0x00cff200); write_raw_gdt_entry(0x0020, 0x0000ffff, 0x00cff200);
flush_gdt(); flush_gdt();
} }
@ -395,15 +395,15 @@ static void unimp_trap()
void register_irq_handler(byte irq, IRQHandler& handler) void register_irq_handler(byte irq, IRQHandler& handler)
{ {
ASSERT(!s_irqHandler[irq]); ASSERT(!s_irq_handler[irq]);
s_irqHandler[irq] = &handler; s_irq_handler[irq] = &handler;
register_interrupt_handler(IRQ_VECTOR_BASE + irq, asm_irq_entry); register_interrupt_handler(IRQ_VECTOR_BASE + irq, asm_irq_entry);
} }
void unregister_irq_handler(byte irq, IRQHandler& handler) void unregister_irq_handler(byte irq, IRQHandler& handler)
{ {
ASSERT(s_irqHandler[irq] == &handler); ASSERT(s_irq_handler[irq] == &handler);
s_irqHandler[irq] = nullptr; s_irq_handler[irq] = nullptr;
} }
void register_interrupt_handler(byte index, void (*f)()) void register_interrupt_handler(byte index, void (*f)())
@ -467,9 +467,9 @@ void idt_init()
register_interrupt_handler(0x57, irq7_handler); register_interrupt_handler(0x57, irq7_handler);
s_irqHandler = static_cast<IRQHandler**>(kmalloc_eternal(sizeof(IRQHandler*) * 16)); s_irq_handler = static_cast<IRQHandler**>(kmalloc_eternal(sizeof(IRQHandler*) * 16));
for (byte i = 0; i < 16; ++i) { for (byte i = 0; i < 16; ++i) {
s_irqHandler[i] = nullptr; s_irq_handler[i] = nullptr;
} }
flush_idt(); flush_idt();
@ -482,7 +482,7 @@ void load_task_register(word selector)
void handle_irq() void handle_irq()
{ {
word isr = PIC::getISR(); word isr = PIC::get_isr();
if (!isr) { if (!isr) {
kprintf("Spurious IRQ\n"); kprintf("Spurious IRQ\n");
return; return;
@ -498,8 +498,8 @@ void handle_irq()
} }
} }
if (s_irqHandler[irq]) if (s_irq_handler[irq])
s_irqHandler[irq]->handle_irq(); s_irq_handler[irq]->handle_irq();
PIC::eoi(irq); PIC::eoi(irq);
} }

View file

@ -43,14 +43,14 @@ union Descriptor {
TrapGate_32bit = 0xf, TrapGate_32bit = 0xf,
}; };
void setBase(void* b) void set_base(void* b)
{ {
base_lo = (dword)(b) & 0xffff; base_lo = (dword)(b) & 0xffff;
base_hi = ((dword)(b) >> 16) & 0xff; base_hi = ((dword)(b) >> 16) & 0xff;
base_hi2 = ((dword)(b) >> 24) & 0xff; base_hi2 = ((dword)(b) >> 24) & 0xff;
} }
void setLimit(dword l) void set_limit(dword l)
{ {
limit_lo = (dword)l & 0xffff; limit_lo = (dword)l & 0xffff;
limit_hi = ((dword)l >> 16) & 0xff; limit_hi = ((dword)l >> 16) & 0xff;
@ -220,7 +220,7 @@ struct FPUState {
dword st[20]; dword st[20];
}; };
inline constexpr dword pageBaseOf(dword address) inline constexpr dword page_base_of(dword address)
{ {
return address & 0xfffff000; return address & 0xfffff000;
} }

View file

@ -4,14 +4,14 @@
#include "PIC.h" #include "PIC.h"
#include "Scheduler.h" #include "Scheduler.h"
#define IRQ_TIMER 0 #define IRQ_TIMER 0
extern "C" void tick_ISR(); extern "C" void timer_interrupt_entry();
extern "C" void clock_handle(RegisterDump&); extern "C" void timer_interrupt_handler(RegisterDump&);
asm( asm(
".globl tick_ISR \n" ".globl timer_interrupt_entry \n"
"tick_ISR: \n" "timer_interrupt_entry: \n"
" pusha\n" " pusha\n"
" pushw %ds\n" " pushw %ds\n"
" pushw %es\n" " pushw %es\n"
@ -27,7 +27,7 @@ asm(
" popw %fs\n" " popw %fs\n"
" popw %gs\n" " popw %gs\n"
" mov %esp, %eax\n" " mov %esp, %eax\n"
" call clock_handle\n" " call timer_interrupt_handler\n"
" popw %gs\n" " popw %gs\n"
" popw %gs\n" " popw %gs\n"
" popw %fs\n" " popw %fs\n"
@ -53,12 +53,11 @@ asm(
#define MODE_RATE 0x04 #define MODE_RATE 0x04
#define MODE_SQUARE_WAVE 0x06 #define MODE_SQUARE_WAVE 0x06
#define WRITE_word 0x30 #define WRITE_WORD 0x30
/* Miscellaneous */
#define BASE_FREQUENCY 1193182 #define BASE_FREQUENCY 1193182
void clock_handle(RegisterDump& regs) void timer_interrupt_handler(RegisterDump& regs)
{ {
IRQHandlerScope scope(IRQ_TIMER); IRQHandlerScope scope(IRQ_TIMER);
Scheduler::timer_tick(regs); Scheduler::timer_tick(regs);
@ -70,7 +69,7 @@ void initialize()
{ {
word timer_reload; word timer_reload;
IO::out8(PIT_CTL, TIMER0_SELECT | WRITE_word | MODE_SQUARE_WAVE); IO::out8(PIT_CTL, TIMER0_SELECT | WRITE_WORD | MODE_SQUARE_WAVE);
timer_reload = (BASE_FREQUENCY / TICKS_PER_SECOND); timer_reload = (BASE_FREQUENCY / TICKS_PER_SECOND);
@ -79,7 +78,7 @@ void initialize()
IO::out8(TIMER0_CTL, LSB(timer_reload)); IO::out8(TIMER0_CTL, LSB(timer_reload));
IO::out8(TIMER0_CTL, MSB(timer_reload)); IO::out8(TIMER0_CTL, MSB(timer_reload));
register_interrupt_handler(IRQ_VECTOR_BASE + IRQ_TIMER, tick_ISR); register_interrupt_handler(IRQ_VECTOR_BASE + IRQ_TIMER, timer_interrupt_entry);
PIC::enable(IRQ_TIMER); PIC::enable(IRQ_TIMER);
} }

View file

@ -88,10 +88,10 @@ static void init_stage2()
vfs->register_character_device(*tty3); vfs->register_character_device(*tty3);
auto dev_hd0 = IDEDiskDevice::create(); auto dev_hd0 = IDEDiskDevice::create();
auto e2fs = Ext2FS::create(dev_hd0.copyRef()); auto e2fs = Ext2FS::create(dev_hd0.copy_ref());
e2fs->initialize(); e2fs->initialize();
vfs->mount_root(e2fs.copyRef()); vfs->mount_root(e2fs.copy_ref());
load_ksyms(); load_ksyms();

View file

@ -15,7 +15,7 @@ int kprintf(const char* fmt, ...)
{ {
va_list ap; va_list ap;
va_start(ap, fmt); va_start(ap, fmt);
int ret = printfInternal(console_putch, nullptr, fmt, ap); int ret = printf_internal(console_putch, nullptr, fmt, ap);
va_end(ap); va_end(ap);
return ret; return ret;
} }
@ -29,7 +29,7 @@ int ksprintf(char* buffer, const char* fmt, ...)
{ {
va_list ap; va_list ap;
va_start(ap, fmt); va_start(ap, fmt);
int ret = printfInternal(buffer_putch, buffer, fmt, ap); int ret = printf_internal(buffer_putch, buffer, fmt, ap);
buffer[ret] = '\0'; buffer[ret] = '\0';
va_end(ap); va_end(ap);
return ret; return ret;
@ -44,7 +44,7 @@ extern "C" int dbgprintf(const char* fmt, ...)
{ {
va_list ap; va_list ap;
va_start(ap, fmt); va_start(ap, fmt);
int ret = printfInternal(debugger_putch, nullptr, fmt, ap); int ret = printf_internal(debugger_putch, nullptr, fmt, ap);
va_end(ap); va_end(ap);
return ret; return ret;
} }

View file

@ -98,7 +98,7 @@ next_entry:
auto& e_gid_string = parts[2]; auto& e_gid_string = parts[2];
auto& e_members_string = parts[3]; auto& e_members_string = parts[3];
bool ok; bool ok;
gid_t e_gid = e_gid_string.toUInt(ok); gid_t e_gid = e_gid_string.to_uint(ok);
if (!ok) { if (!ok) {
fprintf(stderr, "getgrent(): Malformed GID on line %u\n", __grdb_line_number); fprintf(stderr, "getgrent(): Malformed GID on line %u\n", __grdb_line_number);
goto next_entry; goto next_entry;

View file

@ -102,12 +102,12 @@ next_entry:
auto& e_dir = parts[5]; auto& e_dir = parts[5];
auto& e_shell = parts[6]; auto& e_shell = parts[6];
bool ok; bool ok;
uid_t e_uid = e_uid_string.toUInt(ok); uid_t e_uid = e_uid_string.to_uint(ok);
if (!ok) { if (!ok) {
fprintf(stderr, "getpwent(): Malformed UID on line %u\n", __pwdb_line_number); fprintf(stderr, "getpwent(): Malformed UID on line %u\n", __pwdb_line_number);
goto next_entry; goto next_entry;
} }
gid_t e_gid = e_gid_string.toUInt(ok); gid_t e_gid = e_gid_string.to_uint(ok);
if (!ok) { if (!ok) {
fprintf(stderr, "getpwent(): Malformed GID on line %u\n", __pwdb_line_number); fprintf(stderr, "getpwent(): Malformed GID on line %u\n", __pwdb_line_number);
goto next_entry; goto next_entry;

View file

@ -35,7 +35,7 @@
#define MAXLN 512 #define MAXLN 512
static const char* determineBase(const char* p, int& base) static const char* determine_base(const char* p, int& base)
{ {
if (p[0] == '0') { if (p[0] == '0') {
switch (p[1]) { switch (p[1]) {
@ -111,7 +111,7 @@ int atob(unsigned int* vp, const char* p, int base)
unsigned long v; unsigned long v;
if (base == 0) if (base == 0)
p = determineBase(p, base); p = determine_base(p, base);
if (_atob(&v, p, base)) { if (_atob(&v, p, base)) {
*vp = v; *vp = v;
return 1; return 1;

View file

@ -237,7 +237,7 @@ int dbgprintf(const char* fmt, ...)
{ {
va_list ap; va_list ap;
va_start(ap, fmt); va_start(ap, fmt);
int ret = printfInternal(sys_putch, nullptr, fmt, ap); int ret = printf_internal(sys_putch, nullptr, fmt, ap);
va_end(ap); va_end(ap);
return ret; return ret;
} }
@ -256,7 +256,7 @@ static void stream_putch(char*&, char ch)
int vfprintf(FILE* stream, const char* fmt, va_list ap) int vfprintf(FILE* stream, const char* fmt, va_list ap)
{ {
__current_stream = stream; __current_stream = stream;
return printfInternal(stream_putch, nullptr, fmt, ap); return printf_internal(stream_putch, nullptr, fmt, ap);
} }
int fprintf(FILE* stream, const char* fmt, ...) int fprintf(FILE* stream, const char* fmt, ...)
@ -272,7 +272,7 @@ int printf(const char* fmt, ...)
{ {
va_list ap; va_list ap;
va_start(ap, fmt); va_start(ap, fmt);
int ret = printfInternal(stdout_putch, nullptr, fmt, ap); int ret = printf_internal(stdout_putch, nullptr, fmt, ap);
va_end(ap); va_end(ap);
return ret; return ret;
} }
@ -284,7 +284,7 @@ static void buffer_putch(char*& bufptr, char ch)
int vsprintf(char* buffer, const char* fmt, va_list ap) int vsprintf(char* buffer, const char* fmt, va_list ap)
{ {
int ret = printfInternal(buffer_putch, buffer, fmt, ap); int ret = printf_internal(buffer_putch, buffer, fmt, ap);
buffer[ret] = '\0'; buffer[ret] = '\0';
return ret; return ret;
} }
@ -311,7 +311,7 @@ static void sized_buffer_putch(char*& bufptr, char ch)
int vsnprintf(char* buffer, size_t size, const char* fmt, va_list ap) int vsnprintf(char* buffer, size_t size, const char* fmt, va_list ap)
{ {
__vsnprintf_space_remaining = size; __vsnprintf_space_remaining = size;
int ret = printfInternal(sized_buffer_putch, buffer, fmt, ap); int ret = printf_internal(sized_buffer_putch, buffer, fmt, ap);
buffer[ret] = '\0'; buffer[ret] = '\0';
return ret; return ret;
} }

View file

@ -190,21 +190,21 @@ char* strrchr(const char* str, int ch)
char* strcat(char *dest, const char *src) char* strcat(char *dest, const char *src)
{ {
size_t destLength = strlen(dest); size_t dest_length = strlen(dest);
size_t i; size_t i;
for (i = 0 ; src[i] != '\0' ; i++) for (i = 0 ; src[i] != '\0' ; i++)
dest[destLength + i] = src[i]; dest[dest_length + i] = src[i];
dest[destLength + i] = '\0'; dest[dest_length + i] = '\0';
return dest; return dest;
} }
char* strncat(char *dest, const char *src, size_t n) char* strncat(char *dest, const char *src, size_t n)
{ {
size_t destLength = strlen(dest); size_t dest_length = strlen(dest);
size_t i; size_t i;
for (i = 0 ; i < n && src[i] != '\0' ; i++) for (i = 0 ; i < n && src[i] != '\0' ; i++)
dest[destLength + i] = src[i]; dest[dest_length + i] = src[i];
dest[destLength + i] = '\0'; dest[dest_length + i] = '\0';
return dest; return dest;
} }

View file

@ -1,37 +0,0 @@
#include "ClockWidget.h"
#include <SharedGraphics/Painter.h>
#include <time.h>
ClockWidget::ClockWidget(GWidget* parent)
: GWidget(parent)
{
setWindowRelativeRect({ 0, 0, 100, 40 });
startTimer(250);
}
ClockWidget::~ClockWidget()
{
}
void ClockWidget::paintEvent(PaintEvent&)
{
auto now = time(nullptr);
auto& tm = *localtime(&now);
char timeBuf[128];
sprintf(timeBuf, "%02u:%02u:%02u ", tm.tm_hour, tm.tm_min, tm.tm_sec);
Painter painter(*this);
painter.fill_rect(rect(), Color::MidGray);
painter.draw_text(rect(), timeBuf, Painter::TextAlignment::Center, Color::Black);
}
void ClockWidget::timerEvent(TimerEvent&)
{
auto now = time(nullptr);
if (now == m_lastSeenTimestamp)
return;
m_lastSeenTimestamp = now;
update();
}

View file

@ -1,16 +0,0 @@
#pragma once
#include "Widget.h"
class ClockWidget final : public Widget {
public:
explicit ClockWidget(Widget* parent = nullptr);
virtual ~ClockWidget() override;
private:
virtual void paintEvent(PaintEvent&) override;
virtual void timerEvent(TimerEvent&) override;
dword m_lastSeenTimestamp { 0 };
};

View file

@ -27,7 +27,7 @@ GCheckBox::GCheckBox(GWidget* parent)
: GWidget(parent) : GWidget(parent)
{ {
if (!s_checked_bitmap) if (!s_checked_bitmap)
s_checked_bitmap = CharacterBitmap::create_from_ascii(s_checked_bitmap_data, s_checked_bitmap_width, s_checked_bitmap_height).leakRef(); s_checked_bitmap = CharacterBitmap::create_from_ascii(s_checked_bitmap_data, s_checked_bitmap_width, s_checked_bitmap_height).leak_ref();
} }
GCheckBox::~GCheckBox() GCheckBox::~GCheckBox()

View file

@ -7,15 +7,15 @@ GObject::GObject(GObject* parent)
: m_parent(parent) : m_parent(parent)
{ {
if (m_parent) if (m_parent)
m_parent->addChild(*this); m_parent->add_child(*this);
} }
GObject::~GObject() GObject::~GObject()
{ {
if (m_parent) if (m_parent)
m_parent->removeChild(*this); m_parent->remove_child(*this);
auto childrenToDelete = move(m_children); auto children_to_delete = move(m_children);
for (auto* child : childrenToDelete) for (auto* child : children_to_delete)
delete child; delete child;
} }
@ -35,12 +35,12 @@ void GObject::event(GEvent& event)
} }
} }
void GObject::addChild(GObject& object) void GObject::add_child(GObject& object)
{ {
m_children.append(&object); m_children.append(&object);
} }
void GObject::removeChild(GObject& object) void GObject::remove_child(GObject& object)
{ {
for (unsigned i = 0; i < m_children.size(); ++i) { for (unsigned i = 0; i < m_children.size(); ++i) {
if (m_children[i] == &object) { if (m_children[i] == &object) {
@ -54,19 +54,19 @@ void GObject::timer_event(GTimerEvent&)
{ {
} }
void GObject::startTimer(int ms) void GObject::start_timer(int ms)
{ {
if (m_timerID) { if (m_timer_id) {
dbgprintf("GObject{%p} already has a timer!\n", this); dbgprintf("GObject{%p} already has a timer!\n", this);
ASSERT_NOT_REACHED(); ASSERT_NOT_REACHED();
} }
} }
void GObject::stopTimer() void GObject::stop_timer()
{ {
if (!m_timerID) if (!m_timer_id)
return; return;
m_timerID = 0; m_timer_id = 0;
} }
void GObject::delete_later() void GObject::delete_later()

View file

@ -20,12 +20,12 @@ public:
GObject* parent() { return m_parent; } GObject* parent() { return m_parent; }
const GObject* parent() const { return m_parent; } const GObject* parent() const { return m_parent; }
void startTimer(int ms); void start_timer(int ms);
void stopTimer(); void stop_timer();
bool hasTimer() const { return m_timerID; } bool has_timer() const { return m_timer_id; }
void addChild(GObject&); void add_child(GObject&);
void removeChild(GObject&); void remove_child(GObject&);
void delete_later(); void delete_later();
@ -34,7 +34,7 @@ private:
GObject* m_parent { nullptr }; GObject* m_parent { nullptr };
int m_timerID { 0 }; int m_timer_id { 0 };
Vector<GObject*> m_children; Vector<GObject*> m_children;
}; };

View file

@ -8,7 +8,7 @@
GTextBox::GTextBox(GWidget* parent) GTextBox::GTextBox(GWidget* parent)
: GWidget(parent) : GWidget(parent)
{ {
startTimer(500); start_timer(500);
} }
GTextBox::~GTextBox() GTextBox::~GTextBox()
@ -73,12 +73,12 @@ void GTextBox::handle_backspace()
} }
char* buffer; char* buffer;
auto newText = StringImpl::create_uninitialized(m_text.length() - 1, buffer); auto new_text = StringImpl::create_uninitialized(m_text.length() - 1, buffer);
memcpy(buffer, m_text.characters(), m_cursor_position - 1); memcpy(buffer, m_text.characters(), m_cursor_position - 1);
memcpy(buffer + m_cursor_position - 1, m_text.characters() + m_cursor_position, m_text.length() - (m_cursor_position - 1)); memcpy(buffer + m_cursor_position - 1, m_text.characters() + m_cursor_position, m_text.length() - (m_cursor_position - 1));
m_text = move(newText); m_text = move(new_text);
--m_cursor_position; --m_cursor_position;
update(); update();
} }
@ -110,13 +110,13 @@ void GTextBox::keydown_event(GKeyEvent& event)
ASSERT(event.text().length() == 1); ASSERT(event.text().length() == 1);
char* buffer; char* buffer;
auto newText = StringImpl::create_uninitialized(m_text.length() + 1, buffer); auto new_text = StringImpl::create_uninitialized(m_text.length() + 1, buffer);
memcpy(buffer, m_text.characters(), m_cursor_position); memcpy(buffer, m_text.characters(), m_cursor_position);
buffer[m_cursor_position] = event.text()[0]; buffer[m_cursor_position] = event.text()[0];
memcpy(buffer + m_cursor_position + 1, m_text.characters() + m_cursor_position, m_text.length() - m_cursor_position); memcpy(buffer + m_cursor_position + 1, m_text.characters() + m_cursor_position, m_text.length() - m_cursor_position);
m_text = move(newText); m_text = move(new_text);
++m_cursor_position; ++m_cursor_position;
update(); update();
return; return;

View file

@ -207,6 +207,6 @@ void GWindow::set_global_cursor_tracking_widget(GWidget* widget)
ASSERT(m_window_id); ASSERT(m_window_id);
if (widget == m_global_cursor_tracking_widget.ptr()) if (widget == m_global_cursor_tracking_widget.ptr())
return; return;
m_global_cursor_tracking_widget = widget ? widget->makeWeakPtr() : nullptr; m_global_cursor_tracking_widget = widget ? widget->make_weak_ptr() : nullptr;
gui_set_global_cursor_tracking_enabled(m_window_id, widget != nullptr); gui_set_global_cursor_tracking_enabled(m_window_id, widget != nullptr);
} }

View file

@ -14,7 +14,7 @@ void Font::initialize()
Font& Font::default_font() Font& Font::default_font()
{ {
if (!s_default_font) if (!s_default_font)
s_default_font = adopt(*new Font(DEFAULT_FONT_NAME::glyphs, DEFAULT_FONT_NAME::glyph_width, DEFAULT_FONT_NAME::glyph_height, DEFAULT_FONT_NAME::first_glyph, DEFAULT_FONT_NAME::last_glyph)).leakRef(); s_default_font = adopt(*new Font(DEFAULT_FONT_NAME::glyphs, DEFAULT_FONT_NAME::glyph_width, DEFAULT_FONT_NAME::glyph_height, DEFAULT_FONT_NAME::first_glyph, DEFAULT_FONT_NAME::last_glyph)).leak_ref();
return *s_default_font; return *s_default_font;
} }
@ -28,7 +28,7 @@ Font::Font(const char* const* glyphs, byte glyph_width, byte glyph_height, byte
m_error_bitmap = CharacterBitmap::create_from_ascii(DEFAULT_FONT_NAME::error_glyph, m_glyph_width, m_glyph_height); m_error_bitmap = CharacterBitmap::create_from_ascii(DEFAULT_FONT_NAME::error_glyph, m_glyph_width, m_glyph_height);
for (unsigned ch = 0; ch < 256; ++ch) { for (unsigned ch = 0; ch < 256; ++ch) {
if (ch < m_first_glyph || ch > m_last_glyph) { if (ch < m_first_glyph || ch > m_last_glyph) {
m_bitmaps[ch] = m_error_bitmap.copyRef(); m_bitmaps[ch] = m_error_bitmap.copy_ref();
continue; continue;
} }
const char* data = m_glyphs[(unsigned)ch - m_first_glyph]; const char* data = m_glyphs[(unsigned)ch - m_first_glyph];

View file

@ -16,12 +16,12 @@ RetainPtr<GraphicsBitmap> GraphicsBitmap::create(Process& process, const Size& s
GraphicsBitmap::GraphicsBitmap(Process& process, const Size& size) GraphicsBitmap::GraphicsBitmap(Process& process, const Size& size)
: m_size(size) : m_size(size)
, m_pitch(size.width() * sizeof(RGBA32)) , m_pitch(size.width() * sizeof(RGBA32))
, m_client_process(process.makeWeakPtr()) , m_client_process(process.make_weak_ptr())
{ {
InterruptDisabler disabler; InterruptDisabler disabler;
size_t size_in_bytes = size.width() * size.height() * sizeof(RGBA32); size_t size_in_bytes = size.width() * size.height() * sizeof(RGBA32);
auto vmo = VMObject::create_anonymous(size_in_bytes); auto vmo = VMObject::create_anonymous(size_in_bytes);
m_client_region = process.allocate_region_with_vmo(LinearAddress(), size_in_bytes, vmo.copyRef(), 0, "GraphicsBitmap (client)", true, true); m_client_region = process.allocate_region_with_vmo(LinearAddress(), size_in_bytes, vmo.copy_ref(), 0, "GraphicsBitmap (client)", true, true);
m_client_region->set_shared(true); m_client_region->set_shared(true);
m_client_region->commit(); m_client_region->commit();
auto& server = WSMessageLoop::the().server_process(); auto& server = WSMessageLoop::the().server_process();

View file

@ -199,9 +199,9 @@ void Painter::draw_text(const Rect& rect, const String& text, TextAlignment alig
int text_width = text.length() * font().glyph_width(); int text_width = text.length() * font().glyph_width();
point = { rect.right() - text_width, rect.center().y() - (font().glyph_height() / 2) }; point = { rect.right() - text_width, rect.center().y() - (font().glyph_height() / 2) };
} else if (alignment == TextAlignment::Center) { } else if (alignment == TextAlignment::Center) {
int textWidth = text.length() * font().glyph_width(); int text_width = text.length() * font().glyph_width();
point = rect.center(); point = rect.center();
point.move_by(-(textWidth / 2), -(font().glyph_height() / 2)); point.move_by(-(text_width / 2), -(font().glyph_height() / 2));
} else { } else {
ASSERT_NOT_REACHED(); ASSERT_NOT_REACHED();
} }
@ -283,14 +283,14 @@ void Painter::draw_line(const Point& p1, const Point& p2, Color color)
const double dy = point2.y() - point1.y(); const double dy = point2.y() - point1.y();
const double delta_error = fabs(dy / dx); const double delta_error = fabs(dy / dx);
double error = 0; double error = 0;
const double yStep = dy == 0 ? 0 : (dy > 0 ? 1 : -1); const double y_step = dy == 0 ? 0 : (dy > 0 ? 1 : -1);
int y = point1.y(); int y = point1.y();
for (int x = point1.x(); x <= point2.x(); ++x) { for (int x = point1.x(); x <= point2.x(); ++x) {
m_target->scanline(y)[x] = color.value(); m_target->scanline(y)[x] = color.value();
error += delta_error; error += delta_error;
if (error >= 0.5) { if (error >= 0.5) {
y = (double)y + yStep; y = (double)y + y_step;
error -= 1.0; error -= 1.0;
} }
} }

View file

@ -110,7 +110,7 @@ inline bool is_valid_final_character(byte ch)
return ch >= 0x40 && ch <= 0x7e; return ch >= 0x40 && ch <= 0x7e;
} }
unsigned parseUInt(const String& str, bool& ok) unsigned parse_uint(const String& str, bool& ok)
{ {
unsigned value = 0; unsigned value = 0;
for (size_t i = 0; i < str.length(); ++i) { for (size_t i = 0; i < str.length(); ++i) {
@ -341,7 +341,7 @@ void Terminal::execute_xterm_command()
{ {
m_final = '@'; m_final = '@';
bool ok; bool ok;
unsigned value = parseUInt(String((const char*)m_xterm_param1.data(), m_xterm_param1.size()), ok); unsigned value = parse_uint(String((const char*)m_xterm_param1.data(), m_xterm_param1.size()), ok);
if (ok) { if (ok) {
switch (value) { switch (value) {
case 0: case 0:
@ -363,7 +363,7 @@ void Terminal::execute_escape_sequence(byte final)
Vector<unsigned> params; Vector<unsigned> params;
for (auto& parampart : paramparts) { for (auto& parampart : paramparts) {
bool ok; bool ok;
unsigned value = parseUInt(parampart, ok); unsigned value = parse_uint(parampart, ok);
if (!ok) { if (!ok) {
// FIXME: Should we do something else? // FIXME: Should we do something else?
return; return;
@ -562,7 +562,7 @@ void Terminal::unimplemented_escape()
builder.append((char)m_intermediates[i]); builder.append((char)m_intermediates[i]);
} }
builder.append("))"); builder.append("))");
inject_string(builder.build()); inject_string(builder.to_string());
} }
void Terminal::unimplemented_xterm_escape() void Terminal::unimplemented_xterm_escape()

View file

@ -34,7 +34,7 @@ ClockWidget::ClockWidget(GWidget* parent)
: GWidget(parent) : GWidget(parent)
{ {
set_relative_rect({ 0, 0, 100, 40 }); set_relative_rect({ 0, 0, 100, 40 });
startTimer(250); start_timer(250);
} }
void ClockWidget::paint_event(GPaintEvent&) void ClockWidget::paint_event(GPaintEvent&)

View file

@ -4,7 +4,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <AK/AKString.h> #include <AK/AKString.h>
static unsigned parseUInt(const String& str, bool& ok) static unsigned parse_uint(const String& str, bool& ok)
{ {
if (str.is_empty()) { if (str.is_empty()) {
ok = false; ok = false;
@ -40,13 +40,13 @@ int main(int argc, char** argv)
pid_argi = 2; pid_argi = 2;
if (argv[1][0] != '-') if (argv[1][0] != '-')
print_usage_and_exit(); print_usage_and_exit();
signum = parseUInt(&argv[1][1], ok); signum = parse_uint(&argv[1][1], ok);
if (!ok) { if (!ok) {
printf("'%s' is not a valid signal number\n", &argv[1][1]); printf("'%s' is not a valid signal number\n", &argv[1][1]);
return 2; return 2;
} }
} }
unsigned pid = parseUInt(argv[pid_argi], ok); unsigned pid = parse_uint(argv[pid_argi], ok);
if (!ok) { if (!ok) {
printf("'%s' is not a valid PID\n", argv[pid_argi]); printf("'%s' is not a valid PID\n", argv[pid_argi]);
return 3; return 3;

View file

@ -184,12 +184,12 @@ static int sh_cd(int argc, char** argv)
else else
sprintf(pathbuf, "%s/%s", g->cwd.characters(), argv[1]); sprintf(pathbuf, "%s/%s", g->cwd.characters(), argv[1]);
FileSystemPath canonicalPath(pathbuf); FileSystemPath canonical_path(pathbuf);
if (!canonicalPath.is_valid()) { if (!canonical_path.is_valid()) {
printf("FileSystemPath failed to canonicalize '%s'\n", pathbuf); printf("FileSystemPath failed to canonicalize '%s'\n", pathbuf);
return 1; return 1;
} }
const char* path = canonicalPath.string().characters(); const char* path = canonical_path.string().characters();
struct stat st; struct stat st;
int rc = stat(path, &st); int rc = stat(path, &st);
@ -206,7 +206,7 @@ static int sh_cd(int argc, char** argv)
printf("chdir(%s) failed: %s\n", path, strerror(errno)); printf("chdir(%s) failed: %s\n", path, strerror(errno));
return 1; return 1;
} }
g->cwd = canonicalPath.string(); g->cwd = canonical_path.string();
return 0; return 0;
} }

View file

@ -3,7 +3,7 @@
#include <signal.h> #include <signal.h>
#include <AK/AKString.h> #include <AK/AKString.h>
static unsigned parseUInt(const String& str, bool& ok) static unsigned parse_uint(const String& str, bool& ok)
{ {
unsigned value = 0; unsigned value = 0;
for (size_t i = 0; i < str.length(); ++i) { for (size_t i = 0; i < str.length(); ++i) {
@ -29,7 +29,7 @@ int main(int argc, char** argv)
return 1; return 1;
} }
bool ok; bool ok;
unsigned secs = parseUInt(argv[1], ok); unsigned secs = parse_uint(argv[1], ok);
if (!ok) { if (!ok) {
fprintf(stderr, "Not a valid number of seconds: \"%s\"\n", argv[1]); fprintf(stderr, "Not a valid number of seconds: \"%s\"\n", argv[1]);
return 1; return 1;

View file

@ -84,7 +84,7 @@ static String read_var(const String& name)
StringBuilder builder; StringBuilder builder;
builder.append("/proc/sys/"); builder.append("/proc/sys/");
builder.append(name); builder.append(name);
auto path = builder.build(); auto path = builder.to_string();
int fd = open(path.characters(), O_RDONLY); int fd = open(path.characters(), O_RDONLY);
if (fd < 0) { if (fd < 0) {
perror("open"); perror("open");
@ -105,7 +105,7 @@ static void write_var(const String& name, const String& value)
StringBuilder builder; StringBuilder builder;
builder.append("/proc/sys/"); builder.append("/proc/sys/");
builder.append(name); builder.append(name);
auto path = builder.build(); auto path = builder.to_string();
int fd = open(path.characters(), O_WRONLY); int fd = open(path.characters(), O_WRONLY);
if (fd < 0) { if (fd < 0) {
perror("open"); perror("open");

View file

@ -11,36 +11,36 @@
//#define DEBUG_COUNTERS //#define DEBUG_COUNTERS
static const int windowTitleBarHeight = 16; static const int window_titlebar_height = 16;
static inline Rect title_bar_rect(const Rect& window) static inline Rect title_bar_rect(const Rect& window)
{ {
return { return {
window.x() - 1, window.x() - 1,
window.y() - windowTitleBarHeight, window.y() - window_titlebar_height,
window.width() + 2, window.width() + 2,
windowTitleBarHeight window_titlebar_height
}; };
} }
static inline Rect title_bar_text_rect(const Rect& window) static inline Rect title_bar_text_rect(const Rect& window)
{ {
auto titleBarRect = title_bar_rect(window); auto titlebar_rect = title_bar_rect(window);
return { return {
titleBarRect.x() + 2, titlebar_rect.x() + 2,
titleBarRect.y(), titlebar_rect.y(),
titleBarRect.width() - 4, titlebar_rect.width() - 4,
titleBarRect.height() titlebar_rect.height()
}; };
} }
static inline Rect border_window_rect(const Rect& window) static inline Rect border_window_rect(const Rect& window)
{ {
auto titleBarRect = title_bar_rect(window); auto titlebar_rect = title_bar_rect(window);
return { titleBarRect.x() - 1, return { titlebar_rect.x() - 1,
titleBarRect.y() - 1, titlebar_rect.y() - 1,
titleBarRect.width() + 2, titlebar_rect.width() + 2,
windowTitleBarHeight + window.height() + 3 window_titlebar_height + window.height() + 3
}; };
} }
@ -148,12 +148,12 @@ WSWindowManager::~WSWindowManager()
void WSWindowManager::paint_window_frame(WSWindow& window) void WSWindowManager::paint_window_frame(WSWindow& window)
{ {
LOCKER(m_lock); LOCKER(m_lock);
//printf("[WM] paintWindowFrame {%p}, rect: %d,%d %dx%d\n", &window, window.rect().x(), window.rect().y(), window.rect().width(), window.rect().height()); //printf("[WM] paint_window_frame {%p}, rect: %d,%d %dx%d\n", &window, window.rect().x(), window.rect().y(), window.rect().width(), window.rect().height());
auto titleBarRect = title_bar_rect(window.rect()); auto titlebar_rect = title_bar_rect(window.rect());
auto titleBarTitleRect = title_bar_text_rect(window.rect()); auto titlebar_title_rect = title_bar_text_rect(window.rect());
auto outerRect = outer_window_rect(window.rect()); auto outer_rect = outer_window_rect(window.rect());
auto borderRect = border_window_rect(window.rect()); auto border_rect = border_window_rect(window.rect());
Rect inner_border_rect { Rect inner_border_rect {
window.x() - 1, window.x() - 1,
@ -184,15 +184,15 @@ void WSWindowManager::paint_window_frame(WSWindow& window)
middle_border_color = Color::MidGray; middle_border_color = Color::MidGray;
} }
m_back_painter->fill_rect_with_gradient(titleBarRect, border_color, border_color2); m_back_painter->fill_rect_with_gradient(titlebar_rect, border_color, border_color2);
m_back_painter->draw_rect(borderRect, middle_border_color); m_back_painter->draw_rect(border_rect, middle_border_color);
m_back_painter->draw_rect(outerRect, border_color); m_back_painter->draw_rect(outer_rect, border_color);
m_back_painter->draw_rect(inner_border_rect, border_color); m_back_painter->draw_rect(inner_border_rect, border_color);
m_back_painter->draw_text(titleBarTitleRect, window.title(), Painter::TextAlignment::CenterLeft, title_color); m_back_painter->draw_text(titlebar_title_rect, window.title(), Painter::TextAlignment::CenterLeft, title_color);
Color metadata_color(96, 96, 96); Color metadata_color(96, 96, 96);
m_back_painter->draw_text( m_back_painter->draw_text(
titleBarTitleRect, titlebar_title_rect,
String::format("%d:%d", window.pid(), window.window_id()), String::format("%d:%d", window.pid(), window.window_id()),
Painter::TextAlignment::CenterRight, Painter::TextAlignment::CenterRight,
metadata_color metadata_color
@ -250,7 +250,7 @@ void WSWindowManager::handle_titlebar_mouse_event(WSWindow& window, WSMouseEvent
#ifdef DRAG_DEBUG #ifdef DRAG_DEBUG
printf("[WM] Begin dragging WSWindow{%p}\n", &window); printf("[WM] Begin dragging WSWindow{%p}\n", &window);
#endif #endif
m_drag_window = window.makeWeakPtr();; m_drag_window = window.make_weak_ptr();;
m_drag_origin = event.position(); m_drag_origin = event.position();
m_drag_window_origin = window.position(); m_drag_window_origin = window.position();
m_drag_start_rect = outer_window_rect(window.rect()); m_drag_start_rect = outer_window_rect(window.rect());
@ -265,7 +265,7 @@ void WSWindowManager::process_mouse_event(WSMouseEvent& event)
if (event.type() == WSMessage::MouseUp && event.button() == MouseButton::Left) { if (event.type() == WSMessage::MouseUp && event.button() == MouseButton::Left) {
if (m_drag_window) { if (m_drag_window) {
#ifdef DRAG_DEBUG #ifdef DRAG_DEBUG
printf("[WM] Finish dragging WSWindow{%p}\n", m_dragWindow.ptr()); printf("[WM] Finish dragging WSWindow{%p}\n", m_drag_window.ptr());
#endif #endif
invalidate(*m_drag_window); invalidate(*m_drag_window);
m_drag_window->set_is_being_dragged(false); m_drag_window->set_is_being_dragged(false);
@ -280,7 +280,7 @@ void WSWindowManager::process_mouse_event(WSMouseEvent& event)
auto old_window_rect = m_drag_window->rect(); auto old_window_rect = m_drag_window->rect();
Point pos = m_drag_window_origin; Point pos = m_drag_window_origin;
#ifdef DRAG_DEBUG #ifdef DRAG_DEBUG
dbgprintf("[WM] Dragging [origin: %d,%d] now: %d,%d\n", m_dragOrigin.x(), m_dragOrigin.y(), event.x(), event.y()); dbgprintf("[WM] Dragging [origin: %d,%d] now: %d,%d\n", m_drag_origin.x(), m_drag_origin.y(), event.x(), event.y());
#endif #endif
pos.move_by(event.x() - m_drag_origin.x(), event.y() - m_drag_origin.y()); pos.move_by(event.x() - m_drag_origin.x(), event.y() - m_drag_origin.y());
m_drag_window->set_position_without_repaint(pos); m_drag_window->set_position_without_repaint(pos);
@ -429,7 +429,7 @@ void WSWindowManager::set_active_window(WSWindow* window)
WSMessageLoop::the().post_message(previously_active_window, make<WSMessage>(WSMessage::WindowDeactivated)); WSMessageLoop::the().post_message(previously_active_window, make<WSMessage>(WSMessage::WindowDeactivated));
invalidate(*previously_active_window); invalidate(*previously_active_window);
} }
m_active_window = window->makeWeakPtr(); m_active_window = window->make_weak_ptr();
if (m_active_window) { if (m_active_window) {
WSMessageLoop::the().post_message(m_active_window.ptr(), make<WSMessage>(WSMessage::WindowActivated)); WSMessageLoop::the().post_message(m_active_window.ptr(), make<WSMessage>(WSMessage::WindowActivated));
invalidate(*m_active_window); invalidate(*m_active_window);