From 1b5f8d6eca397126536298bfc4e567a2c3b2412f Mon Sep 17 00:00:00 2001 From: obarun <eric@obarun.org> Date: Mon, 5 Nov 2018 14:07:47 +1100 Subject: [PATCH] 66-enable,66-disable: remove dir_cmpndel --- src/66/66-disable.c | 34 +++++++++++++++++++++++----------- src/66/66-enable.c | 30 +++++++++++++++++++++--------- 2 files changed, 44 insertions(+), 20 deletions(-) diff --git a/src/66/66-disable.c b/src/66/66-disable.c index fc3a0d6a..abf40b6b 100644 --- a/src/66/66-disable.c +++ b/src/66/66-disable.c @@ -585,19 +585,31 @@ int main(int argc, char const *const *argv,char const *const *envp) /** resolve */ memcpy(svdir + svdirlen,SS_RESOLVE,SS_RESOLVE_LEN) ; svdir[svdirlen + SS_RESOLVE_LEN] = 0 ; - size_t workdirlen = workdir.len - 1; - char srcresolve[workdirlen + SS_RESOLVE_LEN + 1] ; - memcpy(srcresolve,workdir.s,workdirlen) ; - memcpy(srcresolve + workdirlen,SS_RESOLVE,SS_RESOLVE_LEN) ; - srcresolve[workdirlen + SS_RESOLVE_LEN] = 0 ; - - if (!dir_cmpndel(srcresolve,svdir,"")) + + if (rm_rf(svdir) < 0) { + if (!resolve_pointo(&saresolve,base.s,live.s,tree.s,treename,0,SS_RESOLVE_SRC)) + strerr_diefu1x(111,"set revolve pointer to source") ; + saresolve.len--; + if (!stralloc_cats(&saresolve,SS_RESOLVE)) retstralloc(111,"main") ; + if (!stralloc_0(&saresolve)) retstralloc(111,"main") ; + + if (!resolve_pointo(&swap,base.s,live.s,tree.s,treename,0,SS_RESOLVE_BACK)) + strerr_diefu1x(111,"set revolve pointer to source") ; + swap.len--; + if (!stralloc_cats(&swap,SS_RESOLVE)) retstralloc(111,"main") ; + if (!stralloc_0(&swap)) retstralloc(111,"main") ; + if (!hiercopy(swap.s,saresolve.s)) + { + cleanup(workdir.s) ; + strerr_diefu4sys(111,"to copy tree: ",saresolve.s," to ", swap.s) ; + } cleanup(workdir.s) ; - strerr_diefu4sys(111,"compare resolve directory: ",srcresolve," to: ",svdir) ; - } + strerr_diefu2sys(111,"remove directory: ", svdir) ; + } + svdir[svdirlen] = 0 ; - + if (!hiercopy(workdir.s,svdir)) { if (!resolve_pointo(&saresolve,base.s,live.s,tree.s,treename,0,SS_RESOLVE_SRC)) @@ -618,7 +630,7 @@ int main(int argc, char const *const *argv,char const *const *envp) cleanup(workdir.s) ; strerr_diefu4sys(111,"to copy tree: ",workdir.s," to ", svdir) ; } - + cleanup(workdir.s) ; stralloc_free(&base) ; diff --git a/src/66/66-enable.c b/src/66/66-enable.c index c638cfd7..33c22bbd 100644 --- a/src/66/66-enable.c +++ b/src/66/66-enable.c @@ -426,17 +426,29 @@ int main(int argc, char const *const *argv,char const *const *envp) /** resolve */ memcpy(svdir + svdirlen,SS_RESOLVE,SS_RESOLVE_LEN) ; svdir[svdirlen + SS_RESOLVE_LEN] = 0 ; - size_t workdirlen = workdir.len - 1; - char srcresolve[workdirlen + SS_RESOLVE_LEN + 1] ; - memcpy(srcresolve,workdir.s,workdirlen) ; - memcpy(srcresolve + workdirlen,SS_RESOLVE,SS_RESOLVE_LEN) ; - srcresolve[workdirlen + SS_RESOLVE_LEN] = 0 ; - - if (!dir_cmpndel(srcresolve,svdir,"")) + + if (rm_rf(svdir) < 0) { + if (!resolve_pointo(&saresolve,base.s,live.s,tree.s,treename,0,SS_RESOLVE_SRC)) + strerr_diefu1x(111,"set revolve pointer to source") ; + saresolve.len--; + if (!stralloc_cats(&saresolve,SS_RESOLVE)) retstralloc(111,"main") ; + if (!stralloc_0(&saresolve)) retstralloc(111,"main") ; + + if (!resolve_pointo(&swap,base.s,live.s,tree.s,treename,0,SS_RESOLVE_BACK)) + strerr_diefu1x(111,"set revolve pointer to source") ; + swap.len--; + if (!stralloc_cats(&swap,SS_RESOLVE)) retstralloc(111,"main") ; + if (!stralloc_0(&swap)) retstralloc(111,"main") ; + if (!hiercopy(swap.s,saresolve.s)) + { + cleanup(workdir.s) ; + strerr_diefu4sys(111,"to copy tree: ",saresolve.s," to ", swap.s) ; + } cleanup(workdir.s) ; - strerr_diefu4sys(111,"compare resolve directory: ",srcresolve," to: ",svdir) ; - } + strerr_diefu2sys(111,"remove directory: ", svdir) ; + } + svdir[svdirlen] = 0 ; if (!hiercopy(workdir.s,svdir)) -- GitLab