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
// 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;
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
int addr;
if(argint(n, &addr) < 0)
return -1;
- return fetchstr(proc, addr, pp);
+ return fetchstr(addr, pp);
}
extern int sys_chdir(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);