ladishd: set env vars for use in commandlines
This commit is contained in:
parent
c7d0a6a479
commit
99b1ab0da4
|
@ -57,6 +57,7 @@ struct ladish_app_supervisor
|
||||||
char * name;
|
char * name;
|
||||||
char * opath;
|
char * opath;
|
||||||
char * dir;
|
char * dir;
|
||||||
|
char * project_name;
|
||||||
uint64_t version;
|
uint64_t version;
|
||||||
uint64_t next_id;
|
uint64_t next_id;
|
||||||
struct list_head applist;
|
struct list_head applist;
|
||||||
|
@ -99,6 +100,7 @@ ladish_app_supervisor_create(
|
||||||
}
|
}
|
||||||
|
|
||||||
supervisor_ptr->dir = NULL;
|
supervisor_ptr->dir = NULL;
|
||||||
|
supervisor_ptr->project_name = NULL;
|
||||||
|
|
||||||
supervisor_ptr->version = 0;
|
supervisor_ptr->version = 0;
|
||||||
supervisor_ptr->next_id = 1;
|
supervisor_ptr->next_id = 1;
|
||||||
|
@ -342,11 +344,11 @@ bool ladish_app_supervisor_clear(ladish_app_supervisor_handle supervisor_handle)
|
||||||
struct ladish_app * app_ptr;
|
struct ladish_app * app_ptr;
|
||||||
bool lifeless;
|
bool lifeless;
|
||||||
|
|
||||||
if (supervisor_ptr->dir != NULL)
|
free(supervisor_ptr->dir);
|
||||||
{
|
supervisor_ptr->dir = NULL;
|
||||||
free(supervisor_ptr->dir);
|
|
||||||
supervisor_ptr->dir = NULL;
|
free(supervisor_ptr->project_name);
|
||||||
}
|
supervisor_ptr->project_name = NULL;
|
||||||
|
|
||||||
lifeless = true;
|
lifeless = true;
|
||||||
|
|
||||||
|
@ -403,6 +405,33 @@ ladish_app_supervisor_set_directory(
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
ladish_app_supervisor_set_project_name(
|
||||||
|
ladish_app_supervisor_handle supervisor_handle,
|
||||||
|
const char * project_name)
|
||||||
|
{
|
||||||
|
char * dup;
|
||||||
|
|
||||||
|
if (project_name != NULL)
|
||||||
|
{
|
||||||
|
dup = strdup(project_name);
|
||||||
|
if (dup == NULL)
|
||||||
|
{
|
||||||
|
log_error("strdup(\"%s\") failed", project_name);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supervisor_ptr->project_name != NULL)
|
||||||
|
{
|
||||||
|
free(supervisor_ptr->project_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
supervisor_ptr->project_name = dup;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool ladish_app_supervisor_child_exit(ladish_app_supervisor_handle supervisor_handle, pid_t pid)
|
bool ladish_app_supervisor_child_exit(ladish_app_supervisor_handle supervisor_handle, pid_t pid)
|
||||||
{
|
{
|
||||||
struct list_head * node_ptr;
|
struct list_head * node_ptr;
|
||||||
|
@ -480,6 +509,7 @@ bool ladish_app_supervisor_start_app(ladish_app_supervisor_handle supervisor_han
|
||||||
|
|
||||||
if (!loader_execute(
|
if (!loader_execute(
|
||||||
supervisor_ptr->name,
|
supervisor_ptr->name,
|
||||||
|
supervisor_ptr->project_name,
|
||||||
app_ptr->name,
|
app_ptr->name,
|
||||||
supervisor_ptr->dir != NULL ? supervisor_ptr->dir : "/",
|
supervisor_ptr->dir != NULL ? supervisor_ptr->dir : "/",
|
||||||
app_ptr->terminal,
|
app_ptr->terminal,
|
||||||
|
|
|
@ -115,6 +115,7 @@ ladish_app_supervisor_destroy(
|
||||||
* Set the directory where apps will be started. If never called, apps will be started in the root directory ("/")
|
* Set the directory where apps will be started. If never called, apps will be started in the root directory ("/")
|
||||||
*
|
*
|
||||||
* @param[in] supervisor_handle supervisor object handle
|
* @param[in] supervisor_handle supervisor object handle
|
||||||
|
* @param[in] dir directory where apps will be started
|
||||||
*
|
*
|
||||||
* @return success status
|
* @return success status
|
||||||
*/
|
*/
|
||||||
|
@ -123,6 +124,19 @@ ladish_app_supervisor_set_directory(
|
||||||
ladish_app_supervisor_handle supervisor_handle,
|
ladish_app_supervisor_handle supervisor_handle,
|
||||||
const char * dir);
|
const char * dir);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set/reset the project name
|
||||||
|
*
|
||||||
|
* @param[in] supervisor_handle supervisor object handle
|
||||||
|
* @param[in] poject_name project name. NULL means that there is no project name.
|
||||||
|
*
|
||||||
|
* @return success status
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
ladish_app_supervisor_set_project_name(
|
||||||
|
ladish_app_supervisor_handle supervisor_handle,
|
||||||
|
const char * project_name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mark that app has quit
|
* Mark that app has quit
|
||||||
*
|
*
|
||||||
|
|
|
@ -944,6 +944,11 @@ static bool run(void * command_context)
|
||||||
|
|
||||||
ladish_recent_store_use_item(g_studios_recent_store, g_studio.name);
|
ladish_recent_store_use_item(g_studios_recent_store, g_studio.name);
|
||||||
|
|
||||||
|
if (!ladish_app_supervisor_set_project_name(ladish_studio_get_studio_app_supervisor(), g_studio.name))
|
||||||
|
{
|
||||||
|
ladish_app_supervisor_set_project_name(ladish_studio_get_studio_app_supervisor(), NULL);
|
||||||
|
}
|
||||||
|
|
||||||
ladish_studio_announce();
|
ladish_studio_announce();
|
||||||
|
|
||||||
cmd_ptr->command.state = LADISH_COMMAND_STATE_DONE;
|
cmd_ptr->command.state = LADISH_COMMAND_STATE_DONE;
|
||||||
|
|
|
@ -49,6 +49,7 @@ struct loader_child
|
||||||
|
|
||||||
char * vgraph_name;
|
char * vgraph_name;
|
||||||
char * app_name;
|
char * app_name;
|
||||||
|
char * project_name;
|
||||||
|
|
||||||
bool dead;
|
bool dead;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
|
@ -139,6 +140,7 @@ loader_childs_bury(void)
|
||||||
|
|
||||||
list_del(&child_ptr->siblings);
|
list_del(&child_ptr->siblings);
|
||||||
|
|
||||||
|
free(child_ptr->project_name);
|
||||||
free(child_ptr->vgraph_name);
|
free(child_ptr->vgraph_name);
|
||||||
free(child_ptr->app_name);
|
free(child_ptr->app_name);
|
||||||
|
|
||||||
|
@ -262,6 +264,7 @@ loader_exec_program(
|
||||||
const char * working_dir,
|
const char * working_dir,
|
||||||
bool run_in_terminal,
|
bool run_in_terminal,
|
||||||
const char * vgraph_name,
|
const char * vgraph_name,
|
||||||
|
const char * project_name,
|
||||||
const char * app_name)
|
const char * app_name)
|
||||||
{
|
{
|
||||||
const char * argv[8];
|
const char * argv[8];
|
||||||
|
@ -284,6 +287,14 @@ loader_exec_program(
|
||||||
log_error("Could not change directory to working dir '%s' for program '%s': %s", working_dir, argv[0], strerror(errno));
|
log_error("Could not change directory to working dir '%s' for program '%s': %s", working_dir, argv[0], strerror(errno));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setenv("LADISH_APP_NAME", app_name, true);
|
||||||
|
setenv("LADISH_VGRAPH_NAME", vgraph_name, true);
|
||||||
|
|
||||||
|
if (project_name != NULL)
|
||||||
|
{
|
||||||
|
setenv("LADISH_PROJECT_NAME", project_name, true);
|
||||||
|
}
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
if (run_in_terminal)
|
if (run_in_terminal)
|
||||||
|
@ -475,6 +486,7 @@ loader_run(void)
|
||||||
bool
|
bool
|
||||||
loader_execute(
|
loader_execute(
|
||||||
const char * vgraph_name,
|
const char * vgraph_name,
|
||||||
|
const char * project_name,
|
||||||
const char * app_name,
|
const char * app_name,
|
||||||
const char * working_dir,
|
const char * working_dir,
|
||||||
bool run_in_terminal,
|
bool run_in_terminal,
|
||||||
|
@ -499,11 +511,25 @@ loader_execute(
|
||||||
goto free_struct;
|
goto free_struct;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (project_name != NULL)
|
||||||
|
{
|
||||||
|
child_ptr->project_name = strdup(app_name);
|
||||||
|
if (child_ptr->project_name == NULL)
|
||||||
|
{
|
||||||
|
log_error("strdup() failed to duplicate project name '%s'", project_name);
|
||||||
|
goto free_vgraph_name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
child_ptr->project_name = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
child_ptr->app_name = strdup(app_name);
|
child_ptr->app_name = strdup(app_name);
|
||||||
if (child_ptr->app_name == NULL)
|
if (child_ptr->app_name == NULL)
|
||||||
{
|
{
|
||||||
log_error("strdup() failed to duplicate app name '%s'", app_name);
|
log_error("strdup() failed to duplicate app name '%s'", app_name);
|
||||||
goto free_vgraph_name;
|
goto free_project_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
child_ptr->dead = false;
|
child_ptr->dead = false;
|
||||||
|
@ -576,7 +602,7 @@ loader_execute(
|
||||||
|
|
||||||
putenv("LD_PRELOAD=libalsapid.so");
|
putenv("LD_PRELOAD=libalsapid.so");
|
||||||
|
|
||||||
loader_exec_program(commandline, working_dir, run_in_terminal, vgraph_name, app_name);
|
loader_exec_program(commandline, working_dir, run_in_terminal, vgraph_name, project_name, app_name);
|
||||||
|
|
||||||
return false; /* We should never get here */
|
return false; /* We should never get here */
|
||||||
}
|
}
|
||||||
|
@ -601,6 +627,9 @@ loader_execute(
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
free_project_name:
|
||||||
|
free(child_ptr->project_name);
|
||||||
|
|
||||||
free_vgraph_name:
|
free_vgraph_name:
|
||||||
free(child_ptr->vgraph_name);
|
free(child_ptr->vgraph_name);
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
/*
|
/*
|
||||||
* LADI Session Handler (ladish)
|
* LADI Session Handler (ladish)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2009 Nedko Arnaudov <nedko@arnaudov.name>
|
* Copyright (C) 2009, 2010 Nedko Arnaudov <nedko@arnaudov.name>
|
||||||
*
|
*
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
* This file contains interface to the code that starts programs
|
* This file contains interface to the code that starts programs
|
||||||
|
@ -31,6 +31,7 @@ void loader_init(void (* on_child_exit)(pid_t pid));
|
||||||
|
|
||||||
bool
|
bool
|
||||||
loader_execute(
|
loader_execute(
|
||||||
|
const char * vgraph_name,
|
||||||
const char * project_name,
|
const char * project_name,
|
||||||
const char * app_name,
|
const char * app_name,
|
||||||
const char * working_dir,
|
const char * working_dir,
|
||||||
|
|
|
@ -752,6 +752,11 @@ bool ladish_room_load_project(ladish_room_handle room_handle, const char * proje
|
||||||
/* ladish_graph_dump(room_ptr->graph); */
|
/* ladish_graph_dump(room_ptr->graph); */
|
||||||
|
|
||||||
ladish_app_supervisor_set_directory(room_ptr->app_supervisor, project_dir);
|
ladish_app_supervisor_set_directory(room_ptr->app_supervisor, project_dir);
|
||||||
|
if (!ladish_app_supervisor_set_project_name(room_ptr->app_supervisor, room_ptr->project_name))
|
||||||
|
{
|
||||||
|
ladish_app_supervisor_set_project_name(room_ptr->app_supervisor, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
ladish_graph_trick_dicts(room_ptr->graph);
|
ladish_graph_trick_dicts(room_ptr->graph);
|
||||||
ladish_try_connect_hidden_connections(room_ptr->graph);
|
ladish_try_connect_hidden_connections(room_ptr->graph);
|
||||||
ladish_app_supervisor_autorun(room_ptr->app_supervisor);
|
ladish_app_supervisor_autorun(room_ptr->app_supervisor);
|
||||||
|
|
Loading…
Reference in New Issue