diff --git a/defs.h b/defs.h index efbbe3d..7f1e88d 100644 --- a/defs.h +++ b/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 diff --git a/syscall.c b/syscall.c index 0918da7..45f758e 100644 --- a/syscall.c +++ b/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); diff --git a/sysfile.c b/sysfile.c index e6d08e8..64f2b33 100644 --- a/sysfile.c +++ b/sysfile.c @@ -388,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);