// 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";
	"os";
)

// 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 i, s := range os.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];
}
