mirror of
https://github.com/golang/go
synced 2024-10-04 18:31:22 -06:00
82f5ca1ef0
Update #6046. This CL just does findnull and findnullw. There are other functions to fix but doing them a few at a time will help isolate any (unlikely) breakages these changes bring up in architectures I can't test myself. R=golang-dev, dsymonds CC=golang-dev https://golang.org/cl/12520043
35 lines
730 B
C
35 lines
730 B
C
// 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;
|
|
|
|
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);
|
|
p = runtime·malloc(n+1);
|
|
r = runtime·pread(fd, p, n, 0);
|
|
runtime·close(fd);
|
|
if(r < 0)
|
|
return nil;
|
|
return p;
|
|
}
|