From 9ecc3c73cac545337043a411e1bdc9740045187d Mon Sep 17 00:00:00 2001 From: obarun <eric@obarun.org> Date: Tue, 12 Mar 2019 19:49:48 +1100 Subject: [PATCH] be clean with heap memory --- src/lib66/ssexec_disable.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/lib66/ssexec_disable.c b/src/lib66/ssexec_disable.c index d411733f..50dc51f1 100644 --- a/src/lib66/ssexec_disable.c +++ b/src/lib66/ssexec_disable.c @@ -56,23 +56,30 @@ int svc_remove(genalloc *tostop,ss_resolve_t *res, char const *src,ssexec_t *inf unsigned int i = 0 ; genalloc rdeps = GENALLOC_ZERO ; stralloc dst = STRALLOC_ZERO ; + ss_resolve_t cp = RESOLVE_ZERO ; size_t newlen ; - char *name = res->sa.s + res->name ; + if (!ss_resolve_copy(&cp,res)) + { + VERBO1 strerr_warnwu1sys("copy resolve file") ; + goto err ; + } if (!stralloc_cats(&dst,src)) goto err ; - if (res->type == CLASSIC) + if (cp.type == CLASSIC) { if (!stralloc_cats(&dst,SS_SVC)) goto err ; } else if (!stralloc_cats(&dst,SS_DB SS_SRC)) retstralloc(0,"remove_sv") ; if (!stralloc_cats(&dst,"/")) goto err ; newlen = dst.len ; - - if (!ss_resolve_add_rdeps(&rdeps,res,info)) + + if (!ss_resolve_add_rdeps(&rdeps,&cp,info)) { VERBO1 strerr_warnwu2sys("resolve recursive dependencies of: ",name) ; goto err ; } + ss_resolve_free(&cp) ; + if (!ss_resolve_add_logger(&rdeps,info)) { VERBO1 strerr_warnwu1sys("resolve logger") ; @@ -106,13 +113,16 @@ int svc_remove(genalloc *tostop,ss_resolve_t *res, char const *src,ssexec_t *inf goto err ; } if (!ss_resolve_cmp(tostop,name)) - if (!genalloc_append(ss_resolve_t,tostop,pres)) goto err ; + if (!ss_resolve_append(tostop,pres)) goto err ; } - + + genalloc_deepfree(ss_resolve_t,&rdeps,ss_resolve_free) ; stralloc_free(&dst) ; return 1 ; err: + ss_resolve_free(&cp) ; + genalloc_deepfree(ss_resolve_t,&rdeps,ss_resolve_free) ; stralloc_free(&dst) ; return 0 ; } @@ -164,7 +174,6 @@ int ssexec_disable(int argc, char const *const *argv,char const *const *envp,sse cleanup(workdir.s) ; strerr_dief1x(110,"nice try peon") ; } - ss_resolve_init(&res) ; logname = get_rstrlen_until(name,SS_LOG_SUFFIX) ; if (logname > 0) { @@ -185,6 +194,7 @@ int ssexec_disable(int argc, char const *const *argv,char const *const *envp,sse if (!res.disen) { VERBO1 strerr_warni2x(name,": is already disabled") ; + ss_resolve_free(&res) ; continue ; } if (!svc_remove(&tostop,&res,workdir.s,info)) @@ -194,6 +204,7 @@ int ssexec_disable(int argc, char const *const *argv,char const *const *envp,sse } if (res.type == CLASSIC) nclassic++ ; else nlongrun++ ; + ss_resolve_free(&res) ; } if (nclassic) -- GitLab