ladishd: set env vars for use in commandlines

This commit is contained in:
Nedko Arnaudov 2010-11-18 02:59:06 +02:00
parent c7d0a6a479
commit 99b1ab0da4
6 changed files with 92 additions and 8 deletions

View File

@ -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,

View File

@ -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
* *

View File

@ -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;

View File

@ -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);

View File

@ -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,

View File

@ -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);