needs_rebuild: don't open files on Windows when checking timestamps - #269
Open
zzyxyz666 wants to merge 1 commit into
Open
needs_rebuild: don't open files on Windows when checking timestamps#269zzyxyz666 wants to merge 1 commit into
zzyxyz666 wants to merge 1 commit into
Conversation
nob_needs_rebuild() opened files with CreateFile(path, GENERIC_READ, 0, NULL, ...) on Windows. dwShareMode = 0 is an exclusive open, so any other process holding the file (an editor, clangd, an antivirus scanner) made nob fail with ERROR_SHARING_VIOLATION, while the POSIX stat() path was unaffected. Use GetFileAttributesExA() which reads the file metadata without opening the file, matching the POSIX semantics and the existing Windows implementations of nob_file_exists() and nob_get_file_type(). Behavior is otherwise unchanged. Add tests/needs_rebuild_locked_file which locks an input file and asserts needs_rebuild() still returns the correct result.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
nob_needs_rebuild() opened files with CreateFile(path, GENERIC_READ, 0, NULL, ...) on Windows.
dwShareMode = 0 is an exclusive open, so any other process holding the file (an editor, clangd,
an antivirus scanner) made nob fail with ERROR_SHARING_VIOLATION, while the POSIX stat() path was
unaffected. I hit this in practice while editing in VSCode: the C/C++ extension (clangd) keeps the
source files open, so nob failed until the language server released the file.
Use GetFileAttributesExA() which reads the file metadata without opening the file, matching the
POSIX semantics and the existing Windows implementations of nob_file_exists() and
nob_get_file_type(). Behavior is otherwise unchanged.
Add tests/needs_rebuild_locked_file which locks an input file and asserts needs_rebuild() still
returns the correct result.