root/src/pkg/runtime/env_plan9.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. runtime·getenv

// 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;
        static byte b[128];

        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);
        if(runtime·strcmp((byte*)s, (byte*)"GOTRACEBACK") == 0){
                // should not call malloc
                if(n >= sizeof b)
                        return nil;
                runtime·memclr(b, sizeof b);
                p = b;
        }else
                p = runtime·malloc(n+1);
        r = runtime·pread(fd, p, n, 0);
        runtime·close(fd);
        if(r < 0)
                return nil;
        return p;
}

/* [<][>][^][v][top][bottom][index][help] */