aboutsummaryrefslogtreecommitdiff
path: root/pgbak.c
diff options
context:
space:
mode:
Diffstat (limited to 'pgbak.c')
-rw-r--r--pgbak.c18
1 files changed, 13 insertions, 5 deletions
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) {