Fix symlink() errno on Windows.

Ancient bug noticed while working on a test suite for these functions.

https://postgr.es/m/CA%2BhUKG%2BajSQ_8eu2AogTncOnZ5me2D-Cn66iN_-wZnRjLN%2Bicg%40mail.gmail.com
This commit is contained in:
Thomas Munro 2022-10-25 15:10:49 +13:00
parent f186c7c885
commit 359d601095

View File

@ -197,7 +197,10 @@ pgsymlink(const char *oldpath, const char *newpath)
FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, 0);
if (dirhandle == INVALID_HANDLE_VALUE)
{
_dosmaperr(GetLastError());
return -1;
}
/* make sure we have an unparsed native win32 path */
if (memcmp("\\??\\", oldpath, 4) != 0)
@ -230,8 +233,11 @@ pgsymlink(const char *oldpath, const char *newpath)
0, 0, &len, 0))
{
LPSTR msg;
int save_errno;
_dosmaperr(GetLastError());
save_errno = errno;
errno = 0;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_IGNORE_INSERTS |
FORMAT_MESSAGE_FROM_SYSTEM,
@ -251,6 +257,9 @@ pgsymlink(const char *oldpath, const char *newpath)
CloseHandle(dirhandle);
RemoveDirectory(newpath);
errno = save_errno;
return -1;
}