In pg_upgrade, simplify function copy_file() by using pg_malloc() and
authorBruce Momjian <bruce@momjian.us>
Sun, 25 Nov 2012 03:39:03 +0000 (22:39 -0500)
committerBruce Momjian <bruce@momjian.us>
Sun, 25 Nov 2012 03:39:03 +0000 (22:39 -0500)
centralizing error/shutdown code.

contrib/pg_upgrade/file.c

index 93ffd7b798ba07278870a192ee1242f66345d51c..b5d78a57debdc8e05c3e6b38034f9cdefe3729a2 100644 (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