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 * opath;
|
||||
char * dir;
|
||||
char * project_name;
|
||||
uint64_t version;
|
||||
uint64_t next_id;
|
||||
struct list_head applist;
|
||||
|
@ -99,6 +100,7 @@ ladish_app_supervisor_create(
|
|||
}
|
||||
|
||||
supervisor_ptr->dir = NULL;
|
||||
supervisor_ptr->project_name = NULL;
|
||||
|
||||
supervisor_ptr->version = 0;
|
||||
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;
|
||||
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;
|
||||
|
||||
|
@ -403,6 +405,33 @@ ladish_app_supervisor_set_directory(
|
|||
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)
|
||||
{
|
||||
struct list_head * node_ptr;
|
||||
|
@ -480,6 +509,7 @@ bool ladish_app_supervisor_start_app(ladish_app_supervisor_handle supervisor_han
|
|||
|
||||
if (!loader_execute(
|
||||
supervisor_ptr->name,
|
||||
supervisor_ptr->project_name,
|
||||
app_ptr->name,
|
||||
supervisor_ptr->dir != NULL ? supervisor_ptr->dir : "/",
|
||||
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 ("/")
|
||||
*
|
||||
* @param[in] supervisor_handle supervisor object handle
|
||||
* @param[in] dir directory where apps will be started
|
||||
*
|
||||
* @return success status
|
||||
*/
|
||||
|
@ -123,6 +124,19 @@ ladish_app_supervisor_set_directory(
|
|||
ladish_app_supervisor_handle supervisor_handle,
|
||||
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
|
||||
*
|
||||
|
|
|
@ -944,6 +944,11 @@ static bool run(void * command_context)
|
|||
|
||||
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();
|
||||
|
||||
cmd_ptr->command.state = LADISH_COMMAND_STATE_DONE;
|
||||
|
|
|
@ -49,6 +49,7 @@ struct loader_child
|
|||
|
||||
char * vgraph_name;
|
||||
char * app_name;
|
||||
char * project_name;
|
||||
|
||||
bool dead;
|
||||
pid_t pid;
|
||||
|
@ -139,6 +140,7 @@ loader_childs_bury(void)
|
|||
|
||||
list_del(&child_ptr->siblings);
|
||||
|
||||
free(child_ptr->project_name);
|
||||
free(child_ptr->vgraph_name);
|
||||
free(child_ptr->app_name);
|
||||
|
||||
|
@ -262,6 +264,7 @@ loader_exec_program(
|
|||
const char * working_dir,
|
||||
bool run_in_terminal,
|
||||
const char * vgraph_name,
|
||||
const char * project_name,
|
||||
const char * app_name)
|
||||
{
|
||||
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));
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
if (run_in_terminal)
|
||||
|
@ -475,6 +486,7 @@ loader_run(void)
|
|||
bool
|
||||
loader_execute(
|
||||
const char * vgraph_name,
|
||||
const char * project_name,
|
||||
const char * app_name,
|
||||
const char * working_dir,
|
||||
bool run_in_terminal,
|
||||
|
@ -499,11 +511,25 @@ loader_execute(
|
|||
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);
|
||||
if (child_ptr->app_name == NULL)
|
||||
{
|
||||
log_error("strdup() failed to duplicate app name '%s'", app_name);
|
||||
goto free_vgraph_name;
|
||||
goto free_project_name;
|
||||
}
|
||||
|
||||
child_ptr->dead = false;
|
||||
|
@ -576,7 +602,7 @@ loader_execute(
|
|||
|
||||
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 */
|
||||
}
|
||||
|
@ -601,6 +627,9 @@ loader_execute(
|
|||
|
||||
return true;
|
||||
|
||||
free_project_name:
|
||||
free(child_ptr->project_name);
|
||||
|
||||
free_vgraph_name:
|
||||
free(child_ptr->vgraph_name);
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
/*
|
||||
* 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
|
||||
|
@ -31,6 +31,7 @@ void loader_init(void (* on_child_exit)(pid_t pid));
|
|||
|
||||
bool
|
||||
loader_execute(
|
||||
const char * vgraph_name,
|
||||
const char * project_name,
|
||||
const char * app_name,
|
||||
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_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_try_connect_hidden_connections(room_ptr->graph);
|
||||
ladish_app_supervisor_autorun(room_ptr->app_supervisor);
|
||||
|
|
Loading…
Reference in New Issue