mirror of
https://github.com/golang/go
synced 2024-11-18 15:34:53 -07:00
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
This commit is contained in:
parent
7d73075511
commit
1a0a6f9d50
@ -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)
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user