WIP for get-environment-variables

This commit is contained in:
Justin Ethier 2016-09-28 23:55:33 -04:00
parent 0c1b36602b
commit 6bd21b422c
3 changed files with 28 additions and 1 deletions

View file

@ -47,6 +47,7 @@ extern long global_heap_size;
extern const object Cyc_EOF; extern const object Cyc_EOF;
char **get_env_variables(); char **get_env_variables();
void pack_env_variables(void *data, object k);
void set_env_variables(char **vars); void set_env_variables(char **vars);
object cell_get(object cell); object cell_get(object cell);

View file

@ -158,6 +158,28 @@ char **get_env_variables()
return env_variables; return env_variables;
} }
void pack_env_variables(void *data, object k)
{
char **env = env_variables;
object tail;
object head = NULL;
tail = head;
for (; *env != NULL; env++) {
char *e = *env;
make_string_noalloc(stmp, e, strlen(e));
make_pair(tmp, boolean_t, &stmp);
make_pair(p, &tmp, NULL);
if (head == NULL) {
tail = head = &p;
} else {
cdr(tail) = &p;
tail = &p;
}
}
return_closcall1(data, k, &head);
}
void set_env_variables(char **vars) void set_env_variables(char **vars)
{ {
env_variables = vars; env_variables = vars;

View file

@ -12,7 +12,7 @@
;exit - not needed because already defined as a primitive, at least for now ;exit - not needed because already defined as a primitive, at least for now
emergency-exit emergency-exit
get-environment-variable get-environment-variable
; TODO: get-environment-variables get-environment-variables
) )
(begin (begin
(define emergency-exit exit) (define emergency-exit exit)
@ -48,4 +48,8 @@
return_closcall1(data, k, &str); return_closcall1(data, k, &str);
} }
") ")
(define-c get-environment-variables
"(void *data, int argc, closure _, object k)"
"pack_env_variables(data, k);
")
)) ))