// 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.

// +build darwin dragonfly freebsd hurd linux nacl netbsd openbsd solaris windows

#include "runtime.h"
#include "array.h"
#include "arch.h"

extern Slice runtime_get_envs(void);

String
runtime_getenv(const char *s)
{
	int32 i, j;
	intgo len;
	const byte *v, *bs;
	Slice envs;
	String* envv;
	int32 envc;
	String ret;

	bs = (const byte*)s;
	len = runtime_findnull(bs);
	envs = runtime_get_envs();
	envv = (String*)envs.__values;
	envc = envs.__count;
	for(i=0; i<envc; i++){
		if(envv[i].len <= len)
			continue;
		v = (const byte*)envv[i].str;
		for(j=0; j<len; j++)
			if(bs[j] != v[j])
				goto nomatch;
		if(v[len] != '=')
			goto nomatch;
		ret.str = v+len+1;
		ret.len = envv[i].len-len-1;
		return ret;
	nomatch:;
	}
	ret.str = nil;
	ret.len = 0;
	return ret;
}
