11
11
*as a service.
12
12
*
13
13
* IDENTIFICATION
14
- * $PostgreSQL: pgsql/src/port/copydir.c,v 1.12 2005/08 /0219:02 :32 tgl Exp $
14
+ * $PostgreSQL: pgsql/src/port/copydir.c,v 1.13 2005/09 /0218:55 :32 tgl Exp $
15
15
*
16
16
*-------------------------------------------------------------------------
17
17
*/
@@ -88,11 +88,16 @@ copydir(char *fromdir, char *todir, bool recurse)
88
88
static void
89
89
copy_file (char * fromfile ,char * tofile )
90
90
{
91
- char buffer [ 8 * BLCKSZ ] ;
91
+ char * buffer ;
92
92
int srcfd ;
93
93
int dstfd ;
94
94
int nbytes ;
95
95
96
+ /* Use palloc to ensure we get a maxaligned buffer */
97
+ #define COPY_BUF_SIZE (8 * BLCKSZ)
98
+
99
+ buffer = palloc (COPY_BUF_SIZE );
100
+
96
101
/*
97
102
* Open the files
98
103
*/
@@ -114,7 +119,7 @@ copy_file(char *fromfile, char *tofile)
114
119
*/
115
120
for (;;)
116
121
{
117
- nbytes = read (srcfd ,buffer ,sizeof ( buffer ) );
122
+ nbytes = read (srcfd ,buffer ,COPY_BUF_SIZE );
118
123
if (nbytes < 0 )
119
124
ereport (ERROR ,
120
125
(errcode_for_file_access (),
@@ -147,4 +152,6 @@ copy_file(char *fromfile, char *tofile)
147
152
errmsg ("could not close file \"%s\": %m" ,tofile )));
148
153
149
154
close (srcfd );
155
+
156
+ pfree (buffer );
150
157
}