diff --git a/.gitignore b/.gitignore index 391bf0f5..f0d2611f 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ *.a *.log *.DS_Store +*.swp tags include/metalsvm/config.h Makefile diff --git a/fs/fs.c b/fs/fs.c index a2a28e6e..61f56e99 100644 --- a/fs/fs.c +++ b/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); diff --git a/fs/initrd.c b/fs/initrd.c index d2a8567e..c5d61b81 100644 --- a/fs/initrd.c +++ b/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); diff --git a/kernel/syscall.c b/kernel/syscall.c index 91653aca..d55ee699 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -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) diff --git a/newlib/examples/hello.c b/newlib/examples/hello.c index 8d688aa5..f22e16f6 100644 --- a/newlib/examples/hello.c +++ b/newlib/examples/hello.c @@ -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; }