From 29d7e53019c0c10eec8bd4b7d584a97fe8d491fa Mon Sep 17 00:00:00 2001 From: obarun <eric@obarun.org> Date: Mon, 1 Apr 2019 17:40:45 +1100 Subject: [PATCH] ss_resolve_rmfile pass to void,check state file --- src/lib66/resolve.c | 84 ++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 51 deletions(-) diff --git a/src/lib66/resolve.c b/src/lib66/resolve.c index 2f74e85f..9d7f5eb8 100644 --- a/src/lib66/resolve.c +++ b/src/lib66/resolve.c @@ -40,6 +40,17 @@ #include <s6/s6-supervise.h> +void ss_resolve_free(ss_resolve_t *res) +{ + stralloc_free(&res->sa) ; +} + +void ss_resolve_init(ss_resolve_t *res) +{ + res->sa.len = 0 ; + ss_resolve_add_string(res,"") ; +} + int ss_resolve_pointo(stralloc *sa,ssexec_t *info,unsigned int type, unsigned int where) { stralloc tmp = STRALLOC_ZERO ; @@ -216,7 +227,7 @@ int ss_resolve_src(genalloc *ga, stralloc *sasrc, char const *name, char const * return -1 ; } -void ss_resolve_rmfile(ss_resolve_t *res, char const *src,char const *name) +void ss_resolve_rmfile(char const *src,char const *name) { size_t srclen = strlen(src) ; size_t namelen = strlen(name) ; @@ -376,17 +387,6 @@ int ss_resolve_read(ss_resolve_t *res, char const *src, char const *name) return 0 ; } -void ss_resolve_free(ss_resolve_t *res) -{ - stralloc_free(&res->sa) ; -} - -void ss_resolve_init(ss_resolve_t *res) -{ - res->sa.len = 0 ; - ss_resolve_add_string(res,"") ; -} - int ss_resolve_check_insrc(ssexec_t *info, char const *name) { stralloc sares = STRALLOC_ZERO ; @@ -417,8 +417,6 @@ int ss_resolve_check(char const *src, char const *name) int ss_resolve_setlognwrite(ss_resolve_t *sv, char const *dst,ssexec_t *info) { - int r ; - if (!sv->logger) return 1 ; ss_state_t sta = STATE_ZERO ; @@ -441,14 +439,6 @@ int ss_resolve_setlognwrite(ss_resolve_t *sv, char const *dst,ssexec_t *info) }else memcpy(live + runlen,"/log",4) ; live[runlen + 4] = 0 ; - size_t reslen = strlen(string + sv->state) ; - size_t loglen = strlen(string + sv->logger) ; - char tmp[reslen + 1 + loglen + 1] ; - memcpy(tmp,string + sv->state,reslen) ; - tmp[reslen] = '/' ; - memcpy(tmp + reslen + 1,string + sv->logger,loglen) ; - tmp[reslen + 1 + loglen] = 0 ; - res.name = ss_resolve_add_string(&res,string + sv->logger) ; res.description = ss_resolve_add_string(&res,descrip) ; res.logreal = ss_resolve_add_string(&res,string + sv->logreal) ; @@ -464,22 +454,14 @@ int ss_resolve_setlognwrite(ss_resolve_t *sv, char const *dst,ssexec_t *info) res.down = sv->down ; res.disen = sv->disen ; - r = scan_mode(tmp,S_IFREG) ; - if (r < 0) { VERBO1 strerr_warnwu2sys("conflicting format: ",tmp) ; goto err ; } - if (r) + if (ss_state_check(string + sv->state,string + sv->logger)) { - ss_state_setflag(&sta,SS_FLAGS_RELOAD,SS_FLAGS_TRUE) ; + if (!ss_state_read(&sta,string + sv->state,string + sv->logger)) { VERBO1 strerr_warnwu2sys("read state file of: ",string + sv->logger) ; goto err ; } + if (!sta.init) + ss_state_setflag(&sta,SS_FLAGS_RELOAD,SS_FLAGS_TRUE) ; ss_state_setflag(&sta,SS_FLAGS_INIT,SS_FLAGS_FALSE) ; ss_state_setflag(&sta,SS_FLAGS_UNSUPERVISE,SS_FLAGS_FALSE) ; - if (!ss_state_write(&sta,res.sa.s + res.state,res.sa.s + res.name)){ VERBO1 strerr_warnwu2sys("write state file of: ",res.sa.s + res.name) ; goto err ; } - } - else - { - if (!ss_resolve_create_live(info)){ VERBO1 strerr_diefu1sys(111,"create live state") ; goto err ; } - ss_state_setflag(&sta,SS_FLAGS_RELOAD,SS_FLAGS_FALSE) ; - ss_state_setflag(&sta,SS_FLAGS_INIT,SS_FLAGS_INIT) ; - ss_state_setflag(&sta,SS_FLAGS_UNSUPERVISE,SS_FLAGS_FALSE) ; - if (!ss_state_write(&sta,res.sa.s + res.state,res.sa.s + res.name)){ VERBO1 strerr_warnwu2sys("write state file of: ",res.sa.s + res.name) ; goto err ; } + if (!ss_state_write(&sta,string + sv->state,string + sv->logger)){ VERBO1 strerr_warnwu2sys("write state file of: ",string + sv->logger) ; goto err ; } } if (!ss_resolve_write(&res,dst,res.sa.s + res.name)) @@ -563,26 +545,17 @@ int ss_resolve_setnwrite(sv_alltype *services, ssexec_t *info, char const *dst) stmp[info->livetree.len + 1 + info->treename.len + SS_SVDIRS_LEN + 1 + namelen] = 0 ; res.runat = ss_resolve_add_string(&res,stmp) ; } - state[livelen + SS_STATE_LEN + 1 + ownerlen + 1 + info->treename.len] = '/' ; - memcpy(state + livelen + SS_STATE_LEN + 1 + ownerlen + 1 + info->treename.len + 1,name,namelen) ; - state[livelen + SS_STATE_LEN + 1 + ownerlen + 1 + info->treename.len + 1 + namelen] = 0 ; - r = scan_mode(state,S_IFREG) ; - if (r < 0) { VERBO1 strerr_warnwu2sys("conflicting format: ",state) ; goto err ; } - if (r) + + if (ss_state_check(state,name)) { - ss_state_setflag(&sta,SS_FLAGS_RELOAD,SS_FLAGS_TRUE) ; + if (!ss_state_read(&sta,state,name)) { VERBO1 strerr_warnwu2sys("read state file of: ",name) ; goto err ; } + if (!sta.init) + ss_state_setflag(&sta,SS_FLAGS_RELOAD,SS_FLAGS_TRUE) ; ss_state_setflag(&sta,SS_FLAGS_INIT,SS_FLAGS_FALSE) ; ss_state_setflag(&sta,SS_FLAGS_UNSUPERVISE,SS_FLAGS_FALSE) ; if (!ss_state_write(&sta,res.sa.s + res.state,name)){ VERBO1 strerr_warnwu2sys("write state file of: ",name) ; goto err ; } } - else - { - if (!ss_resolve_create_live(info)){ VERBO1 strerr_diefu1sys(111,"create live state") ; goto err ; } - ss_state_setflag(&sta,SS_FLAGS_RELOAD,SS_FLAGS_FALSE) ; - ss_state_setflag(&sta,SS_FLAGS_INIT,SS_FLAGS_INIT) ; - ss_state_setflag(&sta,SS_FLAGS_UNSUPERVISE,SS_FLAGS_FALSE) ; - if (!ss_state_write(&sta,res.sa.s + res.state,name)){ VERBO1 strerr_warnwu2sys("write state file of: ",name) ; goto err ; } - } + if (res.ndeps) { @@ -775,6 +748,7 @@ int ss_resolve_add_rdeps(genalloc *tokeep, ss_resolve_t *res, char const *src) int type ; genalloc tmp = GENALLOC_ZERO ; genalloc nsv = GENALLOC_ZERO ; + ss_state_t sta = STATE_ZERO ; char *name = res->sa.s + res->name ; size_t srclen = strlen(src) ; @@ -816,10 +790,18 @@ int ss_resolve_add_rdeps(genalloc *tokeep, ss_resolve_t *res, char const *src) char *dname = gaistr(&nsv,i) ; if (obstr_equal(name,dname)) { ss_resolve_free(&dres) ; continue ; } if (!ss_resolve_check(src,dname)) goto err ; + if (!ss_resolve_read(&dres,src,dname)) goto err ; + if (dres.type == CLASSIC) dtype = 0 ; else dtype = 1 ; - if (dtype != type || (!dres.disen)){ ss_resolve_free(&dres) ; continue ; } + + if (ss_state_check(dres.sa.s + dres.state,dname)) + { + if (!ss_state_read(&sta,dres.sa.s + dres.state,dname)) goto err ; + if (dtype != type || (!dres.disen && !sta.unsupervise)){ ss_resolve_free(&dres) ; continue ; } + } + else if (dtype != type || (!dres.disen)){ ss_resolve_free(&dres) ; continue ; } if (dres.type == BUNDLE && !dres.ndeps){ ss_resolve_free(&dres) ; continue ; } if (!ss_resolve_cmp(tokeep,dname)) { -- GitLab