Skip to content

files: normalize Windows trailing-dot filename convention in pathFromWindows#118

Open
HarryR wants to merge 1 commit intodecompals:mainfrom
HarryR:HarryR-trailing-dot-paths
Open

files: normalize Windows trailing-dot filename convention in pathFromWindows#118
HarryR wants to merge 1 commit intodecompals:mainfrom
HarryR:HarryR-trailing-dot-paths

Conversation

@HarryR
Copy link
Copy Markdown

@HarryR HarryR commented Apr 16, 2026

Windows treats "foo." and "foo" as the same filename — the trailing dot means "no extension". NT-era tools rely on this equivalence in two notable places we hit:

  1. NMAKE's @<< inline response-file machinery generates temp file names like "nm12345." (with the trailing dot = no extension). When LINK.EXE opens the response file, it passes that exact literal path back through wibo's file layer.

  2. NT build infrastructure (e.g. OAK/BIN/makefile.def) has !INCLUDE .\sources. directives that only work under the same trailing-dot equivalence.

Without normalization, wibo's case-insensitive path fallback compares "nm12345." character-by-character against "nm12345" on disk and fails. Strip trailing dots from each path component (preserving "." and "..") before the existence check and the case-insensitive walk.

…Windows

Windows treats "foo." and "foo" as the same filename — the trailing dot
means "no extension". NT-era tools rely on this equivalence in two
notable places we hit:

  1. NMAKE's @<< inline response-file machinery generates temp file
     names like "nm12345." (with the trailing dot = no extension).
     When LINK.EXE opens the response file, it passes that exact
     literal path back through wibo's file layer.

  2. NT build infrastructure (e.g. OAK/BIN/makefile.def) has
     !INCLUDE .\sources. directives that only work under the same
     trailing-dot equivalence.

Without normalization, wibo's case-insensitive path fallback compares
"nm12345." character-by-character against "nm12345" on disk and fails.
Strip trailing dots from each path component (preserving "." and "..")
before the existence check and the case-insensitive walk.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant