Avoid is_constant calls in vectorizable_bswap
[official-gcc.git] / libgo / go / syscall / env_plan9.go
blob9a8a837e7d3c139fcdada50bcd36919347051155
1 // Copyright 2011 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 // Plan 9 environment variables.
7 package syscall
9 import (
10 "errors"
13 var (
14 errZeroLengthKey = errors.New("zero length key")
15 errShortWrite = errors.New("i/o count too small")
18 func readenv(key string) (string, error) {
19 fd, err := open("/env/"+key, O_RDONLY)
20 if err != nil {
21 return "", err
23 defer Close(fd)
24 l, _ := Seek(fd, 0, 2)
25 Seek(fd, 0, 0)
26 buf := make([]byte, l)
27 n, err := Read(fd, buf)
28 if err != nil {
29 return "", err
31 if n > 0 && buf[n-1] == 0 {
32 buf = buf[:n-1]
34 return string(buf), nil
37 func writeenv(key, value string) error {
38 fd, err := create("/env/"+key, O_RDWR, 0666)
39 if err != nil {
40 return err
42 defer Close(fd)
43 b := []byte(value)
44 n, err := Write(fd, b)
45 if err != nil {
46 return err
48 if n != len(b) {
49 return errShortWrite
51 return nil
54 func Getenv(key string) (value string, found bool) {
55 if len(key) == 0 {
56 return "", false
58 v, err := readenv(key)
59 if err != nil {
60 return "", false
62 return v, true
65 func Setenv(key, value string) error {
66 if len(key) == 0 {
67 return errZeroLengthKey
69 err := writeenv(key, value)
70 if err != nil {
71 return err
73 return nil
76 func Clearenv() {
77 RawSyscall(SYS_RFORK, RFCENVG, 0, 0)
80 func Unsetenv(key string) error {
81 if len(key) == 0 {
82 return errZeroLengthKey
84 Remove("/env/" + key)
85 return nil
88 func Environ() []string {
89 fd, err := open("/env", O_RDONLY)
90 if err != nil {
91 return nil
93 defer Close(fd)
94 files, err := readdirnames(fd)
95 if err != nil {
96 return nil
98 ret := make([]string, 0, len(files))
100 for _, key := range files {
101 v, err := readenv(key)
102 if err != nil {
103 continue
105 ret = append(ret, key+"="+v)
107 return ret