diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-10-22 22:05:56 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2025-10-22 22:05:56 +0000 |
| commit | e0bcc0ef3466b7b5fc776d2e78d7e7ec027810c0 (patch) | |
| tree | d9686a3c25525760ef9ce5ed5594ec382b3fb6e7 /src/repo/s6rc_repo_setuptodate.c | |
| parent | 3b9836248ed7f5164140d63e96ece21973fc43f7 (diff) | |
| download | s6-rc-e0bcc0ef3466b7b5fc776d2e78d7e7ec027810c0.tar.gz | |
Separate libs6rcrepo
Diffstat (limited to 'src/repo/s6rc_repo_setuptodate.c')
| -rw-r--r-- | src/repo/s6rc_repo_setuptodate.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/repo/s6rc_repo_setuptodate.c b/src/repo/s6rc_repo_setuptodate.c new file mode 100644 index 0000000..3dded26 --- /dev/null +++ b/src/repo/s6rc_repo_setuptodate.c @@ -0,0 +1,44 @@ +/* ISC license. */ + +#include <skalibs/bsdsnowflake.h> + +#include <string.h> +#include <errno.h> + +#include <skalibs/stat.h> +#include <skalibs/strerr.h> + +#include <s6-rc/repo.h> + +int s6rc_repo_setuptodate (char const *repo, char const *set) +{ + struct stat stsource ; + struct stat stcompiled ; + size_t repolen = strlen(repo) ; + size_t setlen = strlen(set) ; + char srcfn[repolen + 17 + setlen] ; + char dstfn[repolen + 11 + setlen] ; + memcpy(srcfn, repo, repolen) ; + memcpy(srcfn + repolen, "/sources/", 9) ; + memcpy(srcfn + repolen + 9, set, setlen) ; + memcpy(srcfn + repolen + 9 + setlen, "/.stamp", 8) ; + memcpy(dstfn, repo, repolen) ; + memcpy(dstfn + repolen, "/compiled/", 10) ; + memcpy(dstfn + repolen + 10, set, setlen + 1) ; + if (stat(srcfn, &stsource) == -1) + { + strerr_warnfu2sys("stat ", srcfn) ; + return -1 ; + } + if (stat(dstfn, &stcompiled) == -1) + { + if (errno == ENOENT) return 0 ; + strerr_warnfu2sys("stat ", dstfn) ; + return -1 ; + } + return + stsource.st_atim.tv_sec < stcompiled.st_atim.tv_sec ? 1 : + stsource.st_atim.tv_sec > stcompiled.st_atim.tv_sec ? 0 : + stsource.st_atim.tv_nsec < stcompiled.st_atim.tv_nsec ; +} + |
