提交 6b711cf3 编写于 作者: B Bruce Momjian

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

centralizing error/shutdown code.
上级 16e1ae77
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册