summaryrefslogtreecommitdiff
path: root/syscall.c
diff options
context:
space:
mode:
authorrtm <rtm>2006-08-26 15:06:59 +0000
committerrtm <rtm>2006-08-26 15:06:59 +0000
commita6c28c9779da5f0b98a1698d66eae0708e395e7d (patch)
tree2c6093845cf5913c06c6af2677fdaf407cb223ab /syscall.c
parenta84585de6380dfc1c9988015ba0d3c77ecfa5395 (diff)
downloadxv6-labs-a6c28c9779da5f0b98a1698d66eae0708e395e7d.tar.gz
xv6-labs-a6c28c9779da5f0b98a1698d66eae0708e395e7d.tar.bz2
xv6-labs-a6c28c9779da5f0b98a1698d66eae0708e395e7d.zip
mkdir check error from mknod
chdir return -1 if target not a dir
Diffstat (limited to 'syscall.c')
-rw-r--r--syscall.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/syscall.c b/syscall.c
index 8571cca..9e256a8 100644
--- a/syscall.c
+++ b/syscall.c
@@ -320,6 +320,8 @@ sys_mkdir(void)
return -1;
nip = mknod (cp->mem + arg0, T_DIR, 0, 0);
+ if(nip == 0)
+ return -1;
memset (de.name, '\0', DIRSIZ);
de.name[0] = '.';
@@ -356,7 +358,7 @@ sys_chdir(void)
if ((ip = namei(cp->mem + arg0, NAMEI_LOOKUP, 0, 0, 0)) == 0)
return -1;
-
+
if (ip == cp->cwd) {
iput (ip);
return 0;
@@ -364,7 +366,7 @@ sys_chdir(void)
if (ip->type != T_DIR) {
iput(ip);
- return 0;
+ return -1;
}
idecref(cp->cwd);