Skip to content
Snippets Groups Projects
Commit d15f0d10 authored by kaashoek's avatar kaashoek
Browse files

start on mkdir

stat
parent e4bcd2a3
No related branches found
No related tags found
No related merge requests found
......@@ -4,7 +4,7 @@
#include "fs.h"
char buf[512];
struct stat stat;
struct stat st;
struct dirent dirent;
int
......@@ -23,20 +23,26 @@ main(int argc, char *argv[])
printf(2, "ls: cannot open .\n");
exit();
}
if (fstat(fd, &stat) < 0) {
if (fstat(fd, &st) < 0) {
printf(2, "ls: cannot open .\n");
exit();
}
if (stat.st_type != T_DIR) {
if (st.st_type != T_DIR) {
printf(2, "ls: . is not a dir\n");
}
for(off = 0; off < stat.st_size; off += sizeof(struct dirent)) {
cprintf("size %d\n", st.st_size);
for(off = 0; off < st.st_size; off += sizeof(struct dirent)) {
if (read(fd, &dirent, sizeof(struct dirent)) != sizeof(struct dirent)) {
printf(2, "ls: read error\n");
exit();
}
if (dirent.inum != 0)
printf(1, "%s\n", dirent.name);
if (dirent.inum != 0) {
if (stat (dirent.name, &st) < 0)
printf(2, "stat: failed\n");
printf(1, "%s t %d\n", dirent.name, st.st_type);
}
}
close(fd);
......
......@@ -289,6 +289,31 @@ sys_mknod(void)
return (nip == 0) ? -1 : 0;
}
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)
{
......@@ -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
......
......@@ -13,4 +13,5 @@
#define SYS_unlink 16
#define SYS_fstat 17
#define SYS_link 18
#define SYS_mkdir 19
#include "types.h"
#include "stat.h"
#include "fcntl.h"
#include "user.h"
int
......@@ -54,3 +57,16 @@ gets(char *buf, int max)
buf[i] = '\0';
return buf;
}
int
stat(char *n, struct stat *st)
{
int fd = open(n, O_RDONLY);
int r;
if (fd < 0) return -1;
r = fstat(fd, st);
close(fd);
return r;
}
......@@ -14,9 +14,10 @@ int exec(char *, char **);
int open(char *, int);
int mknod (char*,short,short,short);
int unlink (char*);
struct stat;
int fstat (int fd, struct stat *stat);
int link(char *, char *);
int mkdir(char *);
int stat(char *, struct stat *stat);
int puts(char*);
char* strcpy(char*, char*);
......
......@@ -65,7 +65,13 @@ main(void)
printf(stdout, "read failed\n");
}
close(fd);
printf(stdout, "unlink doesnotexist\n");
unlink("doesnotexist");
printf(stdout, "many creates, followed by unlink\n");
name[0] = 'a';
name[2] = '\0';
for (i = 0; i < 52; i++) {
......@@ -80,6 +86,13 @@ main(void)
unlink(name);
}
printf(stdout, "mkdir\n");
if (mkdir("dir0") < 0)
printf(stdout, "mkdir failed\n");
// unlink("dir0");
//exec("echo", echo_args);
printf(stdout, "about to do exec\n");
exec("cat", cat_args);
......
......@@ -23,3 +23,4 @@ STUB(mknod)
STUB(unlink)
STUB(fstat)
STUB(link)
STUB(mkdir)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment