summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/copy.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/copy.c b/src/copy.c
index 66ffbf85d..7f52766d1 100644
--- a/src/copy.c
+++ b/src/copy.c
@@ -33,6 +33,7 @@
#include "dirname.h"
#include "error.h"
#include "full-write.h"
+#include "getpagesize.h"
#include "hash.h"
#include "hash-pjw.h"
#include "path-concat.h"
@@ -205,7 +206,8 @@ copy_reg (const char *src_path, const char *dst_path,
struct stat const *src_sb)
{
char *buf;
- int buf_size;
+ size_t buf_size;
+ size_t buf_alignment;
int dest_desc;
int source_desc;
struct stat sb;
@@ -316,7 +318,9 @@ copy_reg (const char *src_path, const char *dst_path,
/* Make a buffer with space for a sentinel at the end. */
- buf = alloca (buf_size + sizeof (int));
+ buf_alignment = lcm (getpagesize (), sizeof (int));
+ buf = alloca (buf_size + sizeof (int) + buf_alignment - 1);
+ buf = ptr_align (buf, buf_alignment);
for (;;)
{