Skip to content
Snippets Groups Projects
Commit 88655b4f authored by Eric Vidal's avatar Eric Vidal :speech_balloon:
Browse files

rename field deps to depends and ndeps to ndepends, add requiredby and...

rename field deps to depends and ndeps to ndepends, add requiredby and nrequiredby field. Change interface of service_resolve_sort_bytype. Add service_resolve_create_master function
parent e4cd0005
No related branches found
No related tags found
No related merge requests found
......@@ -53,7 +53,7 @@ enum visit_e
} ;
#define SERVICE_STRUCT 0
#define DATA_SERVICE 0
typedef struct resolve_service_s resolve_service_t, *resolve_service_t_ref ;
struct resolve_service_s
......@@ -68,7 +68,8 @@ struct resolve_service_s
uint32_t logreal ;
uint32_t logassoc ;
uint32_t dstlog ;
uint32_t deps ; // for module -> list of s6-rc service
uint32_t depends ; // for module -> list of s6-rc service
uint32_t requiredby ;
uint32_t optsdeps ; //optional dependencies
uint32_t extdeps ; //external dependencies
uint32_t contents ; // module -> list of s6-rc and s6 service
......@@ -87,14 +88,15 @@ struct resolve_service_s
uint32_t real_exec_finish ;
uint32_t type ;
uint32_t ndeps ;
uint32_t ndepends ;
uint32_t nrequiredby ;
uint32_t noptsdeps ;
uint32_t nextdeps ;
uint32_t ncontents ;
uint32_t down ;
uint32_t disen ;//disable->0,enable->1
} ;
#define RESOLVE_SERVICE_ZERO { 0,STRALLOC_ZERO,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
#define RESOLVE_SERVICE_ZERO { 0,STRALLOC_ZERO,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
typedef enum resolve_service_enum_e resolve_service_enum_t, *resolve_service_enum_t_ref;
enum resolve_service_enum_e
......@@ -106,7 +108,8 @@ enum resolve_service_enum_e
SERVICE_ENUM_LOGREAL,
SERVICE_ENUM_LOGASSOC,
SERVICE_ENUM_DSTLOG,
SERVICE_ENUM_DEPS,
SERVICE_ENUM_DEPENDS,
SERVICE_ENUM_REQUIREDBY,
SERVICE_ENUM_OPTSDEPS,
SERVICE_ENUM_EXTDEPS,
SERVICE_ENUM_CONTENTS,
......@@ -124,7 +127,8 @@ enum resolve_service_enum_e
SERVICE_ENUM_EXEC_FINISH,
SERVICE_ENUM_REAL_EXEC_FINISH,
SERVICE_ENUM_TYPE,
SERVICE_ENUM_NDEPS,
SERVICE_ENUM_NDEPENDS,
SERVICE_ENUM_NREQUIREDBY,
SERVICE_ENUM_NOPTSDEPS,
SERVICE_ENUM_NEXTDEPS,
SERVICE_ENUM_NCONTENTS,
......@@ -158,12 +162,13 @@ extern int service_intree(stralloc *svtree, char const *svname, char const *tree
extern int service_read_cdb(cdb *c, resolve_service_t *res) ;
extern int service_write_cdb(cdbmaker *c, resolve_service_t *sres) ;
extern int service_resolve_copy(resolve_service_t *dst, resolve_service_t *res) ;
extern int service_resolve_sort_bytype(genalloc *gares, stralloc *list, char const *src) ;
extern int service_resolve_sort_bytype(stralloc *list, char const *src) ;
extern int service_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *dst) ;
extern int service_resolve_setlognwrite(resolve_service_t *sv, char const *dst) ;
extern int service_resolve_create_master(char const *base, char const *treename) ;
extern int service_resolve_write_master(ssexec_t *info, ss_resolve_graph_t *graph, char const *dir, unsigned int reverse) ;
extern int service_resolve_modify_field(resolve_service_t *res, resolve_service_enum_t field, char const *data) ;
extern int service_resolve_field_to_sa(stralloc *sa, resolve_service_t *res, resolve_service_enum_t field) ;
extern int service_resolve_field_tosa(stralloc *sa, resolve_service_t *res, resolve_service_enum_t field) ;
/**
*
* obsolete function
......@@ -176,7 +181,7 @@ extern int service_resolve_add_logger(genalloc *ga,char const *src) ;
/** Graph function */
/** obsolete Graph function */
extern void ss_resolve_graph_ndeps_free(ss_resolve_graph_ndeps_t *graph) ;
extern void ss_resolve_graph_free(ss_resolve_graph_t *graph) ;
extern int ss_resolve_graph_src(ss_resolve_graph_t *graph, char const *dir, unsigned int reverse, unsigned int what) ;
......
......@@ -51,7 +51,7 @@ int service_isenabled(char const *sv)
stralloc sa = STRALLOC_ZERO ;
resolve_service_t res = RESOLVE_SERVICE_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(SERVICE_STRUCT, &res) ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ;
size_t newlen = 0, pos = 0 ;
int e = -1 ;
char const *exclude[3] = { SS_BACKUP + 1, SS_RESOLVE + 1, 0 } ;
......@@ -129,7 +129,7 @@ int service_isenabledat(stralloc *tree, char const *sv)
stralloc sa = STRALLOC_ZERO ;
resolve_service_t res = RESOLVE_SERVICE_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(SERVICE_STRUCT, &res) ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ;
size_t newlen = 0, pos = 0 ;
int e = -1 ;
char const *exclude[3] = { SS_BACKUP + 1, SS_RESOLVE + 1, 0 } ;
......@@ -442,7 +442,8 @@ resolve_service_field_table_t resolve_service_field_table[] = {
[SERVICE_ENUM_LOGREAL] = { .field = "logreal" },
[SERVICE_ENUM_LOGASSOC] = { .field = "logassoc" },
[SERVICE_ENUM_DSTLOG] = { .field = "dstlog" },
[SERVICE_ENUM_DEPS] = { .field = "deps" },
[SERVICE_ENUM_DEPENDS] = { .field = "depends" },
[SERVICE_ENUM_REQUIREDBY] = { .field = "requiredby" },
[SERVICE_ENUM_OPTSDEPS] = { .field = "optsdeps" },
[SERVICE_ENUM_EXTDEPS] = { .field = "extdeps" },
[SERVICE_ENUM_CONTENTS] = { .field = "contents" },
......@@ -460,7 +461,8 @@ resolve_service_field_table_t resolve_service_field_table[] = {
[SERVICE_ENUM_EXEC_FINISH] = { .field = "exec_finish" },
[SERVICE_ENUM_REAL_EXEC_FINISH] = { .field = "real_exec_finish" },
[SERVICE_ENUM_TYPE] = { .field = "type" },
[SERVICE_ENUM_NDEPS] = { .field = "ndeps" },
[SERVICE_ENUM_NDEPENDS] = { .field = "ndepends" },
[SERVICE_ENUM_NREQUIREDBY] = { .field = "nrequiredby" },
[SERVICE_ENUM_NOPTSDEPS] = { .field = "noptsdeps" },
[SERVICE_ENUM_NEXTDEPS] = { .field = "nextdeps" },
[SERVICE_ENUM_NCONTENTS] = { .field = "ncontents" },
......@@ -477,7 +479,7 @@ int service_read_cdb(cdb *c, resolve_service_t *res)
resolve_wrapper_t_ref wres ;
uint32_t x ;
wres = resolve_set_struct(SERVICE_STRUCT, res) ;
wres = resolve_set_struct(DATA_SERVICE, res) ;
/* name */
resolve_find_cdb(&tmp,c,"name") ;
......@@ -507,9 +509,13 @@ int service_read_cdb(cdb *c, resolve_service_t *res)
resolve_find_cdb(&tmp,c,"dstlog") ;
res->dstlog = tmp.len ? resolve_add_string(wres,tmp.s) : 0 ;
/* deps */
resolve_find_cdb(&tmp,c,"deps") ;
res->deps = tmp.len ? resolve_add_string(wres,tmp.s) : 0 ;
/* depends */
resolve_find_cdb(&tmp,c,"depends") ;
res->depends = tmp.len ? resolve_add_string(wres,tmp.s) : 0 ;
/* requiredby */
resolve_find_cdb(&tmp,c,"requiredby") ;
res->requiredby = tmp.len ? resolve_add_string(wres,tmp.s) : 0 ;
/* optsdeps */
resolve_find_cdb(&tmp,c,"optsdeps") ;
......@@ -579,9 +585,13 @@ int service_read_cdb(cdb *c, resolve_service_t *res)
x = resolve_find_cdb(&tmp,c,"type") ;
res->type = x ;
/* ndeps */
x = resolve_find_cdb(&tmp,c,"ndeps") ;
res->ndeps = x ;
/* ndepends */
x = resolve_find_cdb(&tmp,c,"ndepends") ;
res->ndepends = x ;
/* nrequiredby */
x = resolve_find_cdb(&tmp,c,"nrequiredby") ;
res->nrequiredby = x ;
/* noptsdeps */
x = resolve_find_cdb(&tmp,c,"noptsdeps") ;
......@@ -637,8 +647,11 @@ int service_write_cdb(cdbmaker *c, resolve_service_t *sres)
/* dstlog */
!resolve_add_cdb(c,"dstlog",str + sres->dstlog) ||
/* depends */
!resolve_add_cdb(c,"depends",str + sres->depends) ||
/* deps */
!resolve_add_cdb(c,"deps",str + sres->deps) ||
!resolve_add_cdb(c,"requiredby",str + sres->requiredby) ||
/* optsdeps */
!resolve_add_cdb(c,"optsdeps",str + sres->optsdeps) ||
......@@ -694,8 +707,11 @@ int service_write_cdb(cdbmaker *c, resolve_service_t *sres)
/* type */
!resolve_add_cdb_uint(c,"type",sres->type) ||
/* ndepends */
!resolve_add_cdb_uint(c,"ndepends",sres->ndepends) ||
/* ndeps */
!resolve_add_cdb_uint(c,"ndeps",sres->ndeps) ||
!resolve_add_cdb_uint(c,"ndeps",sres->nrequiredby) ||
/* noptsdeps */
!resolve_add_cdb_uint(c,"noptsdeps",sres->noptsdeps) ||
......@@ -735,7 +751,8 @@ int service_resolve_copy(resolve_service_t *dst, resolve_service_t *res)
dst->logreal = res->logreal ;
dst->logassoc = res->logassoc ;
dst->dstlog = res->dstlog ;
dst->deps = res->deps ;
dst->depends = res->depends ;
dst->requiredby = res->requiredby ;
dst->optsdeps = res->optsdeps ;
dst->extdeps = res->extdeps ;
dst->contents = res->contents ;
......@@ -753,7 +770,8 @@ int service_resolve_copy(resolve_service_t *dst, resolve_service_t *res)
dst->exec_finish = res->exec_finish ;
dst->real_exec_finish = res->real_exec_finish ;
dst->type = res->type ;
dst->ndeps = res->ndeps ;
dst->ndepends = res->ndepends ;
dst->nrequiredby = res->nrequiredby ;
dst->noptsdeps = res->noptsdeps ;
dst->nextdeps = res->nextdeps ;
dst->ncontents = res->ncontents ;
......@@ -763,49 +781,51 @@ int service_resolve_copy(resolve_service_t *dst, resolve_service_t *res)
return 1 ;
}
int service_resolve_sort_bytype(genalloc *gares, stralloc *list, char const *src)
int service_resolve_sort_bytype(stralloc *list, char const *src)
{
log_flow() ;
size_t pos = 0 ;
size_t pos = 0, len = list->len ;
int e = 0 ;
char tmp[len + 1] ;
sastr_to_char(tmp, list) ;
resolve_service_t res = RESOLVE_SERVICE_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(SERVICE_STRUCT, &res) ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ;
size_t classic_list = 0, module_list = 0 ;
FOREACH_SASTR(list, pos) {
list->len = 0 ;
char *name = list->s + pos ;
for (; pos < len ; pos += strlen(tmp + pos) + 1) {
resolve_service_t cp = RESOLVE_SERVICE_ZERO ;
size_t nlen = strlen(tmp + pos) + 1 ;
char *name = tmp + pos ;
if (!resolve_read(wres, src, name))
log_warnu_return(LOG_EXIT_ZERO,"read resolve file of: ", src, name) ;
if (!service_resolve_copy(&cp, &res))
goto err ;
switch (res.type) {
case TYPE_CLASSIC:
if (!genalloc_insertb(resolve_service_t, gares, 0, &cp, 1))
if (!stralloc_insertb(list, 0, name, strlen(name) + 1))
goto err ;
classic_list++ ;
classic_list += nlen ;
module_list = classic_list ;
break ;
case TYPE_MODULE:
if (!genalloc_insertb(resolve_service_t, gares, classic_list, &cp, 1))
if (!stralloc_insertb(list, classic_list, name, strlen(name) + 1))
goto err ;
module_list++ ;
module_list += nlen ;
break ;
......@@ -813,7 +833,7 @@ int service_resolve_sort_bytype(genalloc *gares, stralloc *list, char const *src
case TYPE_LONGRUN:
case TYPE_ONESHOT:
if (!genalloc_insertb(resolve_service_t, gares, module_list, &cp, 1))
if (!stralloc_insertb(list, module_list, name, strlen(name) + 1))
goto err ;
break ;
......@@ -918,7 +938,7 @@ int service_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *
ss_state_t sta = STATE_ZERO ;
resolve_service_t res = RESOLVE_SERVICE_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(SERVICE_STRUCT, &res) ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ;
resolve_init(wres) ;
......@@ -975,7 +995,7 @@ int service_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *
}
}
res.ndeps = services->cname.nga ;
res.ndepends = services->cname.nga ;
res.noptsdeps = services->cname.nopts ;
res.nextdeps = services->cname.next ;
res.ncontents = services->cname.ncontents ;
......@@ -1023,9 +1043,9 @@ int service_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *
}
}
if (res.ndeps)
if (res.ndepends)
{
id = services->cname.idga, nid = res.ndeps ;
id = services->cname.idga, nid = res.ndepends ;
for (;nid; id += strlen(deps.s + id) + 1, nid--) {
if (!stralloc_catb(&ndeps,deps.s + id,strlen(deps.s + id)) ||
......@@ -1041,7 +1061,7 @@ int service_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *
goto err ;
}
res.deps = resolve_add_string(wres,ndeps.s) ;
res.depends = resolve_add_string(wres,ndeps.s) ;
}
if (res.noptsdeps)
......@@ -1162,15 +1182,15 @@ int service_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *
goto err ;
}
res.deps = resolve_add_string(wres,ndeps.s) ;
res.depends = resolve_add_string(wres,ndeps.s) ;
if (res.type == TYPE_CLASSIC) {
res.ndeps = 1 ;
res.ndepends = 1 ;
} else if (res.type == TYPE_LONGRUN) {
res.ndeps += 1 ;
res.ndepends += 1 ;
}
if (services->type.classic_longrun.log.run.exec >= 0)
......@@ -1210,7 +1230,7 @@ int service_resolve_setlognwrite(resolve_service_t *sv, char const *dst)
ss_state_t sta = STATE_ZERO ;
resolve_service_t res = RESOLVE_SERVICE_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(SERVICE_STRUCT, &res) ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ;
resolve_init(wres) ;
......@@ -1232,7 +1252,7 @@ int service_resolve_setlognwrite(resolve_service_t *sv, char const *dst)
res.type = sv->type ;
res.name = resolve_add_string(wres,str + sv->logger) ;
res.description = resolve_add_string(wres,descrip) ;
res.description = resolve_add_string(wres,str + sv->description) ;
res.version = resolve_add_string(wres,str + sv->version) ;
res.logreal = resolve_add_string(wres,str + sv->logreal) ;
res.logassoc = resolve_add_string(wres,str + sv->name) ;
......@@ -1291,7 +1311,7 @@ int service_resolve_modify_field(resolve_service_t *res, resolve_service_enum_t
uint32_t ifield ;
int e = 0 ;
resolve_wrapper_t_ref wres = resolve_set_struct(SERVICE_STRUCT, res) ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, res) ;
switch(field) {
......@@ -1323,8 +1343,12 @@ int service_resolve_modify_field(resolve_service_t *res, resolve_service_enum_t
res->dstlog = resolve_add_string(wres,data) ;
break ;
case SERVICE_ENUM_DEPS:
res->deps = resolve_add_string(wres,data) ;
case SERVICE_ENUM_DEPENDS:
res->depends = resolve_add_string(wres,data) ;
break ;
case SERVICE_ENUM_REQUIREDBY:
res->requiredby = resolve_add_string(wres,data) ;
break ;
case SERVICE_ENUM_OPTSDEPS:
......@@ -1396,9 +1420,14 @@ int service_resolve_modify_field(resolve_service_t *res, resolve_service_enum_t
res->type = ifield ;
break ;
case SERVICE_ENUM_NDEPS:
case SERVICE_ENUM_NDEPENDS:
if (!uint0_scan(data, &ifield)) goto err ;
res->ndepends = ifield ;
break ;
case SERVICE_ENUM_NREQUIREDBY:
if (!uint0_scan(data, &ifield)) goto err ;
res->ndeps = ifield ;
res->nrequiredby = ifield ;
break ;
case SERVICE_ENUM_NOPTSDEPS:
......@@ -1474,8 +1503,12 @@ int service_resolve_field_to_sa(stralloc *sa, resolve_service_t *res, resolve_se
ifield = res->dstlog ;
break ;
case SERVICE_ENUM_DEPS:
ifield = res->deps ;
case SERVICE_ENUM_DEPENDS:
ifield = res->depends ;
break ;
case SERVICE_ENUM_REQUIREDBY:
ifield = res->requiredby ;
break ;
case SERVICE_ENUM_OPTSDEPS:
......@@ -1546,8 +1579,12 @@ int service_resolve_field_to_sa(stralloc *sa, resolve_service_t *res, resolve_se
ifield = res->type ;
break ;
case SERVICE_ENUM_NDEPS:
ifield = res->ndeps ;
case SERVICE_ENUM_NDEPENDS:
ifield = res->ndepends ;
break ;
case SERVICE_ENUM_NREQUIREDBY:
ifield = res->nrequiredby ;
break ;
case SERVICE_ENUM_NOPTSDEPS:
......@@ -1587,28 +1624,28 @@ int service_resolve_add_deps(genalloc *tokeep, resolve_service_t *res, char cons
int e = 0 ;
size_t pos = 0 ;
stralloc tmp = STRALLOC_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(SERVICE_STRUCT, res) ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, res) ;
char *name = res->sa.s + res->name ;
char *deps = res->sa.s + res->deps ;
if (!resolve_cmp(tokeep, name, SERVICE_STRUCT) && (!obstr_equal(name,SS_MASTER+1)))
char *deps = res->sa.s + res->depends ;
if (!resolve_cmp(tokeep, name, DATA_SERVICE) && (!obstr_equal(name,SS_MASTER+1)))
if (!resolve_append(tokeep,wres)) goto err ;
if (res->ndeps)
if (res->ndepends)
{
if (!sastr_clean_string(&tmp,deps)) return 0 ;
for (;pos < tmp.len ; pos += strlen(tmp.s + pos) + 1)
{
resolve_service_t dres = RESOLVE_SERVICE_ZERO ;
resolve_wrapper_t_ref dwres = resolve_set_struct(SERVICE_STRUCT, &dres) ;
resolve_wrapper_t_ref dwres = resolve_set_struct(DATA_SERVICE, &dres) ;
char *dname = tmp.s + pos ;
if (!resolve_check(src,dname)) goto err ;
if (!resolve_read(dwres,src,dname)) goto err ;
if (dres.ndeps && !resolve_cmp(tokeep, dname, SERVICE_STRUCT))
if (dres.ndepends && !resolve_cmp(tokeep, dname, DATA_SERVICE))
{
if (!service_resolve_add_deps(tokeep,&dres,src)) goto err ;
}
if (!resolve_cmp(tokeep, dname, SERVICE_STRUCT))
if (!resolve_cmp(tokeep, dname, DATA_SERVICE))
{
if (!resolve_append(tokeep,dwres)) goto err ;
}
......@@ -1632,7 +1669,7 @@ int service_resolve_add_rdeps(genalloc *tokeep, resolve_service_t *res, char con
stralloc tmp = STRALLOC_ZERO ;
stralloc nsv = STRALLOC_ZERO ;
ss_state_t sta = STATE_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(SERVICE_STRUCT, res) ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, res) ;
char const *exclude[2] = { SS_MASTER + 1, 0 } ;
char *name = res->sa.s + res->name ;
......@@ -1647,23 +1684,23 @@ int service_resolve_add_rdeps(genalloc *tokeep, resolve_service_t *res, char con
if (!sastr_dir_get(&nsv,s,exclude,S_IFREG)) goto err ;
if (!resolve_cmp(tokeep, name, SERVICE_STRUCT) && (!obstr_equal(name,SS_MASTER+1)))
if (!resolve_cmp(tokeep, name, DATA_SERVICE) && (!obstr_equal(name,SS_MASTER+1)))
{
if (!resolve_append(tokeep,wres)) goto err ;
}
if ((res->type == TYPE_BUNDLE || res->type == TYPE_MODULE) && res->ndeps)
if ((res->type == TYPE_BUNDLE || res->type == TYPE_MODULE) && res->ndepends)
{
uint32_t deps = res->type == TYPE_MODULE ? res->contents : res->deps ;
uint32_t deps = res->type == TYPE_MODULE ? res->contents : res->depends ;
if (!sastr_clean_string(&tmp,res->sa.s + deps)) goto err ;
resolve_service_t dres = RESOLVE_SERVICE_ZERO ;
resolve_wrapper_t_ref dwres = resolve_set_struct(SERVICE_STRUCT, &dres) ;
resolve_wrapper_t_ref dwres = resolve_set_struct(DATA_SERVICE, &dres) ;
for (; a < tmp.len ; a += strlen(tmp.s + a) + 1)
{
char *name = tmp.s + a ;
if (!resolve_check(src,name)) goto err ;
if (!resolve_read(dwres,src,name)) goto err ;
if (dres.type == TYPE_CLASSIC) continue ;
if (!resolve_cmp(tokeep, name, SERVICE_STRUCT))
if (!resolve_cmp(tokeep, name, DATA_SERVICE))
{
if (!resolve_append(tokeep,dwres)) goto err ;
if (!service_resolve_add_rdeps(tokeep,&dres,src)) goto err ;
......@@ -1676,7 +1713,7 @@ int service_resolve_add_rdeps(genalloc *tokeep, resolve_service_t *res, char con
int dtype = 0 ;
tmp.len = 0 ;
resolve_service_t dres = RESOLVE_SERVICE_ZERO ;
resolve_wrapper_t_ref dwres = resolve_set_struct(SERVICE_STRUCT, &dres) ;
resolve_wrapper_t_ref dwres = resolve_set_struct(DATA_SERVICE, &dres) ;
char *dname = nsv.s + b ;
if (obstr_equal(name,dname)) { resolve_free(wres) ; continue ; }
if (!resolve_check(src,dname)) goto err ;
......@@ -1691,13 +1728,13 @@ int service_resolve_add_rdeps(genalloc *tokeep, resolve_service_t *res, char con
if (dtype != type || (!dres.disen && !sta.unsupervise)){ resolve_free(dwres) ; continue ; }
}
else if (dtype != type || (!dres.disen)){ resolve_free(dwres) ; continue ; }
if (dres.type == TYPE_BUNDLE && !dres.ndeps){ resolve_free(dwres) ; continue ; }
if (dres.type == TYPE_BUNDLE && !dres.ndepends){ resolve_free(dwres) ; continue ; }
if (!resolve_cmp(tokeep, dname, SERVICE_STRUCT))
if (!resolve_cmp(tokeep, dname, DATA_SERVICE))
{
if (dres.ndeps)// || (dres.type == TYPE_BUNDLE && dres.ndeps) || )
if (dres.ndepends)// || (dres.type == TYPE_BUNDLE && dres.ndepends) || )
{
if (!sastr_clean_string(&tmp,dres.sa.s + dres.deps)) goto err ;
if (!sastr_clean_string(&tmp,dres.sa.s + dres.depends)) goto err ;
/** we must check every service inside the module to not add as
* rdeps a service declared inside the module.
* eg.
......@@ -1743,14 +1780,14 @@ int service_resolve_add_logger(genalloc *ga,char const *src)
for (; i < genalloc_len(resolve_service_t,ga) ; i++)
{
resolve_service_t res = RESOLVE_SERVICE_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(SERVICE_STRUCT, &res) ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ;
resolve_service_t dres = RESOLVE_SERVICE_ZERO ;
resolve_wrapper_t_ref dwres = resolve_set_struct(SERVICE_STRUCT, &dres) ;
resolve_wrapper_t_ref dwres = resolve_set_struct(DATA_SERVICE, &dres) ;
if (!service_resolve_copy(&res,&genalloc_s(resolve_service_t,ga)[i])) goto err ;
char *string = res.sa.s ;
char *name = string + res.name ;
if (!resolve_cmp(&gatmp, name, SERVICE_STRUCT))
if (!resolve_cmp(&gatmp, name, DATA_SERVICE))
{
if (!resolve_append(&gatmp,wres))
goto err ;
......@@ -1760,21 +1797,53 @@ int service_resolve_add_logger(genalloc *ga,char const *src)
if (!resolve_check(src,string + res.logger)) goto err ;
if (!resolve_read(dwres,src,string + res.logger))
goto err ;
if (!resolve_cmp(&gatmp, string + res.logger, SERVICE_STRUCT))
if (!resolve_cmp(&gatmp, string + res.logger, DATA_SERVICE))
if (!resolve_append(&gatmp,dwres)) goto err ;
}
}
resolve_free(wres) ;
resolve_free(dwres) ;
}
resolve_deep_free(SERVICE_STRUCT, ga) ;
resolve_deep_free(DATA_SERVICE, ga) ;
if (!genalloc_copy(resolve_service_t,ga,&gatmp)) goto err ;
e = 1 ;
err:
genalloc_free(resolve_service_t,&gatmp) ;
resolve_deep_free(SERVICE_STRUCT, &gatmp) ;
resolve_deep_free(DATA_SERVICE, &gatmp) ;
return e ;
}
int service_resolve_create_master(char const *base, char const *treename)
{
int e = 0 ;
size_t baselen = strlen(base), treelen = strlen(treename) ;
resolve_service_t res = RESOLVE_SERVICE_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ;
char dst[baselen + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN + 1] ;
auto_strings(dst, base, SS_SYSTEM, "/", treename) ;
resolve_init(wres) ;
res.name = resolve_add_string(wres, SS_MASTER + 1) ;
res.description = resolve_add_string(wres, "inner bundle - do not use it") ;
res.tree = resolve_add_string(wres, dst) ;
res.treename = resolve_add_string(wres, treename) ;
res.type = TYPE_BUNDLE ;
res.disen = 1 ;
auto_strings(dst + baselen + SS_SYSTEM_LEN + 1 + treelen, SS_SVDIRS) ;
log_trace("write resolve file of inner bundle") ;
if (!resolve_write(wres, dst, SS_MASTER + 1))
goto err ;
e = 1 ;
err:
resolve_free(wres) ;
return e ;
}
......@@ -1792,7 +1861,7 @@ int service_resolve_write_master(ssexec_t *info, ss_resolve_graph_t *graph,char
stralloc inres = STRALLOC_ZERO ;
stralloc gain = STRALLOC_ZERO ;
resolve_service_t res = RESOLVE_SERVICE_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(SERVICE_STRUCT, &res) ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ;
size_t dirlen = strlen(dir) ;
......@@ -1853,8 +1922,8 @@ int service_resolve_write_master(ssexec_t *info, ss_resolve_graph_t *graph,char
res.tree = resolve_add_string(wres,info->tree.s) ;
res.live = resolve_add_string(wres,info->live.s) ;
res.type = TYPE_BUNDLE ;
res.deps = resolve_add_string(wres,inres.s) ;
res.ndeps = genalloc_len(resolve_service_t,&graph->sorted) ;
res.depends = resolve_add_string(wres,inres.s) ;
res.ndepends = genalloc_len(resolve_service_t,&graph->sorted) ;
res.runat = resolve_add_string(wres,runat) ;
res.state = resolve_add_string(wres,state) ;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment