/*
- Copyright 2015 IoT.bzh
+ Copyright 2015, 2016 IoT.bzh
author: José Bollo <jose.bollo@iot.bzh>
/*
%% %
%a appid desc->appid
+%b bindings desc->bindings
%c content desc->content
%D datadir params->datadir
%H height desc->height
%I icondir FWK_ICON_DIR
%m mime-type desc->type
%n name desc->name
-%p plugins desc->plugins
%P port params->port
%r rootdir desc->path
%R readyfd params->readyfd
c = *p++;
switch (c) {
case 'a': v = desc->appid; break;
+ case 'b':
+ v = "" /*TODO:desc->bindings*/;
+ break;
case 'c': v = desc->content; break;
case 'D': v = params->datadir; break;
case 'H':
params->port);
v = port;
break;
- case 'p':
- v = "" /*TODO:desc->plugins*/;
- break;
case 'R':
if(!data)
sprintf(readyfd, "%d",
)
{
int rc;
- char **args;
+ char **args, **env;
pid_t pid;
int rpipe[2];
struct pollfd pfd;
/* instanciate the arguments */
params->readyfd = rpipe[1];
args = instantiate_arguments(exec->args, desc, params, 1).vector;
- if (args == NULL) {
+ env = instantiate_arguments((const char * const*)environ,
+ desc, params, 1).vector;
+ if (args == NULL || env == NULL) {
close(rpipe[0]);
close(rpipe[1]);
+ free(args);
+ free(env);
ERROR("out of memory in master");
errno = ENOMEM;
return -1;
close(rpipe[0]);
close(rpipe[1]);
free(args);
+ free(env);
ERROR("master fork failed: %m");
return -1;
}
close(rpipe[1]);
free(args);
+ free(env);
pfd.fd = rpipe[0];
pfd.events = POLLIN;
}
/* executes the process */
- rc = execve(args[0], args, environ);
+ rc = execve(args[0], args, env);
ERROR("failed to exec master %s: %m", args[0]);
_exit(1);
return -1;
else
groupid = (gid_t)-1;
+ /* reads the configuration file */
rc = read_configuration_file(FWK_LAUNCH_CONF);
/* dump_launchers(stderr); */
+
return rc;
}