pg_upgrade: fix CopyFile() on Windows to fail on file existence
authorBruce Momjian
Tue, 24 Nov 2015 22:18:27 +0000 (17:18 -0500)
committerBruce Momjian
Tue, 24 Nov 2015 22:18:27 +0000 (17:18 -0500)
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

contrib/pg_upgrade/file.c
contrib/pg_upgrade/util.c

index 36dee3eae7bd0522560cdcdbbc5f9e591acedbd3..4f0f1ae4a8fb523aeeba0f1d8b58732201e3bba2 100644 (file)
@@ -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
index de948c3eca6613ed69bdb5d0031bc3f284d62a52..1e5f3652cad58bbb515e77599613777bcc879c73 100644 (file)
@@ -226,6 +226,8 @@ getErrorText(int errNum)
 {
 #ifdef WIN32
    _dosmaperr(GetLastError());
+   /* _dosmaperr sets errno, so we copy errno here */
+   errNum = errno;
 #endif
    return pg_strdup(strerror(errNum));
 }