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;
char **get_env_variables();
void pack_env_variables(void *data, object k);
void set_env_variables(char **vars);
object cell_get(object cell);

View file

@ -158,6 +158,28 @@ char **get_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)
{
env_variables = vars;

View file

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