mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-12 23:37:38 +02:00
WIP for get-environment-variables
This commit is contained in:
parent
0c1b36602b
commit
6bd21b422c
3 changed files with 28 additions and 1 deletions
|
@ -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);
|
||||
|
|
22
runtime.c
22
runtime.c
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
")
|
||||
))
|
||||
|
|
Loading…
Add table
Reference in a new issue