mirror of
https://github.com/pygos/init.git
synced 2024-12-22 15:20:49 +01:00
Don't split dependencies into argument vector, keep list of strings
Signed-off-by: David Oberhollenzer <david.oberhollenzer@tele2.at>
This commit is contained in:
parent
4ee0ea9754
commit
71d98c150f
5 changed files with 44 additions and 38 deletions
|
@ -62,14 +62,11 @@ typedef struct service_t {
|
|||
/* linked list of command lines to execute */
|
||||
exec_t *exec;
|
||||
|
||||
/* NULL terminated array of services that must be executed later */
|
||||
char **before;
|
||||
char *before; /* services that must be executed later */
|
||||
char *after; /* services that must be executed first */
|
||||
|
||||
/* NULL terminated array of services that must be executed first */
|
||||
char **after;
|
||||
|
||||
char *raw_before; /* backing store for 'before' contents */
|
||||
char *raw_after; /* backing store for 'after' contents */
|
||||
int num_before;
|
||||
int num_after;
|
||||
|
||||
pid_t pid;
|
||||
int status; /* process exit status */
|
||||
|
|
|
@ -34,9 +34,6 @@ void delsvc(service_t *svc)
|
|||
free(e);
|
||||
}
|
||||
|
||||
free(svc->raw_before);
|
||||
free(svc->raw_after);
|
||||
|
||||
free(svc->before);
|
||||
free(svc->after);
|
||||
free(svc->desc);
|
||||
|
|
|
@ -122,14 +122,17 @@ static int svc_before(service_t *svc, char *arg, rdline_t *rd)
|
|||
return -1;
|
||||
}
|
||||
|
||||
svc->raw_before = try_strdup(arg, rd);
|
||||
if (svc->raw_before == NULL)
|
||||
return -1;
|
||||
|
||||
svc->before = try_split_argv(svc->raw_before, rd);
|
||||
svc->before = try_strdup(arg, rd);
|
||||
if (svc->before == NULL)
|
||||
return -1;
|
||||
|
||||
svc->num_before = pack_argv(svc->before);
|
||||
if (svc->num_before < 0) {
|
||||
fprintf(stderr, "%s: %zu: malformed string constant\n",
|
||||
rd->filename, rd->lineno);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -141,14 +144,17 @@ static int svc_after(service_t *svc, char *arg, rdline_t *rd)
|
|||
return -1;
|
||||
}
|
||||
|
||||
svc->raw_after = try_strdup(arg, rd);
|
||||
if (svc->raw_after == NULL)
|
||||
return -1;
|
||||
|
||||
svc->after = try_split_argv(svc->raw_after, rd);
|
||||
svc->after = try_strdup(arg, rd);
|
||||
if (svc->after == NULL)
|
||||
return -1;
|
||||
|
||||
svc->num_after = pack_argv(svc->after);
|
||||
if (svc->num_after < 0) {
|
||||
fprintf(stderr, "%s: %zu: malformed string constant\n",
|
||||
rd->filename, rd->lineno);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -24,21 +24,20 @@
|
|||
|
||||
static bool has_dependencies(service_t *list, service_t *svc)
|
||||
{
|
||||
size_t i;
|
||||
const char *ptr;
|
||||
int i;
|
||||
|
||||
while (list != NULL) {
|
||||
if (svc->after != NULL) {
|
||||
for (i = 0; svc->after[i] != NULL; ++i) {
|
||||
if (!strcmp(svc->after[i], list->name))
|
||||
return true;
|
||||
}
|
||||
for (ptr = svc->after, i = 0; i < svc->num_after; ++i) {
|
||||
if (!strcmp(ptr, list->name))
|
||||
return true;
|
||||
ptr += strlen(ptr) + 1;
|
||||
}
|
||||
|
||||
if (list->before != NULL) {
|
||||
for (i = 0; list->before[i] != NULL; ++i) {
|
||||
if (!strcmp(list->before[i], svc->name))
|
||||
return true;
|
||||
}
|
||||
for (ptr = list->before, i = 0; i < list->num_before; ++i) {
|
||||
if (!strcmp(ptr, svc->name))
|
||||
return true;
|
||||
ptr += strlen(ptr) + 1;
|
||||
}
|
||||
|
||||
list = list->next;
|
||||
|
|
|
@ -21,7 +21,8 @@
|
|||
|
||||
static void print_services(service_t *svc)
|
||||
{
|
||||
size_t i;
|
||||
const char *ptr;
|
||||
int i;
|
||||
|
||||
for (; svc != NULL; svc = svc->next) {
|
||||
printf("Name: %s\n", svc->name);
|
||||
|
@ -32,18 +33,24 @@ static void print_services(service_t *svc)
|
|||
if (svc->type == SVC_RESPAWN && svc->rspwn_limit > 0)
|
||||
printf("\tRespawn limit: %d\n", svc->rspwn_limit);
|
||||
|
||||
if (svc->before != NULL) {
|
||||
ptr = svc->before;
|
||||
if (ptr != NULL && svc->num_before > 0) {
|
||||
fputs("\tMust be run before:\n", stdout);
|
||||
|
||||
for (i = 0; svc->before[i] != NULL; ++i)
|
||||
printf("\t\t%s\n", svc->before[i]);
|
||||
for (i = 0; i < svc->num_before; ++i) {
|
||||
printf("\t\t%s\n", ptr);
|
||||
ptr += strlen(ptr) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (svc->after != NULL) {
|
||||
ptr = svc->after;
|
||||
if (ptr != NULL && svc->num_after > 0) {
|
||||
fputs("\tMust be run after:\n", stdout);
|
||||
|
||||
for (i = 0; svc->after[i] != NULL; ++i)
|
||||
printf("\t\t%s\n", svc->after[i]);
|
||||
for (i = 0; i < svc->num_after; ++i) {
|
||||
printf("\t\t%s\n", ptr);
|
||||
ptr += strlen(ptr) + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue