aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs6rc/s6rc_lock.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs6rc/s6rc_lock.c')
-rw-r--r--src/libs6rc/s6rc_lock.c60
1 files changed, 0 insertions, 60 deletions
diff --git a/src/libs6rc/s6rc_lock.c b/src/libs6rc/s6rc_lock.c
deleted file mode 100644
index d3ae2b5..0000000
--- a/src/libs6rc/s6rc_lock.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* ISC license. */
-
-#include <string.h>
-#include <errno.h>
-#include <skalibs/djbunix.h>
-#include <s6-rc/s6rc-utils.h>
-
-static inline int lockex (int fd, int blocking)
-{
- return blocking ? lock_ex(fd) : lock_exnb(fd) ;
-}
-
-static inline int locksh (int fd, int blocking)
-{
- return blocking ? lock_sh(fd) : lock_shnb(fd) ;
-}
-
-int s6rc_lock (char const *live, int lwhat, int *llfd, char const *compiled, int cwhat, int *ccfd, int blocking)
-{
- int lfd = -1, cfd = -1 ;
-
- if (lwhat)
- {
- size_t llen = strlen(live) ;
- char lfn[llen + 6] ;
- memcpy(lfn, live, llen) ;
- memcpy(lfn + llen, "/lock", 6) ;
- lfd = open_create(lfn) ;
- if (lfd < 0) return 0 ;
- if (coe(lfd) < 0) goto lerr ;
- if ((lwhat > 1 ? lockex(lfd, blocking) : locksh(lfd, blocking)) < 0) goto lerr ;
- }
-
- if (cwhat)
- {
- size_t clen = strlen(compiled) ;
- char cfn[clen + 6] ;
- memcpy(cfn, compiled, clen) ;
- memcpy(cfn + clen, "/lock", 6) ;
- cfd = open_create(cfn) ;
- if (cfd < 0)
- if (cwhat > 1 || errno != EROFS) goto lerr ;
- else cfd = -errno ;
- else
- {
- if (coe(cfd) < 0) goto cerr ;
- if ((cwhat > 1 ? lockex(cfd, blocking) : locksh(cfd, blocking)) < 0) goto cerr ;
- }
- }
-
- if (lwhat) *llfd = lfd ;
- if (cwhat) *ccfd = cfd ;
- return 1 ;
-
- cerr:
- fd_close(cfd) ;
- lerr:
- if (lwhat) fd_close(lfd) ;
- return 0 ;
-}