Merge into main the new state of the operating system/kernel #1
14
Makefile
14
Makefile
@ -1,11 +1,10 @@
|
|||||||
|
|
||||||
EMULATOR = qemu-system-i386
|
EMULATOR = qemu-system-i386
|
||||||
AS = ${HOME}/opt/cross/bin/i686-elf-as
|
AS = ${HOME}/opt/cross/bin/i686-elf-as
|
||||||
CC = ${HOME}/opt/cross/bin/i686-elf-gcc
|
CC = ${HOME}/opt/cross/bin/i686-elf-gcc
|
||||||
CPP = ${HOME}/opt/cross/bin/i686-elf-g++
|
CPP = ${HOME}/opt/cross/bin/i686-elf-g++
|
||||||
CFLAGS = -ffreestanding -Og -ggdb -Wall -Wextra
|
CFLAGS = -ffreestanding -Og -ggdb -Wall -Wextra -I source/CoreLib/build/include
|
||||||
|
|
||||||
OFILES =$(BUILD_DIR)/boot.o $(BUILD_DIR)/Path.o $(BUILD_DIR)/kterm.o $(BUILD_DIR)/kernel.o $(BUILD_DIR)/memory.o $(BUILD_DIR)/paging.o $(BUILD_DIR)/VFS.o $(BUILD_DIR)/pit.o $(BUILD_DIR)/time.o $(BUILD_DIR)/keyboard.o $(BUILD_DIR)/io.o $(BUILD_DIR)/processor.o $(BUILD_DIR)/gdtc.o $(BUILD_DIR)/idt.o $(BUILD_DIR)/pic.o $(BUILD_DIR)/sv-terminal.o $(BUILD_DIR)/string.o $(BUILD_DIR)/prekernel.o $(BUILD_DIR)/KHeap.o $(BUILD_DIR)/pci.o $(BUILD_DIR)/pcidevice.o $(BUILD_DIR)/atapiDevice.o $(BUILD_DIR)/ataDevice.o $(BUILD_DIR)/rsdp.o $(BUILD_DIR)/acpi.o
|
OFILES =$(BUILD_DIR)/boot.o $(BUILD_DIR)/kterm.o $(BUILD_DIR)/kernel.o $(BUILD_DIR)/memory.o $(BUILD_DIR)/paging.o $(BUILD_DIR)/VFS.o $(BUILD_DIR)/pit.o $(BUILD_DIR)/time.o $(BUILD_DIR)/keyboard.o $(BUILD_DIR)/io.o $(BUILD_DIR)/processor.o $(BUILD_DIR)/gdtc.o $(BUILD_DIR)/idt.o $(BUILD_DIR)/pic.o $(BUILD_DIR)/sv-terminal.o $(BUILD_DIR)/prekernel.o $(BUILD_DIR)/KHeap.o $(BUILD_DIR)/pci.o $(BUILD_DIR)/pcidevice.o $(BUILD_DIR)/atapiDevice.o $(BUILD_DIR)/ataDevice.o $(BUILD_DIR)/rsdp.o $(BUILD_DIR)/acpi.o
|
||||||
|
|
||||||
SRC_DIR = source
|
SRC_DIR = source
|
||||||
BUILD_DIR = build
|
BUILD_DIR = build
|
||||||
@ -53,8 +52,7 @@ test_disk: all
|
|||||||
|
|
||||||
|
|
||||||
build_kernel: $(OBJ_LINK_LIST)
|
build_kernel: $(OBJ_LINK_LIST)
|
||||||
$(CC) -T $(SRC_DIR)/kernel//linker.ld -o $(BUILD_DIR)/myos.bin \
|
$(CPP) -T $(SRC_DIR)/kernel/linker.ld -o $(BUILD_DIR)/myos.bin -ffreestanding -ggdb -Og -nostdlib $(OBJ_LINK_LIST) -lgcc -L source/CoreLib/build -lCoreLib
|
||||||
-ffreestanding -ggdb -Og -nostdlib $(OBJ_LINK_LIST) -lgcc
|
|
||||||
|
|
||||||
build_x86_64:
|
build_x86_64:
|
||||||
$(AS) $(SRC_DIR)/cgc/x86_64/crti.s -o $(BUILD_DIR)/crti_64.o
|
$(AS) $(SRC_DIR)/cgc/x86_64/crti.s -o $(BUILD_DIR)/crti_64.o
|
||||||
@ -82,9 +80,6 @@ $(BUILD_DIR)/gdtc.o:
|
|||||||
$(BUILD_DIR)/pic.o:
|
$(BUILD_DIR)/pic.o:
|
||||||
$(CPP) -c $(SRC_DIR)/kernel/drivers/pic/pic.cpp -o $(BUILD_DIR)/pic.o $(CFLAGS) -fno-exceptions -fno-rtti
|
$(CPP) -c $(SRC_DIR)/kernel/drivers/pic/pic.cpp -o $(BUILD_DIR)/pic.o $(CFLAGS) -fno-exceptions -fno-rtti
|
||||||
|
|
||||||
$(BUILD_DIR)/string.o:
|
|
||||||
$(CC) -c $(SRC_DIR)/lib/include/string.c -o $(BUILD_DIR)/string.o $(CFLAGS) -std=gnu99
|
|
||||||
|
|
||||||
$(BUILD_DIR)/PhysicalMemoryManager.o:
|
$(BUILD_DIR)/PhysicalMemoryManager.o:
|
||||||
$(CPP) -c $(SRC_DIR)/kernel/memory/PhysicalMemoryManager.cpp -o $(BUILD_DIR)/PhysicalMemoryManager.o $(CFLAGS) -fno-exceptions -fno-rtti
|
$(CPP) -c $(SRC_DIR)/kernel/memory/PhysicalMemoryManager.cpp -o $(BUILD_DIR)/PhysicalMemoryManager.o $(CFLAGS) -fno-exceptions -fno-rtti
|
||||||
|
|
||||||
@ -136,9 +131,6 @@ $(BUILD_DIR)/prekernel.o:
|
|||||||
$(BUILD_DIR)/processor.o:
|
$(BUILD_DIR)/processor.o:
|
||||||
$(CPP) -c $(SRC_DIR)/kernel/i386/processor.cpp -o $(BUILD_DIR)/processor.o $(CFLAGS) -fno-exceptions -fno-rtti
|
$(CPP) -c $(SRC_DIR)/kernel/i386/processor.cpp -o $(BUILD_DIR)/processor.o $(CFLAGS) -fno-exceptions -fno-rtti
|
||||||
|
|
||||||
$(BUILD_DIR)/Path.o:
|
|
||||||
$(CPP) -c $(SRC_DIR)/kernel/vfs/Path.cpp -o $(BUILD_DIR)/Path.o $(CFLAGS) -fno-exceptions -fno-rtti
|
|
||||||
|
|
||||||
# Assembly -> Object files
|
# Assembly -> Object files
|
||||||
$(BUILD_DIR)/boot.o:
|
$(BUILD_DIR)/boot.o:
|
||||||
$(AS) $(SRC_DIR)/kernel/boot/boot.s -o $(BUILD_DIR)/boot.o
|
$(AS) $(SRC_DIR)/kernel/boot/boot.s -o $(BUILD_DIR)/boot.o
|
||||||
|
33
source/CoreLib/Makefile
Normal file
33
source/CoreLib/Makefile
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
CPP = ${HOME}/opt/cross/bin/i686-elf-g++
|
||||||
|
CFLAGS = -ffreestanding -Og -ggdb -Wall -Wextra
|
||||||
|
|
||||||
|
SRC_DIR = .
|
||||||
|
BUILD_DIR = build
|
||||||
|
OBJ_FOLDER = bin
|
||||||
|
OUTPUTFILE = $(BUILD_DIR)/libCoreLib.a
|
||||||
|
|
||||||
|
OFILES = $(OBJ_FOLDER)/memory.o $(OBJ_FOLDER)/path.o $(OBJ_FOLDER)/stack.o $(OBJ_FOLDER)/string.o $(OBJ_FOLDER)/stringview.o
|
||||||
|
|
||||||
|
|
||||||
|
.phony: all
|
||||||
|
all: $(OUTPUTFILE)
|
||||||
|
cp *.h build/include/
|
||||||
|
|
||||||
|
$(OUTPUTFILE): $(OFILES)
|
||||||
|
ar -rc $(OUTPUTFILE) $(OFILES)
|
||||||
|
|
||||||
|
$(OBJ_FOLDER)/memory.o: Memory.cpp
|
||||||
|
$(CPP) -c Memory.cpp -o $(OBJ_FOLDER)/memory.o $(CFLAGS)
|
||||||
|
|
||||||
|
$(OBJ_FOLDER)/path.o: Path.cpp
|
||||||
|
$(CPP) -c Path.cpp -o $(OBJ_FOLDER)/path.o $(CFLAGS)
|
||||||
|
|
||||||
|
$(OBJ_FOLDER)/stack.o: Stack.cpp
|
||||||
|
$(CPP) -c Stack.cpp -o $(OBJ_FOLDER)/stack.o $(CFLAGS)
|
||||||
|
|
||||||
|
$(OBJ_FOLDER)/string.o: String.cpp
|
||||||
|
$(CPP) -c String.cpp -o $(OBJ_FOLDER)/string.o $(CFLAGS)
|
||||||
|
|
||||||
|
$(OBJ_FOLDER)/stringview.o: StringView.cpp
|
||||||
|
$(CPP) -c StringView.cpp -o $(OBJ_FOLDER)/stringview.o $(CFLAGS)
|
||||||
|
|
58
source/CoreLib/Memory.cpp
Normal file
58
source/CoreLib/Memory.cpp
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
//
|
||||||
|
// Created by nigel on 19/02/23.
|
||||||
|
//
|
||||||
|
#include "Memory.h"
|
||||||
|
|
||||||
|
void* memset (void* ptr, int value, size_t num)
|
||||||
|
{
|
||||||
|
for( int i = 0; i < num; i++ )
|
||||||
|
{
|
||||||
|
unsigned char* data = (unsigned char*)ptr+ i;
|
||||||
|
*data = (unsigned char)value;
|
||||||
|
}
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int memcmp( const void* ptr1, const void* ptr2, size_t num)
|
||||||
|
{
|
||||||
|
const unsigned char * cs = (const unsigned char*) ptr1;
|
||||||
|
const unsigned char * ct = (const unsigned char*) ptr2;
|
||||||
|
|
||||||
|
|
||||||
|
for (int i = 0 ; i < num ; i++, cs++, ct++ ){
|
||||||
|
if( *cs < *ct){
|
||||||
|
return -1;
|
||||||
|
} else if( *cs > *ct){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t strlen(const char* str) {
|
||||||
|
size_t len = 0;
|
||||||
|
while(str[len]){
|
||||||
|
len++;
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
int strncmp ( const char* str1, const char* str2, size_t num ){
|
||||||
|
for( int i = 0; i < num ; i++){
|
||||||
|
|
||||||
|
if( str1[i] < str2[i]){
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( str1[i] > str2[i] ){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
12
source/CoreLib/Memory.h
Normal file
12
source/CoreLib/Memory.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
void* memset (void* ptr, int value, size_t num);
|
||||||
|
|
||||||
|
int memcmp( const void* ptr1, const void* ptr2, size_t num);
|
||||||
|
|
||||||
|
size_t strlen(const char* str);
|
||||||
|
|
||||||
|
int strncmp ( const char* str1, const char* str2, size_t num );
|
24
source/CoreLib/Path.cpp
Normal file
24
source/CoreLib/Path.cpp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
//
|
||||||
|
// Created by nigel on 19/02/23.
|
||||||
|
//
|
||||||
|
#include "Path.h"
|
||||||
|
|
||||||
|
Path::Path(String path)
|
||||||
|
: path(path)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
StringView Path::getbasename()
|
||||||
|
{
|
||||||
|
unsigned int path_length = path.length();
|
||||||
|
int i = path_length;
|
||||||
|
while (path[i] != '/')
|
||||||
|
i--;
|
||||||
|
|
||||||
|
return {path,static_cast<unsigned int>(i +1), path_length};
|
||||||
|
}
|
||||||
|
|
||||||
|
char* Path::str() {
|
||||||
|
return path.str();
|
||||||
|
}
|
22
source/CoreLib/Path.h
Normal file
22
source/CoreLib/Path.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
//
|
||||||
|
// Created by nigel on 19/02/23.
|
||||||
|
//
|
||||||
|
#pragma once
|
||||||
|
#include <stddef.h>
|
||||||
|
#include "StringView.h"
|
||||||
|
|
||||||
|
|
||||||
|
class Path{
|
||||||
|
public:
|
||||||
|
explicit Path(String path);
|
||||||
|
|
||||||
|
StringView getbasename();
|
||||||
|
|
||||||
|
char* str();
|
||||||
|
|
||||||
|
private:
|
||||||
|
String path;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
3
source/CoreLib/Stack.cpp
Normal file
3
source/CoreLib/Stack.cpp
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
//
|
||||||
|
// Created by nigel on 19/02/23.
|
||||||
|
//
|
@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "../../kernel/memory/KernelHeap.h"
|
#include "../kernel/memory/KernelHeap.h"
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
39
source/CoreLib/String.cpp
Normal file
39
source/CoreLib/String.cpp
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#include "String.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
|
||||||
|
String::String(char* characters)
|
||||||
|
: chars(characters)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
char* String::str(){
|
||||||
|
return chars;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int String::length ()
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
while ( chars[i] != '\0'){
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns a null character if size exceeds limits
|
||||||
|
char String::operator[] (size_t idx)
|
||||||
|
{
|
||||||
|
if( idx > this->length())
|
||||||
|
return '\0';
|
||||||
|
|
||||||
|
return chars[idx];
|
||||||
|
}
|
||||||
|
|
||||||
|
const char String::operator[](size_t idx) const {
|
||||||
|
return (const char) chars[idx];
|
||||||
|
}
|
||||||
|
|
18
source/CoreLib/String.h
Normal file
18
source/CoreLib/String.h
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
class String {
|
||||||
|
public:
|
||||||
|
String(char* characters);
|
||||||
|
String(String&) = default;
|
||||||
|
unsigned int length();
|
||||||
|
|
||||||
|
char* str ();
|
||||||
|
char operator[](size_t index) ;
|
||||||
|
const char operator[](size_t idx) const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
char* chars;
|
||||||
|
|
||||||
|
|
||||||
|
};
|
14
source/CoreLib/StringView.cpp
Normal file
14
source/CoreLib/StringView.cpp
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
//
|
||||||
|
// Created by nigel on 19/02/23.
|
||||||
|
//
|
||||||
|
#include "StringView.h"
|
||||||
|
|
||||||
|
StringView::StringView(String string, unsigned int start, unsigned int end)
|
||||||
|
: String(string), begin(start), end(end)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
char* StringView::str(){
|
||||||
|
//TODO: Not implemented
|
||||||
|
}
|
14
source/CoreLib/StringView.h
Normal file
14
source/CoreLib/StringView.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
//
|
||||||
|
// Created by nigel on 19/02/23.
|
||||||
|
//
|
||||||
|
#pragma once
|
||||||
|
#include "String.h"
|
||||||
|
|
||||||
|
class StringView : String {
|
||||||
|
public:
|
||||||
|
StringView(String string, unsigned int start, unsigned int end );
|
||||||
|
char* str ();
|
||||||
|
private:
|
||||||
|
unsigned int begin;
|
||||||
|
unsigned int end;
|
||||||
|
};
|
BIN
source/CoreLib/bin/memory.o
Normal file
BIN
source/CoreLib/bin/memory.o
Normal file
Binary file not shown.
BIN
source/CoreLib/bin/path.o
Normal file
BIN
source/CoreLib/bin/path.o
Normal file
Binary file not shown.
BIN
source/CoreLib/bin/stack.o
Normal file
BIN
source/CoreLib/bin/stack.o
Normal file
Binary file not shown.
BIN
source/CoreLib/bin/string.o
Normal file
BIN
source/CoreLib/bin/string.o
Normal file
Binary file not shown.
BIN
source/CoreLib/bin/stringview.o
Normal file
BIN
source/CoreLib/bin/stringview.o
Normal file
Binary file not shown.
@ -1,7 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "./../../terminal/kterm.h"
|
#include "./../../terminal/kterm.h"
|
||||||
#include "../../../lib/include/mem.h"
|
#include <CoreLib/Memory.h>
|
||||||
|
|
||||||
struct RSDPTR {
|
struct RSDPTR {
|
||||||
char signature[8];
|
char signature[8];
|
||||||
uint8_t Checksum ;
|
uint8_t Checksum ;
|
||||||
|
@ -12,7 +12,6 @@ void ATA_DEVICE::Soft_Reset(uint8_t DEVICE_CHANNEL,DEVICE_DRIVE drive){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ATA_DEVICE::Identify(uint16_t DEVICE_CHANNEL,DEVICE_DRIVE drive ){
|
void ATA_DEVICE::Identify(uint16_t DEVICE_CHANNEL,DEVICE_DRIVE drive ){
|
||||||
// lets ignore which port we actually want to check for now !
|
// lets ignore which port we actually want to check for now !
|
||||||
|
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Copyright © Nigel Barink 2023
|
Copyright © Nigel Barink 2023
|
||||||
*/
|
*/
|
||||||
extern "C"{
|
|
||||||
#include "../lib/include/string.h"
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "memory/memory.h"
|
#include "memory/memory.h"
|
||||||
#include "memory/KernelHeap.h"
|
#include "memory/KernelHeap.h"
|
||||||
#include "memory/gdt/gdtc.h"
|
#include "memory/gdt/gdtc.h"
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
#include <CoreLib/Memory.h>
|
||||||
|
|
||||||
#include "../prekernel/bootstructure.h"
|
#include "../prekernel/bootstructure.h"
|
||||||
#include "../terminal/kterm.h"
|
#include "../terminal/kterm.h"
|
||||||
#include "../../lib/include/mem.h"
|
|
||||||
#include "../bitmap.h"
|
#include "../bitmap.h"
|
||||||
|
|
||||||
#define BLOCK_SIZE 4092
|
#define BLOCK_SIZE 4092
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "gdt/gdtc.h"
|
#include "gdt/gdtc.h"
|
||||||
#include "../../lib/include/string.h"
|
#include <CoreLib/Memory.h>
|
||||||
|
|
||||||
struct TaskStateSegment {
|
struct TaskStateSegment {
|
||||||
uint32_t prev_tss;
|
uint32_t prev_tss;
|
||||||
|
@ -5,7 +5,8 @@
|
|||||||
#include "memoryinfo.h"
|
#include "memoryinfo.h"
|
||||||
#include "../prekernel/multiboot.h"
|
#include "../prekernel/multiboot.h"
|
||||||
#include "../terminal/kterm.h"
|
#include "../terminal/kterm.h"
|
||||||
#include "../../lib/include/mem.h"
|
#include <CoreLib/Memory.h>
|
||||||
|
|
||||||
#include "../bitmap.h"
|
#include "../bitmap.h"
|
||||||
|
|
||||||
#define BLOCK_SIZE 4092
|
#define BLOCK_SIZE 4092
|
||||||
|
@ -4,8 +4,6 @@
|
|||||||
#include "../drivers/pit/pit.h"
|
#include "../drivers/pit/pit.h"
|
||||||
#include "../drivers/ps-2/keyboard.h"
|
#include "../drivers/ps-2/keyboard.h"
|
||||||
#include "../memory/PhysicalMemoryManager.h"
|
#include "../memory/PhysicalMemoryManager.h"
|
||||||
extern "C" {
|
#include <CoreLib/Memory.h>
|
||||||
#include "../../lib/include/string.h"
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" void startSuperVisorTerminal();
|
extern "C" void startSuperVisorTerminal();
|
@ -5,10 +5,7 @@
|
|||||||
|
|
||||||
#include "../drivers/vga/colors.h"
|
#include "../drivers/vga/colors.h"
|
||||||
#include "../drivers/io/io.h"
|
#include "../drivers/io/io.h"
|
||||||
extern "C" {
|
#include "CoreLib/Memory.h"
|
||||||
#include "../../lib/include/string.h"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void kterm_init();
|
void kterm_init();
|
||||||
|
|
||||||
|
@ -1,83 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by nigel on 19/02/23.
|
|
||||||
//
|
|
||||||
#include "Path.h"
|
|
||||||
#include "../memory/KernelHeap.h"
|
|
||||||
String::String(char* characters)
|
|
||||||
: chars(characters)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
char* String::str(){
|
|
||||||
return chars;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int String::length ()
|
|
||||||
{
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
while ( chars[i] != '\0'){
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns a null character if size exceeds limits
|
|
||||||
char String::operator[] (size_t idx)
|
|
||||||
{
|
|
||||||
if( idx > this->length())
|
|
||||||
return '\0';
|
|
||||||
|
|
||||||
return chars[idx];
|
|
||||||
}
|
|
||||||
|
|
||||||
const char String::operator[](size_t idx) const {
|
|
||||||
return (const char) chars[idx];
|
|
||||||
}
|
|
||||||
|
|
||||||
StringView::StringView(String &string, unsigned int start, unsigned int end)
|
|
||||||
: String(string), begin(start), end(end)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
char* StringView::str(){
|
|
||||||
char* str = (char*) malloc((this->length() * sizeof(char))+1);
|
|
||||||
|
|
||||||
int index = 0;
|
|
||||||
for ( int i = begin; i < end ; i++){
|
|
||||||
str[index] = chars[i];
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
chars[index+1] ='\0';
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Path::Path(char *path)
|
|
||||||
: path(String(path))
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Path::Path(String &path)
|
|
||||||
: path(path)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
StringView Path::getbasename()
|
|
||||||
{
|
|
||||||
unsigned int path_length = path.length();
|
|
||||||
int i = path_length;
|
|
||||||
while (path[i] != '/')
|
|
||||||
i--;
|
|
||||||
|
|
||||||
return StringView(path,i +1, path_length);
|
|
||||||
}
|
|
||||||
|
|
||||||
char* Path::str() {
|
|
||||||
return path.str();
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by nigel on 19/02/23.
|
|
||||||
//
|
|
||||||
#pragma once
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
class String {
|
|
||||||
public:
|
|
||||||
String(char* characters);
|
|
||||||
String(String&) = default;
|
|
||||||
unsigned int length();
|
|
||||||
|
|
||||||
char* str ();
|
|
||||||
char operator[](size_t index) ;
|
|
||||||
const char operator[](size_t idx) const;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
char* chars;
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
class StringView : String {
|
|
||||||
public:
|
|
||||||
StringView(String& string, unsigned int start, unsigned int end );
|
|
||||||
char* str ();
|
|
||||||
private:
|
|
||||||
unsigned int begin;
|
|
||||||
unsigned int end;
|
|
||||||
};
|
|
||||||
|
|
||||||
class Path{
|
|
||||||
public:
|
|
||||||
Path(String& path);
|
|
||||||
Path(char* path);
|
|
||||||
|
|
||||||
StringView getbasename();
|
|
||||||
|
|
||||||
char* str();
|
|
||||||
|
|
||||||
private:
|
|
||||||
String path;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
|||||||
#include "../drivers/ata/ataDevice.h"
|
#include "../drivers/ata/ataDevice.h"
|
||||||
#include "../partitiontable/mbr/MasterBootRecord.h"
|
#include "../partitiontable/mbr/MasterBootRecord.h"
|
||||||
#include "../memory/KernelHeap.h"
|
#include "../memory/KernelHeap.h"
|
||||||
#include "Path.h"
|
#include "../../CoreLib/Memory.h"
|
||||||
#include "../filesystem/FAT/DirectoryEntry.h"
|
#include "../filesystem/FAT/DirectoryEntry.h"
|
||||||
|
|
||||||
MOUNT_INFO mountInfo;
|
MOUNT_INFO mountInfo;
|
||||||
@ -389,6 +389,8 @@ char* FindNextEntryName (char* path )
|
|||||||
|
|
||||||
void FileSystem::ResolvePath(Path &path)
|
void FileSystem::ResolvePath(Path &path)
|
||||||
{
|
{
|
||||||
|
// See reference material (1) https://man7.org/linux/man-pages/man7/path_resolution.7.html
|
||||||
|
|
||||||
char* string_path = path.str();
|
char* string_path = path.str();
|
||||||
void* cpy = string_path;
|
void* cpy = string_path;
|
||||||
|
|
||||||
@ -410,9 +412,6 @@ void FileSystem::ResolvePath(Path &path)
|
|||||||
skip = strlen(entry_name);
|
skip = strlen(entry_name);
|
||||||
free(entry_name);
|
free(entry_name);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
free(cpy);
|
free(cpy);
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "Path.h"
|
#include "../../CoreLib/Path.h"
|
||||||
|
|
||||||
#define FS_FILE 0
|
#define FS_FILE 0
|
||||||
#define FS_DIRECTORY 1
|
#define FS_DIRECTORY 1
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
// NOTE: These should not be inline
|
|
||||||
inline void* memset (void* ptr, int value, size_t num)
|
|
||||||
{
|
|
||||||
for( int i = 0; i < num; i++ )
|
|
||||||
{
|
|
||||||
unsigned char* data = (unsigned char*)ptr+ i;
|
|
||||||
*data = (unsigned char)value;
|
|
||||||
}
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
inline int memcmp( const void* ptr1, const void* ptr2, size_t num)
|
|
||||||
{
|
|
||||||
const unsigned char * cs = (const unsigned char*) ptr1;
|
|
||||||
const unsigned char * ct = (const unsigned char*) ptr2;
|
|
||||||
|
|
||||||
|
|
||||||
for (int i = 0 ; i < num ; i++, cs++, ct++ ){
|
|
||||||
if( *cs < *ct){
|
|
||||||
return -1;
|
|
||||||
} else if( *cs > *ct){
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
#include "string.h"
|
|
||||||
|
|
||||||
size_t strlen(const char* str) {
|
|
||||||
size_t len = 0;
|
|
||||||
while(str[len]){
|
|
||||||
len++;
|
|
||||||
}
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
|
|
||||||
int strncmp ( const char* str1, const char* str2, size_t num ){
|
|
||||||
for( int i = 0; i < num ; i++){
|
|
||||||
|
|
||||||
if( str1[i] < str2[i]){
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( str1[i] > str2[i] ){
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,4 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include <stddef.h>
|
|
||||||
size_t strlen(const char* str);
|
|
||||||
int strncmp ( const char* str1, const char* str2, size_t num );
|
|
Loading…
Reference in New Issue
Block a user