In pg_upgrade, simplify function copy_file() by using pg_malloc() and

centralizing error/shutdown code.
This commit is contained in:
Bruce Momjian 2012-11-24 22:39:03 -05:00
parent 16e1ae77f9
commit 6b711cf37c
1 changed files with 13 additions and 41 deletions

View File

@ -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