Opened 19 years ago
Closed 17 years ago
#178 closed Bugs (Works For Me)
boost::filesystem fails in posix with files containing ':'
Reported by: | nobody | Owned by: | beman_dawes |
---|---|---|---|
Milestone: | Component: | None | |
Version: | None | Severity: | |
Keywords: | Cc: |
Description
(Too bad one can't mail to the mailing lists without registering first. My email is flux-boost@inside.org.) I have Boost 1.30.0-4 from Debian GNU/Linux. The exception I'm getting for merely handling such a path: boost::filesystem::path: invalid name "foo:_Kuu" in path: "foo:_Kuu" The problem seems to stem from libs/filesystem/path_posix_windows.cpp, where a function called generic_name checks against a ton of letters that pose a problem in Windows - however, the only characters not legal in a Unix-filename are / and \0. Is it really a job of this class to check for path-validity anyway? Well I suppose that has been discussed already ;). The function checks also for spaces at the beginning and at the end of a segment, surely one would imagine they are legal in Windows too?-o I didn't fully investigate the matter, but ///tmp///foo is also a legal unix-path, albeit redundant, I hope that doesn't pose a problem? My hackish fix: bool generic_name( const std::string & name ) { #ifdef BOOST_WINDOWS return name.size() != 0 && name.find_first_of( invalid_generic ) == std::string::npos && name != "." && name != ".." && *name.begin() != ' ' && *(name.end()-1) != ' '; #else return name.size() != 0 && name != "." && name != ".."; #endif }
Change History (4)
comment:2 by , 19 years ago
Logged In: NO A test-case would be: #include <boost/filesystem/operations.hpp> int main() { boost::filesystem::path path(":"); } (which dies on unhandled exception, ie. SIGABRT, on Debian) However, your point about missing second argument of boost::filesystem:native is correct, and removes the exception ;). This brings me to read the specification, which correctly defines the range of allowed characters, but, I must wonder why would not all legal filenames be accepted by default. Also, why would this default-path-format not be listed in the enumeration path_format.
comment:3 by , 19 years ago
Logged In: NO I think that there's no need to list this style in enumeration, since you have single-parameter ctor. As for generic grammar rationale, Beman (the library author), might know better, but I think it's a good thing. Say, if you create a name with "*" and pass it to system, you can be surprised. The current semantic prevents you from unintentionally using unportable syntax. In case you'd like to continue this discussion, I think mailing list would be better.
comment:4 by , 17 years ago
Status: | assigned → closed |
---|
Logged In: YES user_id=51042 Poster was apparently not specifying native ctor argument. Note that the complaint about being excessively nannyish will be resolved in 1.34.0
Note:
See TracTickets
for help on using tickets.