diff options
author | Tomas Vondra | 2024-06-30 17:02:00 +0000 |
---|---|---|
committer | Tomas Vondra | 2024-06-30 18:51:18 +0000 |
commit | e99e840b82756bc6858222d97453639cef929b53 (patch) | |
tree | b9d1dbb295898f35a55653400e4c10a45a7e0af9 | |
parent | 917754557cc0002bb042341720a7ce18fe5b0a09 (diff) |
Add headers needed by pg_combinebackup --clone
The code for file cloning existed, but was not reachable as it relied on
constants from missing headers. Due to that, on Linux --clone always
failed with
error: file cloning not supported on this platform
Fixed by including the missing headers to relevant places. Adding the
headers revealed a couple compile errors in copy_file_clone(), so fix
those too.
Reported-by: Peter Eisentraut
Discussion: https://postgr.es/m/48da4a1f-ccd9-4988-9622-24f37b1de2b4%40eisentraut.org
-rw-r--r-- | src/bin/pg_combinebackup/copy_file.c | 12 | ||||
-rw-r--r-- | src/bin/pg_combinebackup/pg_combinebackup.c | 8 |
2 files changed, 19 insertions, 1 deletions
diff --git a/src/bin/pg_combinebackup/copy_file.c b/src/bin/pg_combinebackup/copy_file.c index 05b3e86bd08..57a7c3a202c 100644 --- a/src/bin/pg_combinebackup/copy_file.c +++ b/src/bin/pg_combinebackup/copy_file.c @@ -13,6 +13,10 @@ #ifdef HAVE_COPYFILE_H #include <copyfile.h> #endif +#ifdef __linux__ +#include <sys/ioctl.h> +#include <linux/fs.h> +#endif #include <fcntl.h> #include <limits.h> #include <sys/stat.h> @@ -214,6 +218,9 @@ copy_file_clone(const char *src, const char *dest, pg_fatal("error while cloning file \"%s\" to \"%s\": %m", src, dest); #elif defined(__linux__) && defined(FICLONE) { + int src_fd; + int dest_fd; + if ((src_fd = open(src, O_RDONLY | PG_BINARY, 0)) < 0) pg_fatal("could not open file \"%s\": %m", src); @@ -228,8 +235,11 @@ copy_file_clone(const char *src, const char *dest, unlink(dest); pg_fatal("error while cloning file \"%s\" to \"%s\": %s", - src, dest); + src, dest, strerror(save_errno)); } + + close(src_fd); + close(dest_fd); } #else pg_fatal("file cloning not supported on this platform"); diff --git a/src/bin/pg_combinebackup/pg_combinebackup.c b/src/bin/pg_combinebackup/pg_combinebackup.c index d8e928862b2..363fae234e9 100644 --- a/src/bin/pg_combinebackup/pg_combinebackup.c +++ b/src/bin/pg_combinebackup/pg_combinebackup.c @@ -16,6 +16,14 @@ #include <fcntl.h> #include <limits.h> +#ifdef HAVE_COPYFILE_H +#include <copyfile.h> +#endif +#ifdef __linux__ +#include <sys/ioctl.h> +#include <linux/fs.h> +#endif + #include "backup_label.h" #include "common/blkreftable.h" #include "common/checksum_helper.h" |