Merge branch 'master' of git+ssh://amsterdam.csail.mit.edu/home/am0/6.828/xv6
This commit is contained in:
commit
432acbaf9e
6 changed files with 28 additions and 17 deletions
4
bio.c
4
bio.c
|
@ -79,9 +79,9 @@ bget(uint dev, uint sector)
|
|||
}
|
||||
}
|
||||
|
||||
// Not cached; recycle some existing buffer.
|
||||
// Not cached; recycle some non-busy and clean buffer.
|
||||
for(b = bcache.head.prev; b != &bcache.head; b = b->prev){
|
||||
if((b->flags & B_BUSY) == 0){
|
||||
if((b->flags & B_BUSY) == 0 && (b->flags & B_DIRTY) == 0){
|
||||
b->dev = dev;
|
||||
b->sector = sector;
|
||||
b->flags = B_BUSY;
|
||||
|
|
4
defs.h
4
defs.h
|
@ -142,8 +142,8 @@ char* strncpy(char*, const char*, int);
|
|||
int argint(int, int*);
|
||||
int argptr(int, char**, int);
|
||||
int argstr(int, char**);
|
||||
int fetchint(struct proc*, uint, int*);
|
||||
int fetchstr(struct proc*, uint, char**);
|
||||
int fetchint(uint, int*);
|
||||
int fetchstr(uint, char**);
|
||||
void syscall(void);
|
||||
|
||||
// timer.c
|
||||
|
|
8
file.c
8
file.c
|
@ -1,3 +1,7 @@
|
|||
//
|
||||
// File descriptors
|
||||
//
|
||||
|
||||
#include "types.h"
|
||||
#include "defs.h"
|
||||
#include "param.h"
|
||||
|
@ -87,7 +91,7 @@ filestat(struct file *f, struct stat *st)
|
|||
return -1;
|
||||
}
|
||||
|
||||
// Read from file f. Addr is kernel address.
|
||||
// Read from file f.
|
||||
int
|
||||
fileread(struct file *f, char *addr, int n)
|
||||
{
|
||||
|
@ -108,7 +112,7 @@ fileread(struct file *f, char *addr, int n)
|
|||
}
|
||||
|
||||
//PAGEBREAK!
|
||||
// Write to file f. Addr is kernel address.
|
||||
// Write to file f.
|
||||
int
|
||||
filewrite(struct file *f, char *addr, int n)
|
||||
{
|
||||
|
|
1
log.c
1
log.c
|
@ -177,6 +177,7 @@ log_write(struct buf *b)
|
|||
brelse(lbuf);
|
||||
if (i == log.lh.n)
|
||||
log.lh.n++;
|
||||
b->flags |= B_DIRTY; // XXX prevent eviction
|
||||
}
|
||||
|
||||
//PAGEBREAK!
|
||||
|
|
18
syscall.c
18
syscall.c
|
@ -13,28 +13,28 @@
|
|||
// library system call function. The saved user %esp points
|
||||
// to a saved program counter, and then the first argument.
|
||||
|
||||
// Fetch the int at addr from process p.
|
||||
// Fetch the int at addr from the current process.
|
||||
int
|
||||
fetchint(struct proc *p, uint addr, int *ip)
|
||||
fetchint(uint addr, int *ip)
|
||||
{
|
||||
if(addr >= p->sz || addr+4 > p->sz)
|
||||
if(addr >= proc->sz || addr+4 > proc->sz)
|
||||
return -1;
|
||||
*ip = *(int*)(addr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Fetch the nul-terminated string at addr from process p.
|
||||
// Fetch the nul-terminated string at addr from the current process.
|
||||
// Doesn't actually copy the string - just sets *pp to point at it.
|
||||
// Returns length of string, not including nul.
|
||||
int
|
||||
fetchstr(struct proc *p, uint addr, char **pp)
|
||||
fetchstr(uint addr, char **pp)
|
||||
{
|
||||
char *s, *ep;
|
||||
|
||||
if(addr >= p->sz)
|
||||
if(addr >= proc->sz)
|
||||
return -1;
|
||||
*pp = (char*)addr;
|
||||
ep = (char*)p->sz;
|
||||
ep = (char*)proc->sz;
|
||||
for(s = *pp; s < ep; s++)
|
||||
if(*s == 0)
|
||||
return s - *pp;
|
||||
|
@ -45,7 +45,7 @@ fetchstr(struct proc *p, uint addr, char **pp)
|
|||
int
|
||||
argint(int n, int *ip)
|
||||
{
|
||||
return fetchint(proc, proc->tf->esp + 4 + 4*n, ip);
|
||||
return fetchint(proc->tf->esp + 4 + 4*n, ip);
|
||||
}
|
||||
|
||||
// Fetch the nth word-sized system call argument as a pointer
|
||||
|
@ -74,7 +74,7 @@ argstr(int n, char **pp)
|
|||
int addr;
|
||||
if(argint(n, &addr) < 0)
|
||||
return -1;
|
||||
return fetchstr(proc, addr, pp);
|
||||
return fetchstr(addr, pp);
|
||||
}
|
||||
|
||||
extern int sys_chdir(void);
|
||||
|
|
10
sysfile.c
10
sysfile.c
|
@ -1,3 +1,9 @@
|
|||
//
|
||||
// File-system system calls.
|
||||
// Mostly argument checking, since we don't trust
|
||||
// user code, and calls into file.c and fs.c.
|
||||
//
|
||||
|
||||
#include "types.h"
|
||||
#include "defs.h"
|
||||
#include "param.h"
|
||||
|
@ -382,13 +388,13 @@ sys_exec(void)
|
|||
for(i=0;; i++){
|
||||
if(i >= NELEM(argv))
|
||||
return -1;
|
||||
if(fetchint(proc, uargv+4*i, (int*)&uarg) < 0)
|
||||
if(fetchint(uargv+4*i, (int*)&uarg) < 0)
|
||||
return -1;
|
||||
if(uarg == 0){
|
||||
argv[i] = 0;
|
||||
break;
|
||||
}
|
||||
if(fetchstr(proc, uarg, &argv[i]) < 0)
|
||||
if(fetchstr(uarg, &argv[i]) < 0)
|
||||
return -1;
|
||||
}
|
||||
return exec(path, argv);
|
||||
|
|
Loading…
Reference in a new issue