trying something out
This commit is contained in:
parent
e744baa5b5
commit
808fa4c13e
|
|
@ -31,6 +31,7 @@ extern void kmain(kernel_info_t *kernel_info){
|
||||||
pic_disable();
|
pic_disable();
|
||||||
pic_setmask(0xfe, PIC1_DATA);
|
pic_setmask(0xfe, PIC1_DATA);
|
||||||
vfs_init();
|
vfs_init();
|
||||||
|
fcreate("Testing/testing/bleh", 0);
|
||||||
//TODO: Map and load filesystem and disk modules
|
//TODO: Map and load filesystem and disk modules
|
||||||
//TODO: Start Initial Process
|
//TODO: Start Initial Process
|
||||||
mlog("KERNEL", "Initializing Scheduler & starting PID 1\n", MLOG_PRINT);
|
mlog("KERNEL", "Initializing Scheduler & starting PID 1\n", MLOG_PRINT);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
#include "string.h"
|
||||||
|
|
||||||
|
#pragma warning
|
||||||
|
|
||||||
|
char res[256];
|
||||||
|
|
||||||
|
char* strtok(char* string, char d)
|
||||||
|
{
|
||||||
|
static char* input = 0;
|
||||||
|
|
||||||
|
if (string){
|
||||||
|
input = string;
|
||||||
|
}
|
||||||
|
if (!input){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int i = 0;
|
||||||
|
for (; input[i] != 0; i++) {
|
||||||
|
if (input[i] != d){
|
||||||
|
res[i] = input[i];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
res[i] = '\0';
|
||||||
|
input = input + i+1;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res[i] = '\0';
|
||||||
|
input = 0;
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
void itoa(int64_t data, char *res, uint8_t base);
|
void itoa(int64_t data, char *res, uint8_t base);
|
||||||
void strpad(char *string, char padding, uint32_t length);
|
void strpad(char *string, char padding, uint32_t length);
|
||||||
|
//str cannot be null
|
||||||
inline uint32_t strlen(char *str){
|
inline uint32_t strlen(char *str){
|
||||||
uint32_t c = 0;
|
uint32_t c = 0;
|
||||||
while(*str){
|
while(*str){
|
||||||
|
|
@ -11,5 +12,15 @@ inline uint32_t strlen(char *str){
|
||||||
}
|
}
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
//str1 and str2 both cannot be null
|
||||||
|
inline uint32_t strcmp(char *str1, char *str2){
|
||||||
|
uint32_t i = 0;
|
||||||
|
while(str1[i] && str1[i] == str2[i]){
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if(str1[i] == str2[i]) return 0;
|
||||||
|
else return 1;
|
||||||
|
}
|
||||||
|
char *strtok(char *str, char delim);
|
||||||
void strcpy(char *src, char *dest);
|
void strcpy(char *src, char *dest);
|
||||||
void memcpy(char *src, char *dest, uint32_t c);
|
void memcpy(char *src, char *dest, uint32_t c);
|
||||||
|
|
@ -1,16 +1,57 @@
|
||||||
#include "vfs.h"
|
#include "vfs.h"
|
||||||
#include "../shared/kstdlib.h"
|
#include "../shared/kstdlib.h"
|
||||||
|
#include "../shared/memory.h"
|
||||||
vfile_t root_dir = {"/", VFILE_DIRECTORY};
|
#include "../shared/string.h"
|
||||||
|
#define MODULE_NAME "KVFS"
|
||||||
|
vfile_t root_dir = {"\0", VFILE_DIRECTORY};
|
||||||
|
|
||||||
void vfs_init(){
|
void vfs_init(){
|
||||||
// mlog()
|
mlog(MODULE_NAME, "Initializing VFS\n", MLOG_PRINT);
|
||||||
root_dir.access.data.ptr = kmalloc(1);
|
root_dir.access.data.ptr = kmalloc(1);
|
||||||
root_dir.access.data.size_pgs = 1;
|
root_dir.access.data.size_pgs = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fcreate();
|
void fcreate(char *name, VFILE_TYPE type, ...){
|
||||||
|
printf("Sasdafdasdf\n");
|
||||||
|
char *dir = strtok(name, '/');
|
||||||
|
char *file = dir;
|
||||||
|
char *tmp = dir;
|
||||||
|
while(tmp != 0){
|
||||||
|
dir = file;
|
||||||
|
file = tmp;
|
||||||
|
tmp = strtok(0, '/');
|
||||||
|
}
|
||||||
|
}
|
||||||
void fdelete();
|
void fdelete();
|
||||||
uint32_t fwrite();
|
|
||||||
|
// navya was here https://github.com/novabansal
|
||||||
|
uint32_t fwrite(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count){
|
||||||
|
// a: a way to call RW functions from any given module
|
||||||
|
// OR
|
||||||
|
// b: specify a pointer to data that is written to virtual file in memory
|
||||||
|
|
||||||
|
// search through root directory
|
||||||
|
switch(file_entry->type){
|
||||||
|
case VFILE_DEVICE:
|
||||||
|
file_entry->access.funcs.write(byte_array, offset, count);
|
||||||
|
}
|
||||||
|
}
|
||||||
uint32_t fread();
|
uint32_t fread();
|
||||||
void fopen();
|
void fopen(char *name){
|
||||||
|
char *dir = strtok(name, '/');
|
||||||
|
char *tmp = dir;
|
||||||
|
vfile_t *current_dir = &root_dir;
|
||||||
|
while(tmp != 0){
|
||||||
|
dir = tmp;
|
||||||
|
uint32_t i = 0;
|
||||||
|
vfile_t *dir = ((vfile_t *)(current_dir->access.data.ptr));
|
||||||
|
while(dir[i].name[0]){
|
||||||
|
if(!strcmp(dir[i].name, tmp)){
|
||||||
|
if(dir[i].type == )
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp = strtok(0, '/');
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
@ -27,8 +27,8 @@ typedef struct virtual_file_t{
|
||||||
}vfile_t;
|
}vfile_t;
|
||||||
|
|
||||||
void vfs_init();
|
void vfs_init();
|
||||||
void fcreate();
|
void fcreate(char *name, VFILE_TYPE type, ...);
|
||||||
void fdelete();
|
void fdelete();
|
||||||
uint32_t fwrite();
|
uint32_t fwrite();
|
||||||
uint32_t fread();
|
uint32_t fread();
|
||||||
void fopen();
|
void fopen(char *name);
|
||||||
|
|
@ -23,4 +23,12 @@ typedef struct module{
|
||||||
uint32_t id;
|
uint32_t id;
|
||||||
char name[16];
|
char name[16];
|
||||||
uint8_t flags;
|
uint8_t flags;
|
||||||
}module_t;
|
}module_t;
|
||||||
|
|
||||||
|
typedef enum vfile_type{
|
||||||
|
VFILE_POINTER,
|
||||||
|
VFILE_DEVICE,
|
||||||
|
VFILE_MOUNT,
|
||||||
|
VFILE_DIRECTORY,
|
||||||
|
VFILE_FILE,
|
||||||
|
}VFILE_TYPE;
|
||||||
Loading…
Reference in New Issue