mirror of
https://github.com/postgres/postgres.git
synced 2025-09-03 15:22:11 +03:00
Replace pgwin32_is_junction() with lstat().
Now that lstat() reports junction points with S_IFLNK/S_ISLINK(), and
unlink() can unlink them, there is no need for conditional code for
Windows in a few places. That was expressed by testing for WIN32 or
S_ISLNK, which we can now constant-fold.
The coding around pgwin32_is_junction() was a bit suspect anyway, as we
never checked for errors, and we also know that errors can be spuriously
reported because of transient sharing violations on this OS. The
lstat()-based code has handling for that.
This also reverts 4fc6b6ee
on master only. That was done because
lstat() didn't previously work for symlinks (junction points), but now
it does.
Tested-by: Andrew Dunstan <andrew@dunslane.net>
Discussion: https://postgr.es/m/CA%2BhUKGLfOOeyZpm5ByVcAt7x5Pn-%3DxGRNCvgiUPVVzjFLtnY0w%40mail.gmail.com
This commit is contained in:
@@ -362,20 +362,4 @@ pgreadlink(const char *path, char *buf, size_t size)
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
* Assumes the file exists, so will return false if it doesn't
|
||||
* (since a nonexistent file is not a junction)
|
||||
*/
|
||||
bool
|
||||
pgwin32_is_junction(const char *path)
|
||||
{
|
||||
DWORD attr = GetFileAttributes(path);
|
||||
|
||||
if (attr == INVALID_FILE_ATTRIBUTES)
|
||||
{
|
||||
_dosmaperr(GetLastError());
|
||||
return false;
|
||||
}
|
||||
return ((attr & FILE_ATTRIBUTE_REPARSE_POINT) == FILE_ATTRIBUTE_REPARSE_POINT);
|
||||
}
|
||||
#endif /* defined(WIN32) && !defined(__CYGWIN__) */
|
||||
|
Reference in New Issue
Block a user