summaryrefslogtreecommitdiff
path: root/src/launchpad.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/launchpad.c')
-rwxr-xr-xsrc/launchpad.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/launchpad.c b/src/launchpad.c
index aaaeee6..a481a2f 100755
--- a/src/launchpad.c
+++ b/src/launchpad.c
@@ -59,6 +59,7 @@ typedef struct {
guint source;
guint timer;
char *loader_path;
+ char *loader_extra;
} candidate_process_context_t;
typedef struct {
@@ -68,7 +69,7 @@ typedef struct {
} loader_context_t;
static GList *candidate_slot_list;
-static candidate_process_context_t* __add_slot(int type, int loader_id, int caller_pid, const char *loader_path);
+static candidate_process_context_t* __add_slot(int type, int loader_id, int caller_pid, const char *loader_path, const char *extra);
static int __remove_slot(int type, int loader_id);
static int __add_default_slots();
@@ -378,7 +379,7 @@ static int __prepare_candidate_process(int type, int loader_id)
int pid;
char type_str[2] = {0, };
char loader_id_str[10] = {0, };
- char *argv[] = {NULL, NULL, NULL, NULL};
+ char *argv[] = {NULL, NULL, NULL, NULL, NULL};
candidate_process_context_t* cpt = __find_slot(type, loader_id);
if (cpt == NULL)
@@ -394,6 +395,7 @@ static int __prepare_candidate_process(int type, int loader_id)
argv[0] = cpt->loader_path;
argv[1] = type_str;
argv[2] = loader_id_str;
+ argv[3] = cpt->loader_extra;
if (execv(argv[0], argv) < 0)
_E("Failed to prepare candidate_process");
else
@@ -831,15 +833,17 @@ static int __dispatch_cmd_add_loader(bundle *kb)
{
const char *add_slot_str = NULL;
const char *caller_pid = NULL;
+ const char *extra;
int lid;
_W("cmd add loader");
add_slot_str = bundle_get_val(kb, AUL_K_LOADER_PATH);
caller_pid = bundle_get_val(kb, AUL_K_CALLER_PID);
+ extra = bundle_get_val(kb, AUL_K_LOADER_EXTRA);
if (add_slot_str && caller_pid) {
lid = __make_loader_id();
- candidate_process_context_t *cpc = __add_slot(LAUNCHPAD_TYPE_DYNAMIC, lid, atoi(caller_pid), add_slot_str);
+ candidate_process_context_t *cpc = __add_slot(LAUNCHPAD_TYPE_DYNAMIC, lid, atoi(caller_pid), add_slot_str, extra);
if (cpc)
cpc->timer = g_timeout_add(2000, __handle_preparing_candidate_process, cpc);
@@ -1010,7 +1014,7 @@ end:
return G_SOURCE_CONTINUE;
}
-static candidate_process_context_t* __add_slot(int type, int loader_id, int caller_pid, const char *loader_path)
+static candidate_process_context_t* __add_slot(int type, int loader_id, int caller_pid, const char *loader_path, const char *loader_extra)
{
candidate_process_context_t *cpc;
int fd = -1;
@@ -1032,6 +1036,7 @@ static candidate_process_context_t* __add_slot(int type, int loader_id, int call
cpc->source = 0;
cpc->timer = 0;
cpc->loader_path = strdup(loader_path);
+ cpc->loader_extra = loader_extra ? strdup(loader_extra) : NULL;
fd = __listen_candidate_process(cpc->type, cpc->loader_id);
if (fd == -1) {
@@ -1070,6 +1075,9 @@ static int __remove_slot(int type, int loader_id)
candidate_slot_list = g_list_remove_link(candidate_slot_list, iter);
free(cpc->loader_path);
+ if (cpc->loader_extra)
+ free(cpc->loader_extra);
+
free(cpc);
return 0;
}
@@ -1118,23 +1126,23 @@ static int __init_sigchild_fd(void)
static int __add_default_slots()
{
- if (__add_slot(LAUNCHPAD_TYPE_COMMON, PAD_LOADER_ID_STATIC, 0, LOADER_PATH_DEFAULT) == NULL)
+ if (__add_slot(LAUNCHPAD_TYPE_COMMON, PAD_LOADER_ID_STATIC, 0, LOADER_PATH_DEFAULT, NULL) == NULL)
return -1;
if (__prepare_candidate_process(LAUNCHPAD_TYPE_COMMON, PAD_LOADER_ID_STATIC) != 0)
return -1;
- if (__add_slot(LAUNCHPAD_TYPE_SW, PAD_LOADER_ID_STATIC, 0, LOADER_PATH_DEFAULT) == NULL)
+ if (__add_slot(LAUNCHPAD_TYPE_SW, PAD_LOADER_ID_STATIC, 0, LOADER_PATH_DEFAULT, NULL) == NULL)
return -1;
if (__prepare_candidate_process(LAUNCHPAD_TYPE_SW, PAD_LOADER_ID_STATIC) != 0)
return -1;
- if (__add_slot(LAUNCHPAD_TYPE_HW, PAD_LOADER_ID_STATIC, 0, LOADER_PATH_DEFAULT) == NULL)
+ if (__add_slot(LAUNCHPAD_TYPE_HW, PAD_LOADER_ID_STATIC, 0, LOADER_PATH_DEFAULT, NULL) == NULL)
return -1;
if (__prepare_candidate_process(LAUNCHPAD_TYPE_HW, PAD_LOADER_ID_STATIC) != 0)
return -1;
if (access(LOADER_PATH_WRT, F_OK | X_OK) == 0) {
- if (__add_slot(LAUNCHPAD_TYPE_WRT, PAD_LOADER_ID_STATIC, 0, LOADER_PATH_WRT) == NULL)
+ if (__add_slot(LAUNCHPAD_TYPE_WRT, PAD_LOADER_ID_STATIC, 0, LOADER_PATH_WRT, NULL) == NULL)
return -1;
if (__prepare_candidate_process(LAUNCHPAD_TYPE_WRT, PAD_LOADER_ID_STATIC) != 0)
return -1;