@@ -133,6 +133,8 @@ copy_file(const char *srcfile, const char *dstfile, bool force)
133
133
int src_fd ;
134
134
int dest_fd ;
135
135
char * buffer ;
136
+ int ret = 0 ;
137
+ int save_errno = 0 ;
136
138
137
139
if ((srcfile == NULL )|| (dstfile == NULL ))
138
140
return -1 ;
@@ -150,37 +152,16 @@ copy_file(const char *srcfile, const char *dstfile, bool force)
150
152
151
153
buffer = (char * )pg_malloc (COPY_BUF_SIZE );
152
154
153
- if (buffer == NULL )
154
- {
155
- if (src_fd != 0 )
156
- close (src_fd );
157
-
158
- if (dest_fd != 0 )
159
- close (dest_fd );
160
-
161
- return -1 ;
162
- }
163
-
164
155
/* perform data copying i.e read src source, write to destination */
165
156
while (true)
166
157
{
167
158
ssize_t nbytes = read (src_fd ,buffer ,COPY_BUF_SIZE );
168
159
169
160
if (nbytes < 0 )
170
161
{
171
- int save_errno = errno ;
172
-
173
- if (buffer != NULL )
174
- pg_free (buffer );
175
-
176
- if (src_fd != 0 )
177
- close (src_fd );
178
-
179
- if (dest_fd != 0 )
180
- close (dest_fd );
181
-
182
- errno = save_errno ;
183
- return -1 ;
162
+ save_errno = errno ;
163
+ ret = -1 ;
164
+ break ;
184
165
}
185
166
186
167
if (nbytes == 0 )
@@ -190,33 +171,24 @@ copy_file(const char *srcfile, const char *dstfile, bool force)
190
171
191
172
if (write (dest_fd ,buffer ,nbytes )!= nbytes )
192
173
{
193
- /* if write didn't set errno, assume problem is no disk space */
194
- int save_errno = errno ?errno :ENOSPC ;
195
-
196
- if (buffer != NULL )
197
- pg_free (buffer );
198
-
199
- if (src_fd != 0 )
200
- close (src_fd );
201
-
202
- if (dest_fd != 0 )
203
- close (dest_fd );
204
-
205
- errno = save_errno ;
206
- return -1 ;
174
+ save_errno = errno ;
175
+ ret = -1 ;
176
+ break ;
207
177
}
208
178
}
209
179
210
- if (buffer != NULL )
211
- pg_free (buffer );
180
+ pg_free (buffer );
212
181
213
182
if (src_fd != 0 )
214
183
close (src_fd );
215
184
216
185
if (dest_fd != 0 )
217
186
close (dest_fd );
218
187
219
- return 1 ;
188
+ if (save_errno != 0 )
189
+ errno = save_errno ;
190
+
191
+ return ret ;
220
192
}
221
193
#endif
222
194