From f6bf84ac789c430ef71123c35a91d70d8162e9b9 Mon Sep 17 00:00:00 2001 From: Hristo Venev Date: Sun, 14 Apr 2024 17:38:19 +0300 Subject: Package for Fedora --- pgbak.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'pgbak.c') diff --git a/pgbak.c b/pgbak.c index 3fed5eb..c3d84d5 100644 --- a/pgbak.c +++ b/pgbak.c @@ -660,20 +660,28 @@ int main(int argc, char **argv) { return 1; } + const char *op = argv[1]; + bool is_try_wait = !strcmp(op, "try-wait"); + backup_dfd = open(backup_dir, O_RDONLY | O_DIRECTORY | O_CLOEXEC); if(backup_dfd < 0) { + if(is_try_wait && errno == ENOENT) { + return 0; + } fprintf(stderr, "Failed to open $PGBAK directory '%s': %m\n", backup_dir); return 1; } - lck_fd = openat(backup_dfd, "pgbak.lock", O_RDWR | O_CREAT | O_CLOEXEC, 0600); + int lck_flags = O_RDWR | (is_try_wait ? 0 : O_CREAT) | O_CLOEXEC; + lck_fd = openat(backup_dfd, "pgbak.lock", lck_flags, 0600); if(lck_fd < 0) { + if(is_try_wait && errno == ENOENT) { + return 0; + } fprintf(stderr, "Failed to open $PGBAK/pgbak.lock: %m\n"); - _Exit(1); + return 1; } - const char *op = argv[1]; - if(!strcmp(op, "wal")) { if(argc != 3) goto usage; return cmd_wal(argv[2]); @@ -694,7 +702,7 @@ int main(int argc, char **argv) { return cmd_sync(true, true); } - if(!strcmp(op, "wait")) { + if(is_try_wait || !strcmp(op, "wait")) { if(argc != 2 && argc != 3) goto usage; long timeout = -1; if(argc > 2) { -- cgit