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