summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--README.md2
-rw-r--r--kernel/syscalls.c10
-rw-r--r--kernel/syscalls.h9
-rw-r--r--test/pipetest.c54
-rw-r--r--xxx/README.md1
6 files changed, 67 insertions, 12 deletions
diff --git a/.gitignore b/.gitignore
index a96dac3..89365a6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,3 @@
-*.swp
.lastvimsession
.ycm_extra_conf.pyc
-xxx/
+.gdb_history
diff --git a/README.md b/README.md
index ee84a1e..ac12421 100644
--- a/README.md
+++ b/README.md
@@ -86,6 +86,8 @@ FoolOS is tested/developed on the following emulators/machines
Todos
-----
+* pipe\_syscall
+* Newlib errno / return value / argv / env
* Cleanup Virtual Memory Manager / Flush TLB (?)
* Mouse & KB processing in seperate task.
* Kernel Stuff Reent?
diff --git a/kernel/syscalls.c b/kernel/syscalls.c
index 8246df8..6707ec3 100644
--- a/kernel/syscalls.c
+++ b/kernel/syscalls.c
@@ -128,12 +128,10 @@ int syscall_write(int file, char *buf, int len)
return len;
}
-int chk_syscall_read(int file, char *buf, int len)
-{
- if(len> fifo_data_len[file])return 0;
- return 1;
-}
-
+/**
+ * __read()__ attemts to read up to _len_ bytes from file descriptor _file_
+ * into the buffer starting at _buf_.
+ */
int syscall_read(int file, char *buf, int len)
{
//file 0 = stdin , file 1 = stdout , file 2 = stderr
diff --git a/kernel/syscalls.h b/kernel/syscalls.h
index 8b88e6a..b31d32c 100644
--- a/kernel/syscalls.h
+++ b/kernel/syscalls.h
@@ -6,11 +6,11 @@
#define SYSCALL_OPEN 65
#define SYSCALL_GETPID 78
-#define SYSCALL_ISATTY 68
+#define SYSCALL_ISATTY 68 // linux??
#define SYSCALL_LINK 82
#define SYSCALL_LSEEK 69
#define SYSCALL_READ 62
-#define SYSCALL_SBRK 70
+#define SYSCALL_SBRK 70 // linux??
#define SYSCALL_STAT 74
#define SYSCALL_FSTAT 67
#define SYSCALL_LSTAT 79
@@ -19,14 +19,15 @@
#define SYSCALL_WAIT 77
#define SYSCALL_WRITE 61
#define SYSCALL_GETTIMEOFDAY 71
-#define SYSCALL_READDIR 63
+#define SYSCALL_READDIR 63 // getdents?
#define SYSCALL_KILL 73
#define SYSCALL_POLL 80 //shit!?
#define SYSCALL_CLONE 83
+#define SYSCALL_PIPE 84 // TODO! unnamed and named pipes (fifos) SYSCALL_MKNOD
char* syscall_get_name(uint32_t num);
uint32_t syscall_generic(uint32_t nr,uint32_t p1, uint32_t p2, uint32_t p3, uint32_t pid);
-int chk_syscall_read(int file, char *buf, int len);
+
int syscall_open(char *name, int flags, int mode);
int syscall_write(int file, char *buf, int len);
diff --git a/test/pipetest.c b/test/pipetest.c
new file mode 100644
index 0000000..e848049
--- /dev/null
+++ b/test/pipetest.c
@@ -0,0 +1,54 @@
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+
+int main(int argc, char *argv[])
+{
+ printf("LINUX PIPE TEST\n");
+
+ if(argc<=1)
+ {
+ printf("one argument please [read|write]\n");
+ }
+
+ if(!strcmp(argv[1],"read"))
+ {
+ FILE *p=fopen("./testpipe","r");
+ printf("opened for reading\n");
+ printf("feof: %i\n",feof(p));
+
+ if(p==NULL)
+ {
+ int err=errno;
+ printf("Opening pipe failed with errno %d : %s\n",err,strerror(err));
+ }
+
+ while(1)
+ {
+ char buf[256];
+ int ret=fread(buf,1,10,p);
+ buf[10]=0;
+ printf("read: %i %s\n",ret,buf);
+ printf("feof: %i\n",feof(p));
+ if (feof(p)) break;
+ }
+ }
+
+ if(!strcmp(argv[1],"write"))
+ {
+ FILE *p=fopen("./testpipe","a");
+ printf("opened for writing\n");
+ if(p==NULL)
+ {
+ int err=errno;
+ printf("Opening pipe failed with errno %d : %s\n",err,strerror(err));
+ }
+ fwrite("DUPA123",1,7,p);
+ fwrite("DUPA123",1,7,p);
+ for(int i=0;i<10000;i++)
+ {
+ fwrite("DUPA123",1,7,p);
+ }
+ //fclose(p);
+ }
+}
diff --git a/xxx/README.md b/xxx/README.md
new file mode 100644
index 0000000..16aeeac
--- /dev/null
+++ b/xxx/README.md
@@ -0,0 +1 @@
+some old files