-
Fix handling of an empty filename at end of a path · cf290ea3
The C++17 std::filesystem::path grammar allows an empty filename as the last component (to signify a trailing slash). The existing code does not handle this consistently, sometimes an empty filename has type _Multi and sometimes it has type _Filename. This can result in a non-empty iterator range for an empty filename component. This change ensures that empty paths always have type _Filename and will yield an empty iterator range. * include/bits/fs_path.h (path::_M_type): Change default member initializer to _Filename. (path::begin): Create past-the-end iterator for empty path. * src/filesystem/std-path.cc (path::remove_filename()): Remove debugging check. (path::has_relative_path()): Return false for empty filenames. (path::_M_split_cmpts): Set _M_type to _Filename for empty paths. Fix offset of empty final component. * testsuite/27_io/filesystem/path/itr/components.cc: New. * testsuite/27_io/filesystem/path/itr/traversal.cc: Add new inputs. From-SVN: r260616
Jonathan Wakely committed
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| c++11 | Loading commit data... | |
| c++98 | Loading commit data... | |
| filesystem | Loading commit data... | |
| shared | Loading commit data... | |
| Makefile.am | Loading commit data... | |
| Makefile.in | Loading commit data... |