diff options
author | Hristo Venev <hristo@venev.name> | 2024-04-14 17:38:19 +0300 |
---|---|---|
committer | Hristo Venev <hristo@venev.name> | 2024-04-14 17:54:56 +0300 |
commit | f6bf84ac789c430ef71123c35a91d70d8162e9b9 (patch) | |
tree | e6f5076174f8889b951798e8d76fb6d0bfec40a5 /pgbak.c | |
parent | f3d0c748b2c259a1f19669cff67600f1a2beb256 (diff) |
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) { |