示例#1
0
文件: plan9.c 项目: Earnestly/plan9
void
readenv(void)
{
	char *p;
	int envf, f;
	Dir *e;
	char nam[1024];
	int i, n, len;
	Word *w;

	rfork(RFENVG);	/*  use copy of the current environment variables */

	envf = open("/env", OREAD);
	if(envf < 0)
		return;
	while((n = dirread(envf, &e)) > 0){
		for(i = 0; i < n; i++){
			len = e[i].length;
				/* don't import funny names, NULL values,
				 * or internal mk variables
				 */
			if(len <= 0 || *shname(e[i].name) != '\0')
				continue;
			if (symlook(e[i].name, S_INTERNAL, 0))
				continue;
			snprint(nam, sizeof nam, "/env/%s", e[i].name);
			f = open(nam, OREAD);
			if(f < 0)
				continue;
			p = Malloc(len+1);
			if(read(f, p, len) != len){
				perror(nam);
				close(f);
				continue;
			}
			close(f);
			if (p[len-1] == 0)
				len--;
			else
				p[len] = 0;
			w = encodenulls(p, len);
			free(p);
			p = strdup(e[i].name);
			setvar(p, (void *) w);
			symlook(p, S_EXPORTED, (void*)"")->u.ptr = "";
		}
		free(e);
	}
	close(envf);
}
示例#2
0
文件: Nt.c 项目: aryx/fork-c--
void
readenv(void)
{
    char **p, *s;
    Word *w;

    for(p = environ; *p; p++) {
        s = shname(*p);
        if(*s == '=') {
            *s = 0;
            w = newword(s+1);
        } else
            w = newword("");
        if (symlook(*p, S_INTERNAL, 0))
            continue;
        s = strdup9(*p);
        setvar(s, (void *)w);
        symlook(s, S_EXPORTED, (void *)"")->value = "";
    }
}