Fix directory iterator treating all files subsequent to a symlink as symlink on Windows #162
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
According to microsoft documentation on the
dwReserved0
member of_WIN32_FIND_DATAW
,reparse_tag_from_INFO
usesdwReserved0
without checking theFILE_ATTRIBUTE_REPARSE_POINT
attribute, which causesdirectory_iterator
to use a staledwReserved0
value for all files subsequent to a symlink, causing all of these files to be treated as symlink incorrectly.This patch checks
FILE_ATTRIBUTE_REPARSE_POINT
before checkingdwReserved0
to correctly get the symlink status of the files. Also replaced a hack that uses structure size to determine structure type with proper templates.This patch is tested on CleverRaven/Cataclysm-DDA#63612 and cherrypicked from that PR.