first stdin, stout, stderr implementation (still buggy)

This commit is contained in:
Marian Ohligs 2011-04-23 11:04:32 +02:00
parent e765e16eb1
commit 02f7fecc61
7 changed files with 40 additions and 26 deletions

View file

@ -28,7 +28,9 @@
static ssize_t stdin_read(vfs_node_t* node, uint8_t* buffer, size_t size, off_t offset)
{
kprintf("Keine Eingabe implementiert");
while(size) {
size = kputs((char*)buffer);
}
return size;
}

View file

@ -33,7 +33,7 @@ static ssize_t stdout_read(vfs_node_t* node, uint8_t* buffer, size_t size, off_t
static ssize_t stdout_write(vfs_node_t* node, uint8_t* buffer, size_t size, off_t offset)
{
kprintf("%s", buffer);
size = kprintf("%s\0", buffer);
return size;
}

View file

@ -32,7 +32,7 @@ static int sys_read(int fd, const char *buf, size_t len)
(uint8_t*)buf, len,
per_core(current_task)->fildes_table[fd].offset);
per_core(current_task)->fildes_table[fd].offset += readbytes;
/*kprintf("fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, len, buf);*/
//kprintf("fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, len, buf);
/* Beware: still reading above file limit! */
return readbytes;
}
@ -40,12 +40,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)
{
unsigned int wrotebytes;
/* per_core(current_task)->fildes_table[fd].node->write = 1; */
wrotebytes = 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); */
wrotebytes = write_fs(per_core(current_task)->fildes_table[fd].node, (uint8_t*)buf, len, per_core(current_task)->fildes_table[fd].offset);
//kprintf("ins Dateis. geschr. -- fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, wrotebytes, buf);
per_core(current_task)->fildes_table[fd].offset += wrotebytes;
return wrotebytes;
@ -54,7 +50,7 @@ static int sys_write(int fd, const char *buf, size_t len)
static int sys_open(const char* file, int flags, int mode)
{
int fd;
for (fd = 0; fd < MAX_FILDES; fd++) {
for (fd = 3; fd < MAX_FILDES; fd++) {
if (per_core(current_task)->fildes_table[fd].node == NULL) {
per_core(current_task)->fildes_table[fd].node = findnode_fs((char*) file);
return fd;
@ -118,28 +114,26 @@ int syscall_handler(uint32_t sys_nr, ...)
int fd = va_arg(vl, int);
const char* buf = va_arg(vl, const char*);
size_t len = va_arg(vl, size_t);
kprintf("%s", buf);
//ret = sys_read(fd, buf, len);
ret = sys_read(fd, buf, len);
break;
}
case __NR_write: {
int fd = va_arg(vl, int);
const char* buf = va_arg(vl, const char*);
size_t len = va_arg(vl, size_t);
kprintf("%s", buf);
//ret = sys_write(fd, buf, len);
ret = sys_write(fd, buf, len);
break;
}
case __NR_open: {
const char* file = va_arg(vl, const char*);
int flags = va_arg(vl, int);
int mode = va_arg(vl, int);
//ret = sys_open(file, flags, mode);
ret = sys_open(file, flags, mode);
break;
}
case __NR_close: {
int fd = va_arg(vl, int);
//ret = sys_close(fd);
ret = sys_close(fd);
break;
}
case __NR_sbrk: {

View file

@ -184,6 +184,10 @@ static int create_task(tid_t* id, entry_point_t ep, void* arg)
mailbox_wait_msg_init(&task_table[i].inbox);
memset(task_table[i].outbox, 0x00, sizeof(mailbox_wait_msg_t*)*MAX_TASKS);
task_table[i].outbox[per_core(current_task)->id] = &per_core(current_task)->inbox;
task_table[i].fildes_table[0].node = findnode_fs("/dev/stdin");
task_table[i].fildes_table[1].node = findnode_fs("/dev/stdout");
task_table[i].fildes_table[2].node = findnode_fs("/dev/stderr");
if (id)
*id = i;
@ -533,7 +537,7 @@ int create_user_task(tid_t* id, const char* fname, char** argv)
}
}
if (argc < 0)
if (argc <= 0)
return -EINVAL;
if (buffer_size >= MAX_ARGS)
return -EINVAL;

View file

@ -102,7 +102,7 @@ static int STDCALL join_test(void* arg)
int test_init(void)
{
char* argv[] = {"/bin/tests", NULL};
char* argv[] = {"/bin/hello", NULL};
sem_init(&producing, 1);
sem_init(&consuming, 0);

View file

@ -28,14 +28,27 @@ extern int errno;
int main(int argc, char** argv)
{
//int i;
//char* str = (char *)malloc(40 * sizeof(char));
//FILE* testfile;
printf("hallo");
//testfile = fopen("/bin/test", "w+r");
//setbuf(testfile, NULL);
//fread(str, 1, 10, testfile);
//fwrite("wtest1\n", 1, 7, testfile);
//fread(str, 1, 10, testfile);
char* str = (char *)malloc(20 * sizeof(char));
char* str2 = (char *)malloc(20 * sizeof(char));
FILE* testfile;
testfile = fopen("/bin/test", "w+r");
setbuf(testfile, NULL);
fflush(NULL);
fread(str2, 1, 10, testfile);
fflush(NULL);
printf("Datei gelesen (/bin/test):%s\n", str2);
fflush(NULL);
setbuf(testfile, NULL);
fflush(NULL);
fwrite("wtest1", 1, 7, testfile);
setbuf(testfile, NULL);
fread(str, 1, 10, testfile);
fflush(NULL);
//printf("Aus Datei gelesen (/bin/test):%s\n", str);
return errno;
}

View file

@ -1 +1,2 @@
HalloXA!!