diff options
author | rsc <rsc> | 2007-09-27 05:13:10 +0000 |
---|---|---|
committer | rsc <rsc> | 2007-09-27 05:13:10 +0000 |
commit | 666f58c711eafbdccb8abfe530b935505ab6eaa6 (patch) | |
tree | 07b6b693d5087b2237cceef262f0d934f2536cc3 /sysfile.c | |
parent | 90d975e9c8a540efb380435f0dfc1369bad684ae (diff) | |
download | xv6-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.c | 12 |
1 files changed, 6 insertions, 6 deletions
@@ -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 |