aboutsummaryrefslogtreecommitdiffstats
path: root/src/blogc-git-receiver/shell.c
diff options
context:
space:
mode:
authorRafael G. Martins <rafael@rafaelmartins.eng.br>2018-06-12 18:45:32 +0200
committerRafael G. Martins <rafael@rafaelmartins.eng.br>2018-06-12 16:32:19 +0200
commit76448e806720d99a57f492fbaeff44bf3250b914 (patch)
treecd24992275917a00de7a0d31081ee00e1f3dcecc /src/blogc-git-receiver/shell.c
parent4a50ba03e31295a4c37ec2576fe113751a7f32ec (diff)
downloadblogc-76448e806720d99a57f492fbaeff44bf3250b914.tar.gz
blogc-76448e806720d99a57f492fbaeff44bf3250b914.tar.bz2
blogc-76448e806720d99a57f492fbaeff44bf3250b914.zip
git-receiver: git shell should reinstall hooks if symlinks are broken
Diffstat (limited to 'src/blogc-git-receiver/shell.c')
-rw-r--r--src/blogc-git-receiver/shell.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/blogc-git-receiver/shell.c b/src/blogc-git-receiver/shell.c
index 8c45b54..d288654 100644
--- a/src/blogc-git-receiver/shell.c
+++ b/src/blogc-git-receiver/shell.c
@@ -19,6 +19,17 @@
#include "shell.h"
+static bool
+lexists(const char *pathname)
+{
+ struct stat b;
+ int tmp_errno = errno;
+ bool rv = lstat(pathname, &b) == 0;
+ errno = tmp_errno;
+ return rv;
+}
+
+
int
bgr_shell(int argc, char *argv[])
{
@@ -96,7 +107,7 @@ bgr_shell(int argc, char *argv[])
goto cleanup;
}
- if (0 == access("pre-receive", F_OK)) {
+ if (lexists("pre-receive")) {
if (0 != unlink("pre-receive")) {
fprintf(stderr, "error: failed to remove old symlink "
"(%s/hooks/pre-receive): %s\n", repo, strerror(errno));
@@ -112,7 +123,7 @@ bgr_shell(int argc, char *argv[])
goto cleanup;
}
- if (0 == access("post-receive", F_OK)) {
+ if (lexists("post-receive")) {
if (0 != unlink("post-receive")) {
fprintf(stderr, "error: failed to remove old symlink "
"(%s/hooks/post-receive): %s\n", repo, strerror(errno));