summaryrefslogtreecommitdiff
path: root/syscall.c
diff options
context:
space:
mode:
Diffstat (limited to 'syscall.c')
-rw-r--r--syscall.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/syscall.c b/syscall.c
index 5cfc20b..0ef2670 100644
--- a/syscall.c
+++ b/syscall.c
@@ -290,6 +290,31 @@ sys_mknod(void)
}
int
+sys_mkdir(void)
+{
+ struct proc *cp = curproc[cpu()];
+ struct inode *nip;
+ uint arg0;
+ int l;
+
+ if(fetcharg(0, &arg0) < 0)
+ return -1;
+
+ if((l = checkstring(arg0)) < 0)
+ return -1;
+
+ if(l >= DIRSIZ)
+ return -1;
+
+ nip = mknod (cp->mem + arg0, T_DIR, 0, 0);
+
+ // XXX put . and .. in
+
+ iput(nip);
+ return (nip == 0) ? -1 : 0;
+}
+
+int
sys_unlink(void)
{
struct proc *cp = curproc[cpu()];
@@ -561,6 +586,9 @@ syscall(void)
case SYS_link:
ret = sys_link();
break;
+ case SYS_mkdir:
+ ret = sys_mkdir();
+ break;
default:
cprintf("unknown sys call %d\n", num);
// XXX fault