summaryrefslogtreecommitdiff
path: root/sysfile.c
diff options
context:
space:
mode:
authorrsc <rsc>2007-09-27 05:13:10 +0000
committerrsc <rsc>2007-09-27 05:13:10 +0000
commit666f58c711eafbdccb8abfe530b935505ab6eaa6 (patch)
tree07b6b693d5087b2237cceef262f0d934f2536cc3 /sysfile.c
parent90d975e9c8a540efb380435f0dfc1369bad684ae (diff)
downloadxv6-labs-666f58c711eafbdccb8abfe530b935505ab6eaa6.tar.gz
xv6-labs-666f58c711eafbdccb8abfe530b935505ab6eaa6.tar.bz2
xv6-labs-666f58c711eafbdccb8abfe530b935505ab6eaa6.zip
believe it or not, this was working
the macro expansion of "char *cp;" turned into char *(curproc[cpu()]); which declares a dynamically sized array of char* called curproc. so then &cp == &(curproc[cpu()]) was actually a stack variable as "expected". it was one past the end of the array, but the implicit alloca allocated more than was necessary. do not tell me that making cp a #define was a bad idea. there are worse problems to fix. more on that later.
Diffstat (limited to 'sysfile.c')
-rw-r--r--sysfile.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/sysfile.c b/sysfile.c
index 279847b..a23b48a 100644
--- a/sysfile.c
+++ b/sysfile.c
@@ -49,11 +49,11 @@ sys_read(void)
{
struct file *f;
int n;
- char *cp;
+ char *p;
- if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argptr(1, &cp, n) < 0)
+ if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argptr(1, &p, n) < 0)
return -1;
- return fileread(f, cp, n);
+ return fileread(f, p, n);
}
int
@@ -61,11 +61,11 @@ sys_write(void)
{
struct file *f;
int n;
- char *cp;
+ char *p;
- if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argptr(1, &cp, n) < 0)
+ if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argptr(1, &p, n) < 0)
return -1;
- return filewrite(f, cp, n);
+ return filewrite(f, p, n);
}
int