From 6b711cf37c228749b6a8cef50e16e3c587d18dd4 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sat, 24 Nov 2012 22:39:03 -0500 Subject: [PATCH] In pg_upgrade, simplify function copy_file() by using pg_malloc() and centralizing error/shutdown code. --- contrib/pg_upgrade/file.c | 54 ++++++++++----------------------------- 1 file changed, 13 insertions(+), 41 deletions(-) diff --git a/contrib/pg_upgrade/file.c b/contrib/pg_upgrade/file.c index 93ffd7b798..b5d78a57de 100644 --- a/contrib/pg_upgrade/file.c +++ b/contrib/pg_upgrade/file.c @@ -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