aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs6rc/s6rc_servicedir_copy_online.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2020-11-30 13:08:04 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2020-11-30 13:08:04 +0000
commitba3bcbb86ea0177349bcd021559347248d6ab10a (patch)
tree23d8be4d59a1639ebea301fb2caf39b8b1ed0e27 /src/libs6rc/s6rc_servicedir_copy_online.c
parent79cb9644f99f056641f4c145da6e7ca63b333b80 (diff)
downloads6-rc-ba3bcbb86ea0177349bcd021559347248d6ab10a.tar.gz
Stash temporary changes. Does not build; is not intended to.
Diffstat (limited to 'src/libs6rc/s6rc_servicedir_copy_online.c')
-rw-r--r--src/libs6rc/s6rc_servicedir_copy_online.c80
1 files changed, 0 insertions, 80 deletions
diff --git a/src/libs6rc/s6rc_servicedir_copy_online.c b/src/libs6rc/s6rc_servicedir_copy_online.c
deleted file mode 100644
index e676d5a..0000000
--- a/src/libs6rc/s6rc_servicedir_copy_online.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* ISC license. */
-
-#include <sys/stat.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <skalibs/djbunix.h>
-#include <s6-rc/s6rc-utils.h>
-#include "s6rc-servicedir-internal.h"
-#include <s6-rc/s6rc-servicedir.h>
-
-int s6rc_servicedir_copy_online (char const *src, char const *dst)
-{
- size_t srclen = strlen(src) ;
- size_t dstlen = strlen(dst) ;
- unsigned int n ;
- unsigned int i = 0 ;
- int wantup = 0 ;
- int e ;
- char srcfn[srclen + s6rc_servicedir_file_maxlen + 6] ;
- char dstfn[dstlen + s6rc_servicedir_file_maxlen + 6] ;
- char oldfn[dstlen + s6rc_servicedir_file_maxlen + 6] ;
- memcpy(srcfn, src, srclen) ;
- srcfn[srclen] = '/' ;
- memcpy(dstfn, dst, dstlen + 1) ;
- memcpy(oldfn, dst, dstlen) ;
- memcpy(oldfn + dstlen, "/old", 5) ;
- if (rm_rf(oldfn) < 0 && errno != ENOENT) return 0 ;
- if (mkdir(oldfn, 0755) < 0) return 0 ;
- dstfn[dstlen] = '/' ;
- oldfn[dstlen + 4] = '/' ;
- wantup = s6rc_servicedir_block(dst) ;
- if (wantup < 0) { e = errno ; goto errdir ; }
-
- for (; s6rc_servicedir_file_list[i].name ; i++)
- {
- strcpy(dstfn + dstlen + 1, s6rc_servicedir_file_list[i].name) ;
- strcpy(oldfn + dstlen + 5, s6rc_servicedir_file_list[i].name) ;
- if (rename(dstfn, oldfn) < 0
- && (errno != ENOENT || s6rc_servicedir_file_list[i].options & SVFILE_MANDATORY))
- {
- e = errno ;
- goto errrename ;
- }
- }
- n = i ;
- while (i--)
- {
- if (!s6rc_servicedir_copy_one(src, dst, s6rc_servicedir_file_list + i))
- {
- e = errno ;
- goto errremove ;
- }
- }
- oldfn[dstlen + 4] = 0 ;
- rm_rf(oldfn) ;
- s6rc_servicedir_unblock(dst, wantup) ;
- return 1 ;
-
- errremove:
- for (; i < n ; i++)
- {
- strcpy(dstfn + dstlen + 1, s6rc_servicedir_file_list[i].name) ;
- rm_rf(dstfn) ;
- }
- i = n ;
- errrename:
- while (i--)
- {
- strcpy(dstfn + dstlen + 1, s6rc_servicedir_file_list[i].name) ;
- strcpy(oldfn + dstlen + 5, s6rc_servicedir_file_list[i].name) ;
- rename(oldfn, dstfn) ;
- }
- errdir:
- oldfn[dstlen + 4] = 0 ;
- rmdir(oldfn) ;
- errno = e ;
- return 0 ;
-}