diff options
author | Russ Cox <rsc@golang.org> | 2009-05-26 17:39:25 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-05-26 17:39:25 -0700 |
commit | c9f59278d585a5c8203d461feb4a9a8b375a9c68 (patch) | |
tree | cda077207c6ae3ee181895b0409d07d9be1adc37 /src/runtime | |
parent | 8e9ae114eeda85cc5ef1a60f38718c38af8e0144 (diff) | |
download | golang-c9f59278d585a5c8203d461feb4a9a8b375a9c68.tar.gz |
add NUL when allocating strings, to make use
of getenv by low-level runtime easier.
fix 32-bit bug in gc (there are still more).
R=ken
OCL=29415
CL=29415
Diffstat (limited to 'src/runtime')
-rw-r--r-- | src/runtime/mgc0.c | 12 | ||||
-rw-r--r-- | src/runtime/string.c | 2 |
2 files changed, 9 insertions, 5 deletions
diff --git a/src/runtime/mgc0.c b/src/runtime/mgc0.c index 9c4061f6e..d58d6ce44 100644 --- a/src/runtime/mgc0.c +++ b/src/runtime/mgc0.c @@ -22,6 +22,10 @@ enum { extern byte etext[]; extern byte end[]; +enum { + PtrSize = sizeof(void*) +}; + static void scanblock(int32 depth, byte *b, int64 n) { @@ -34,14 +38,14 @@ scanblock(int32 depth, byte *b, int64 n) if(Debug) printf("%d scanblock %p %D\n", depth, b, n); - off = (uint32)(uintptr)b & 7; + off = (uint32)(uintptr)b & (PtrSize-1); if(off) { - b += 8 - off; - n -= 8 - off; + b += PtrSize - off; + n -= PtrSize - off; } vp = (void**)b; - n /= 8; + n /= PtrSize; for(i=0; i<n; i++) { if(mlookup(vp[i], &obj, &size, &ref)) { if(*ref == RefFree || *ref == RefStack) diff --git a/src/runtime/string.c b/src/runtime/string.c index 5e4922a99..d7393ef6e 100644 --- a/src/runtime/string.c +++ b/src/runtime/string.c @@ -27,7 +27,7 @@ gostringsize(int32 l) if(l == 0) return emptystring; - s.str = mal(l); + s.str = mal(l+1); // leave room for NUL for C runtime (e.g., callers of getenv) s.len = l; if(l > maxstring) maxstring = l; |