diff options
| author | bors <bors@rust-lang.org> | 2020-12-16 00:47:50 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-12-16 00:47:50 +0000 |
| commit | c00a4648a4cab9659a5712af457d07d42178c5e0 (patch) | |
| tree | 4ac7816081dd4f68a06f47db52e8e26f53d34853 /compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp | |
| parent | 4031f7b0a8047653f2f989f2d8579bf5650e71ca (diff) | |
| parent | 94d73d4403ef98b3b38b8e3035c2eac87fb900f9 (diff) | |
| download | rust-c00a4648a4cab9659a5712af457d07d42178c5e0.tar.gz rust-c00a4648a4cab9659a5712af457d07d42178c5e0.zip | |
Auto merge of #78833 - CDirkx:parse_prefix, r=dtolnay
Refactor and fix `parse_prefix` on Windows This PR is an extension of #78692 as well as a general refactor of `parse_prefix`: **Fixes**: There are two errors in the current implementation of `parse_prefix`: Firstly, in the current implementation only `\` is recognized as a separator character in device namespace prefixes. This behavior is only correct for verbatim paths; `"\\.\C:/foo"` should be parsed as `"C:"` instead of `"C:/foo"`. Secondly, the current implementation only handles single separator characters. In non-verbatim paths a series of separator characters should be recognized as a single boundary, e.g. the UNC path `"\\localhost\\\\\\C$\foo"` should be parsed as `"\\localhost\\\\\\C$"` and then `UNC(server: "localhost", share: "C$")`, but currently it is not parsed at all, because it starts being parsed as `\\localhost\` and then has an invalid empty share location. Paths like `"\\.\C:/foo"` and `"\\localhost\\\\\\C$\foo"` are valid on Windows, they are equivalent to just `"C:\foo"`. **Refactoring**: All uses of `&[u8]` within `parse_prefix` are extracted to helper functions and`&OsStr` is used instead. This reduces the number of places unsafe is used: - `get_first_two_components` is adapted to the more general `parse_next_component` and used in more places - code for parsing drive prefixes is extracted to `parse_drive`
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp')
0 files changed, 0 insertions, 0 deletions
