Code Review
/
src
/
app-framework-main.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
afm-launch: add readyfd and improves typing
[src/app-framework-main.git]
/
src
/
afm-launch.c
diff --git
a/src/afm-launch.c
b/src/afm-launch.c
index
d5fb7ce
..
75bd4b0
100644
(file)
--- a/
src/afm-launch.c
+++ b/
src/afm-launch.c
@@
-43,20
+43,26
@@
struct type_list {
char type[1];
};
char type[1];
};
+struct exec_vector {
+ int has_readyfd;
+ const char **args;
+};
+
struct desc_list {
struct desc_list *next;
enum afm_launch_mode mode;
struct type_list *types;
struct desc_list {
struct desc_list *next;
enum afm_launch_mode mode;
struct type_list *types;
-
char **
execs[2];
+
struct exec_vector
execs[2];
};
struct launchparam {
int port;
};
struct launchparam {
int port;
+ int readyfd;
char **uri;
const char *secret;
const char *datadir;
char **uri;
const char *secret;
const char *datadir;
-
const char *
*master;
-
const char *
*slave;
+
struct exec_vector
*master;
+
struct exec_vector
*slave;
};
struct confread {
};
struct confread {
@@
-85,9
+91,9
@@
static void dump_launchers()
for (type = desc->types ; type != NULL ; type = type->next)
printf("%s\n", type->type);
for ( j = 0 ; j < 2 ; j++)
for (type = desc->types ; type != NULL ; type = type->next)
printf("%s\n", type->type);
for ( j = 0 ; j < 2 ; j++)
- if (desc->execs[j] != NULL) {
- for (k = 0 ; desc->execs[j][k] != NULL ; k++)
- printf(" %s", desc->execs[j][k]);
+ if (desc->execs[j]
.args
!= NULL) {
+ for (k = 0 ; desc->execs[j]
.args
[k] != NULL ; k++)
+ printf(" %s", desc->execs[j]
.args
[k]);
printf("\n");
}
printf("\n");
printf("\n");
}
printf("\n");
@@
-120,10
+126,11
@@
static int read_line(struct confread *cread)
return 0;
}
return 0;
}
-static char **read_vector(struct confread *cread)
+static c
onst c
har **read_vector(struct confread *cread)
{
int index0, length0;
{
int index0, length0;
- char **vector, *args;
+ const char **vector;
+ char *args;
int count, length;
/* record origin */
int count, length;
/* record origin */
@@
-242,11
+249,11
@@
static void free_type_list(struct type_list *types)
static int read_launchers(struct confread *cread)
{
static int read_launchers(struct confread *cread)
{
- int rc;
+ int rc
, has_readyfd
;
struct type_list *types, *lt;
struct desc_list *desc;
enum afm_launch_mode mode;
struct type_list *types, *lt;
struct desc_list *desc;
enum afm_launch_mode mode;
- char **vector;
+ c
onst c
har **vector;
/* reads the file */
lt = NULL;
/* reads the file */
lt = NULL;
@@
-299,6
+306,7
@@
static int read_launchers(struct confread *cread)
errno = EINVAL;
return -1;
} else {
errno = EINVAL;
return -1;
} else {
+ has_readyfd = NULL != strstr(&cread->buffer[cread->index], "%R");
vector = read_vector(cread);
if (vector == NULL) {
ERROR("%s:%d: out of memory",
vector = read_vector(cread);
if (vector == NULL) {
ERROR("%s:%d: out of memory",
@@
-320,12
+328,15
@@
static int read_launchers(struct confread *cread)
desc->next = launchers;
desc->mode = mode;
desc->types = types;
desc->next = launchers;
desc->mode = mode;
desc->types = types;
- desc->execs[0] = vector;
- desc->execs[1] = NULL;
+ desc->execs[0].has_readyfd = has_readyfd;
+ desc->execs[0].args = vector;
+ desc->execs[1].has_readyfd = 0;
+ desc->execs[1].args = NULL;
types = NULL;
launchers = desc;
} else {
types = NULL;
launchers = desc;
} else {
- desc->execs[1] = vector;
+ desc->execs[1].has_readyfd = has_readyfd;
+ desc->execs[1].args = vector;
desc = NULL;
}
}
desc = NULL;
}
}
@@
-363,21
+374,22
@@
static int read_configuration_file(const char *filepath)
}
/*
}
/*
-%I icondir FWK_ICON_DIR
-%P port params->port
-%S secret params->secret
-%D datadir params->datadir
-%r rootdir desc->path
-%h homedir desc->home
-%t tag (smack label) desc->tag
+%% %
%a appid desc->appid
%c content desc->content
%a appid desc->appid
%c content desc->content
+%D datadir params->datadir
+%H height desc->height
+%h homedir desc->home
+%I icondir FWK_ICON_DIR
%m mime-type desc->type
%n name desc->name
%p plugins desc->plugins
%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
+%S secret params->secret
+%t tag (smack label) desc->tag
%W width desc->width
%W width desc->width
-%H height desc->height
-%% %
*/
union arguments {
*/
union arguments {
@@
-386,14
+398,15
@@
union arguments {
};
static union arguments instantiate_arguments(
};
static union arguments instantiate_arguments(
- const char
*
*args,
+ const char
* const
*args,
struct afm_launch_desc *desc,
struct launchparam *params,
int wants_vector
)
{
struct afm_launch_desc *desc,
struct launchparam *params,
int wants_vector
)
{
- const char **iter, *p, *v;
- char *data, port[20], width[20], height[20], mini[3], c, sep;
+ const char * const *iter;
+ const char *p, *v;
+ char *data, port[20], width[20], height[20], readyfd[20], mini[3], c, sep;
int n, s;
union arguments result;
int n, s;
union arguments result;
@@
-424,32
+437,37
@@
static union arguments instantiate_arguments(
} else {
c = *p++;
switch (c) {
} else {
c = *p++;
switch (c) {
- case 'I': v = FWK_ICON_DIR; break;
- case 'S': v = params->secret; break;
- case 'D': v = params->datadir; break;
- case 'r': v = desc->path; break;
- case 'h': v = desc->home; break;
- case 't': v = desc->tag; break;
case 'a': v = desc->appid; break;
case 'c': v = desc->content; break;
case 'a': v = desc->appid; break;
case 'c': v = desc->content; break;
+ case 'D': v = params->datadir; break;
+ case 'H':
+ if(!data)
+ sprintf(height, "%d", desc->height);
+ v = height;
+ break;
+ case 'h': v = desc->home; break;
+ case 'I': v = FWK_ICON_DIR; break;
case 'm': v = desc->type; break;
case 'n': v = desc->name; break;
case 'm': v = desc->type; break;
case 'n': v = desc->name; break;
- case 'p': v = "" /*desc->plugins*/; break;
case 'P':
if(!data)
sprintf(port, "%d", params->port);
v = port;
break;
case 'P':
if(!data)
sprintf(port, "%d", params->port);
v = port;
break;
+ case 'p': v = "" /*desc->plugins*/; break;
+ case 'R':
+ if(!data)
+ sprintf(readyfd, "%d", params->readyfd);
+ v = readyfd;
+ break;
+ case 'r': v = desc->path; break;
+ case 'S': v = params->secret; break;
+ case 't': v = desc->tag; break;
case 'W':
if(!data)
sprintf(width, "%d", desc->width);
v = width;
break;
case 'W':
if(!data)
sprintf(width, "%d", desc->width);
v = width;
break;
- case 'H':
- if(!data)
- sprintf(height, "%d", desc->height);
- v = height;
- break;
case '%':
c = 0;
default:
case '%':
c = 0;
default:
@@
-564,7
+582,7
@@
static int launch_local_1(
_exit(1);
}
_exit(1);
}
- args = instantiate_arguments(params->master, desc, params, 1).vector;
+ args = instantiate_arguments(params->master
->args
, desc, params, 1).vector;
if (args == NULL) {
ERROR("out of memory in master");
}
if (args == NULL) {
ERROR("out of memory in master");
}
@@
-684,7
+702,7
@@
static int launch_local_2(
_exit(1);
}
_exit(1);
}
- args = instantiate_arguments(params->slave, desc, params, 1).vector;
+ args = instantiate_arguments(params->slave
->args
, desc, params, 1).vector;
if (args == NULL) {
ERROR("out of memory in slave");
}
if (args == NULL) {
ERROR("out of memory in slave");
}
@@
-697,7
+715,7
@@
static int launch_local_2(
/********* still in the master child ************/
close(spipe[1]);
/********* still in the master child ************/
close(spipe[1]);
- args = instantiate_arguments(params->master, desc, params, 1).vector;
+ args = instantiate_arguments(params->master
->args
, desc, params, 1).vector;
if (args == NULL) {
ERROR("out of memory in master");
}
if (args == NULL) {
ERROR("out of memory in master");
}
@@
-739,7
+757,7
@@
static int launch_remote(
if (params->slave == NULL)
uri = NULL;
else
if (params->slave == NULL)
uri = NULL;
else
- uri = instantiate_arguments(params->slave, desc, params, 0).scalar;
+ uri = instantiate_arguments(params->slave
->args
, desc, params, 0).scalar;
if (uri == NULL) {
ERROR("out of memory for remote uri");
errno = ENOMEM;
if (uri == NULL) {
ERROR("out of memory for remote uri");
errno = ENOMEM;
@@
-810,8
+828,8
@@
int afm_launch(struct afm_launch_desc *desc, pid_t children[2], char **uri)
params.port = mkport();
params.secret = secret;
params.datadir = datadir;
params.port = mkport();
params.secret = secret;
params.datadir = datadir;
- params.master =
(const char **)
dl->execs[0];
- params.slave =
(const char **)
dl->execs[1];
+ params.master =
&
dl->execs[0];
+ params.slave =
&
dl->execs[1];
switch (desc->mode) {
case mode_local:
switch (desc->mode) {
case mode_local: