blob: f732c9f294ee3d22545a3d2bd98d3a0cdca672d8 [file] [log] [blame]
// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
#include "runtime.h"
#include "os_GOOS.h"
byte*
runtime·getenv(int8 *s)
{
int32 fd, n, r;
intgo len;
byte file[128];
byte *p;
static byte b[128];
len = runtime·findnull((byte*)s);
if(len > sizeof file-6)
return nil;
runtime·memclr(file, sizeof file);
runtime·memmove((void*)file, (void*)"/env/", 5);
runtime·memmove((void*)(file+5), (void*)s, len);
fd = runtime·open((int8*)file, OREAD, 0);
if(fd < 0)
return nil;
n = runtime·seek(fd, 0, 2);
if(runtime·strcmp((byte*)s, (byte*)"GOTRACEBACK") == 0){
// should not call malloc
if(n >= sizeof b)
return nil;
runtime·memclr(b, sizeof b);
p = b;
}else
p = runtime·malloc(n+1);
r = runtime·pread(fd, p, n, 0);
runtime·close(fd);
if(r < 0)
return nil;
return p;
}