diff options
Diffstat (limited to 'pgbak.c')
-rw-r--r-- | pgbak.c | 18 |
1 files changed, 13 insertions, 5 deletions
@@ -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) { |