From: Bruce Momjian Date: Tue, 24 Nov 2015 22:18:27 +0000 (-0500) Subject: pg_upgrade: fix CopyFile() on Windows to fail on file existence X-Git-Tag: REL9_2_15~57 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0ca3c51e5520b423b17f498f6390129659ef68e0;p=postgresql pg_upgrade: fix CopyFile() on Windows to fail on file existence Also fix getErrorText() to return the right error string on failure. This behavior now matches that of other operating systems. Report by Noah Misch Backpatch through 9.1 --- diff --git a/contrib/pg_upgrade/file.c b/contrib/pg_upgrade/file.c index 40463c6136..a1b0176590 100644 --- a/contrib/pg_upgrade/file.c +++ b/contrib/pg_upgrade/file.c @@ -37,7 +37,7 @@ copyAndUpdateFile(pageCnvCtx *pageConverter, #ifndef WIN32 if (copy_file(src, dst, force) == -1) #else - if (CopyFile(src, dst, force) == 0) + if (CopyFile(src, dst, !force) == 0) #endif return getErrorText(errno); else diff --git a/contrib/pg_upgrade/util.c b/contrib/pg_upgrade/util.c index c0d9deebca..d323045deb 100644 --- a/contrib/pg_upgrade/util.c +++ b/contrib/pg_upgrade/util.c @@ -253,6 +253,8 @@ getErrorText(int errNum) { #ifdef WIN32 _dosmaperr(GetLastError()); + /* _dosmaperr sets errno, so we copy errno here */ + errNum = errno; #endif return pg_strdup(strerror(errNum)); }