add initrd_write (working with small files only)
This commit is contained in:
parent
e16eb7ea07
commit
4990227b5c
5 changed files with 20 additions and 15 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -8,6 +8,7 @@
|
|||
*.a
|
||||
*.log
|
||||
*.DS_Store
|
||||
*.swp
|
||||
tags
|
||||
include/metalsvm/config.h
|
||||
Makefile
|
||||
|
|
2
fs/fs.c
2
fs/fs.c
|
@ -49,7 +49,7 @@ ssize_t write_fs(vfs_node_t* node, uint8_t* buffer, size_t size, off_t offset)
|
|||
return ret;
|
||||
|
||||
spinlock_lock(&node->lock);
|
||||
// Has the node got a write callback?
|
||||
// Has the node got a write callback?
|
||||
if (node->write != 0)
|
||||
ret = node->write(node, buffer, size, offset);
|
||||
spinlock_unlock(&node->lock);
|
||||
|
|
14
fs/initrd.c
14
fs/initrd.c
|
@ -90,6 +90,19 @@ static ssize_t initrd_read(vfs_node_t* node, uint8_t* buffer, size_t size, off_t
|
|||
return size;
|
||||
}
|
||||
|
||||
static ssize_t initrd_write(vfs_node_t* node, uint8_t* buffer, size_t size, off_t offset)
|
||||
{
|
||||
block_list_t* blist = &node->block_list;
|
||||
char* data = (char*) blist->data[0];
|
||||
|
||||
//////////ACHTUNG keine Überprüfung der Blcoklängen etc.
|
||||
memcpy(data, buffer, size);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static dirent_t* initrd_readdir(vfs_node_t* node, uint32_t index)
|
||||
{
|
||||
uint32_t i, j, count;
|
||||
|
@ -296,6 +309,7 @@ int initrd_init(void)
|
|||
memset(new_node, 0x00, sizeof(vfs_node_t));
|
||||
new_node->type = FS_FILE;
|
||||
new_node->read = initrd_read;
|
||||
new_node->write = initrd_write;
|
||||
new_node->block_size = file_desc->length;
|
||||
new_node->block_list.data[0] = ((char*) header) + file_desc->offset;
|
||||
spinlock_init(&new_node->lock);
|
||||
|
|
|
@ -33,7 +33,8 @@ static int sys_read(int fd, const char *buf, size_t len)
|
|||
|
||||
static int sys_write(int fd, const char *buf, size_t len)
|
||||
{
|
||||
write_fs(per_core(current_task)->fildes_table[fd].node, (uint8_t*)buf, len, per_core(current_task)->fildes_table[fd].offset);
|
||||
//per_core(current_task)->fildes_table[fd].node->write = 1;
|
||||
write_fs(per_core(current_task)->fildes_table[fd].node, (uint8_t*)buf, len, 0);//per_core(current_task)->fildes_table[fd].offset);
|
||||
kprintf("ins Dateis. geschr. -- fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, len, buf);
|
||||
return len; ////////ACHTUNG: gaukelt dem Benutzer vor alles geschrieben zu haben.
|
||||
}
|
||||
|
@ -51,7 +52,6 @@ static int sys_open(const char* file, int flags, int mode)
|
|||
kprintf("Unable to create filedescriptor");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static int sys_close(int fd)
|
||||
|
|
|
@ -30,22 +30,12 @@ int main(int argc, char** argv)
|
|||
//int i;
|
||||
char* str = (char *)malloc(40 * sizeof(char));
|
||||
FILE* testfile;
|
||||
FILE* testfileX;
|
||||
|
||||
testfileX = fopen("/bin/tests", "w+r");
|
||||
testfile = fopen("/bin/test", "w+r");
|
||||
setbuf(testfile, NULL);
|
||||
setbuf(testfileX, NULL);
|
||||
fwrite("wtest1\n", 1, 10, testfileX);
|
||||
//fflush(testfile);
|
||||
fread(str, 1, 10, testfile);
|
||||
printf("Schreiben: %s", str);
|
||||
setbuf(testfile, NULL);
|
||||
fread(str, 1, 20, testfileX);
|
||||
//fgets(str, 2, testfile);
|
||||
//setbuf(testfile, 0);
|
||||
//printf("Stage 2: %s", str);
|
||||
//printf("Hello from printf2!!!\n");
|
||||
fwrite("wtest1\n", 1, 7, testfile);
|
||||
fread(str, 1, 10, testfile);
|
||||
|
||||
return errno;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue