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

// Environment variables.

package os

import (
	"once";
)

// ENOENV is the Error indicating that an environment variable does not exist.
var ENOENV = NewError("no such environment variable");

var env map[string] string;


func copyenv() {
	env = make(map[string] string);
	for _, s := range Envs {
		for j := 0; j < len(s); j++ {
			if s[j] == '=' {
				env[s[0:j]] = s[j+1:len(s)];
				break;
			}
		}
	}
}

// Getenverror retrieves the value of the environment variable named by the key.
// It returns the value and an error, if any.
func Getenverror(key string) (value string, err Error) {
	once.Do(copyenv);

	if len(key) == 0 {
		return "", EINVAL;
	}
	v, ok := env[key];
	if !ok {
		return "", ENOENV;
	}
	return v, nil;
}

// Getenv retrieves the value of the environment variable named by the key.
// It returns the value, which will be empty if the variable is not present.
func Getenv(key string) string {
	v, _ := Getenverror(key);
	return v;
}

// Setenv sets the value of the environment variable named by the key.
// It returns an Error, if any.
func Setenv(key, value string) Error {
	once.Do(copyenv);

	if len(key) == 0 {
		return EINVAL;
	}
	env[key] = value;
	return nil;
}

// Clearenv deletes all environment variables.
func Clearenv() {
	once.Do(copyenv);	// prevent copyenv in Getenv/Setenv
	env = make(map[string] string);
}

// Environ returns an array of strings representing the environment,
// in the form "key=value".
func Environ() []string {
	once.Do(copyenv);
	a := make([]string, len(env));
	i := 0;
	for k, v := range env {
		// check i < len(a) for safety,
		// in case env is changing underfoot.
		if i < len(a) {
			a[i] = k + "=" + v;
			i++;
		}
	}
	return a[0:i];
}
