In pg_upgrade, simplify function copy_file() by using pg_malloc() and
centralizing error/shutdown code.
This commit is contained in:
parent
16e1ae77f9
commit
6b711cf37c
@ -133,6 +133,8 @@ copy_file(const char *srcfile, const char *dstfile, bool force)
|
||||
int src_fd;
|
||||
int dest_fd;
|
||||
char *buffer;
|
||||
int ret = 0;
|
||||
int save_errno = 0;
|
||||
|
||||
if ((srcfile == NULL) || (dstfile == NULL))
|
||||
return -1;
|
||||
@ -150,17 +152,6 @@ copy_file(const char *srcfile, const char *dstfile, bool force)
|
||||
|
||||
buffer = (char *) pg_malloc(COPY_BUF_SIZE);
|
||||
|
||||
if (buffer == NULL)
|
||||
{
|
||||
if (src_fd != 0)
|
||||
close(src_fd);
|
||||
|
||||
if (dest_fd != 0)
|
||||
close(dest_fd);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* perform data copying i.e read src source, write to destination */
|
||||
while (true)
|
||||
{
|
||||
@ -168,19 +159,9 @@ copy_file(const char *srcfile, const char *dstfile, bool force)
|
||||
|
||||
if (nbytes < 0)
|
||||
{
|
||||
int save_errno = errno;
|
||||
|
||||
if (buffer != NULL)
|
||||
pg_free(buffer);
|
||||
|
||||
if (src_fd != 0)
|
||||
close(src_fd);
|
||||
|
||||
if (dest_fd != 0)
|
||||
close(dest_fd);
|
||||
|
||||
errno = save_errno;
|
||||
return -1;
|
||||
save_errno = errno;
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (nbytes == 0)
|
||||
@ -190,25 +171,13 @@ copy_file(const char *srcfile, const char *dstfile, bool force)
|
||||
|
||||
if (write(dest_fd, buffer, nbytes) != nbytes)
|
||||
{
|
||||
/* if write didn't set errno, assume problem is no disk space */
|
||||
int save_errno = errno ? errno : ENOSPC;
|
||||
|
||||
if (buffer != NULL)
|
||||
pg_free(buffer);
|
||||
|
||||
if (src_fd != 0)
|
||||
close(src_fd);
|
||||
|
||||
if (dest_fd != 0)
|
||||
close(dest_fd);
|
||||
|
||||
errno = save_errno;
|
||||
return -1;
|
||||
save_errno = errno;
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (buffer != NULL)
|
||||
pg_free(buffer);
|
||||
pg_free(buffer);
|
||||
|
||||
if (src_fd != 0)
|
||||
close(src_fd);
|
||||
@ -216,7 +185,10 @@ copy_file(const char *srcfile, const char *dstfile, bool force)
|
||||
if (dest_fd != 0)
|
||||
close(dest_fd);
|
||||
|
||||
return 1;
|
||||
if (save_errno != 0)
|
||||
errno = save_errno;
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user