Skip to content
Snippets Groups Projects
Commit c4da9deb authored by Olivier Dion's avatar Olivier Dion
Browse files

agent: Use scm_schell() for execution of the agent

Change-Id: Ief1fd8fc1058f77784260d5be7a116d13ce06480
parent 8468af34
No related branches found
No related tags found
No related merge requests found
...@@ -31,7 +31,7 @@ stage, Guile must be already available. ...@@ -31,7 +31,7 @@ stage, Guile must be already available.
cd daemon cd daemon
./configure --enable-agent # you can other options if needed such as --enable-debug ./configure --enable-agent # you can other options if needed such as --enable-debug
cd test/agent cd test/agent
make agent make check
``` ```
# Running the agent # Running the agent
......
...@@ -32,50 +32,30 @@ ...@@ -32,50 +32,30 @@
/* std */ /* std */
#include <fstream> #include <fstream>
/* Guile helpers */ static void
fini()
static SCM
main_body(void* path_raw)
{ {
const char* path = (const char*)path_raw; Agent::instance().fini();
DRing::fini();
if (0 == strcmp("-", path)) {
scm_c_primitive_load("/dev/stdin");
} else {
scm_c_primitive_load(path);
}
return SCM_UNDEFINED;
} }
static SCM struct args {
main_catch(void* nil, SCM key_sym, SCM rest_lst) int argc;
{ char** argv;
(void) nil; };
SCM fmt_str = scm_from_utf8_string("Guile exception `~a`: ~a");
SCM args_lst = scm_list_2(key_sym, rest_lst);
SCM to_print_str = scm_simple_format(SCM_BOOL_F, fmt_str, args_lst);
char* to_print_raw = scm_to_locale_string(to_print_str);
AGENT_ERR("%s\n", to_print_raw);
free(to_print_raw);
return SCM_UNDEFINED;
}
void* void*
main_inner(void* agent_config_raw) /* In Guile context */ main_inner(void* args_raw) /* In Guile context */
{ {
struct args* args = (struct args*)args_raw;
install_scheme_primitives(); install_scheme_primitives();
Agent::instance().init(); Agent::instance().init();
scm_internal_catch(SCM_BOOL_T, main_body, agent_config_raw, main_catch, nullptr); atexit(fini);
Agent::instance().fini(); scm_shell(args->argc, args->argv);
return nullptr; return nullptr;
} }
...@@ -91,12 +71,15 @@ main(int argc, char* argv[]) ...@@ -91,12 +71,15 @@ main(int argc, char* argv[])
setenv("GUILE_LOAD_PATH", ".", 1); setenv("GUILE_LOAD_PATH", ".", 1);
/* NOTE! It's very important to initialize the daemon before entering Guile!!! */ /* NOTE! It's very important to initialize the daemon before entering Guile!!! */
DRing::init(DRing::InitFlag(DRing::DRING_FLAG_DEBUG | DRing::DRING_FLAG_CONSOLE_LOG)); DRing::init(DRing::InitFlag(DRing::DRING_FLAG_DEBUG));
AGENT_ASSERT(DRing::start(""), "Failed to start daemon"); AGENT_ASSERT(DRing::start(""), "Failed to start daemon");
/* Entering guile context */ struct args args;
scm_with_guile(main_inner, argv[1]);
DRing::fini(); args.argc = argc;
args.argv = argv;
/* Entering guile context */
scm_with_guile(main_inner, (void*)&args);
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment