[Boost-bugs] [ boost-Patches-1157160 ] patch for boost::filesystem

Patches item #1157160, was opened at 2005-03-04 23:23 Message generated for change (Settings changed) made by mclow You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=307586&aid=1157160&group_id=7586 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Submitted By: Steven Weiss (fotzor)
Assigned to: Beman Dawes (beman_dawes) Summary: patch for boost::filesystem
Initial Comment: hi, when you try to get the branch path of this "c:\\some_dir\\some_file.txt" under windows the branch path should be "c:\\some_dir". what is returned instead is "c:" which isn't correct. so here's the fix: in path_posix_windows.cpp: std::string::size_type leaf_pos( const std::string & str, std::string::size_type end_pos ) // end_pos is past-the-end position // return 0 if str itself is leaf (or empty) { if ( end_pos && str[end_pos-1] == '/' ) return end_pos-1; std::string::size_type pos( str.find_last_of( '/', end_pos-1 ) ); # ifdef BOOST_WINDOWS if ( pos == std::string::npos ) pos = str.find_last_of( '\\', end_pos-1 ); // ADDED if ( pos == std::string::npos ) pos = str.find_last_of( ':', end_pos-2 ); # endif return ( pos == std::string::npos // path itself must be a leaf (or empty) # ifdef BOOST_WINDOWS || (pos == 1 && (str[0] == '/' || str[0] == '\\')) // or share // ADDED # endif ) ? 0 // so leaf is entire string : pos + 1; // or starts after delimiter } mfg steven ---------------------------------------------------------------------- Comment By: Steven Weiss (fotzor) Date: 2005-03-05 00:24 Message: Logged In: YES user_id=1124235 i forgot something... in branch_path() you must also change the condition of the if to: if ( end_pos && (m_path[end_pos-1] == '/' || m_path[end_pos-1] == '\\') && !detail::is_absolute_root( m_path, end_pos ) ) --end_pos; else it doesn't work proper. perhaps there are other functions depending on leaf_pos() that must be adjusted as well ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=307586&aid=1157160&group_id=7586 ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click _______________________________________________ Boost-bugs mailing list Boost-bugs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/boost-bugs

"SourceForge.net" <noreply@sourceforge.net> wrote in message news:E1Ew5Qo-0004bc-Ub@sc8-sf-web2.sourceforge.net...
Patches item #1157160, was opened at 2005-03-04 23:23 Message generated for change (Settings changed) made by mclow You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=307586&aid=1157160&group_id=7586
Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Submitted By: Steven Weiss (fotzor)
Assigned to: Beman Dawes (beman_dawes) Summary: patch for boost::filesystem
Initial Comment: hi, when you try to get the branch path of this "c:\\some_dir\\some_file.txt" under windows the branch path should be "c:\\some_dir". what is returned instead is "c:" which isn't correct. so here's the fix:
in path_posix_windows.cpp:
std::string::size_type leaf_pos( const std::string & str, std::string::size_type end_pos ) // end_pos is past-the-end position // return 0 if str itself is leaf (or empty) { if ( end_pos && str[end_pos-1] == '/' ) return end_pos-1;
std::string::size_type pos( str.find_last_of( '/', end_pos-1 ) ); # ifdef BOOST_WINDOWS if ( pos == std::string::npos ) pos = str.find_last_of( '\\', end_pos-1 ); // ADDED if ( pos == std::string::npos ) pos = str.find_last_of( ':', end_pos-2 ); # endif
return ( pos == std::string::npos // path itself must be a leaf (or empty) # ifdef BOOST_WINDOWS || (pos == 1 && (str[0] == '/' || str[0] == '\\')) // or share // ADDED # endif ) ? 0 // so leaf is entire string : pos + 1; // or starts after delimiter }
mfg steven
----------------------------------------------------------------------
Comment By: Steven Weiss (fotzor) Date: 2005-03-05 00:24
Message: Logged In: YES user_id=1124235
i forgot something... in branch_path() you must also change the condition of the if to:
if ( end_pos && (m_path[end_pos-1] == '/' || m_path[end_pos-1] == '\\') && !detail::is_absolute_root( m_path, end_pos ) ) --end_pos;
else it doesn't work proper. perhaps there are other functions depending on leaf_pos() that must be adjusted as well
I've closed this without applying the patch. A path regression test case was added. It passes. --Beman
participants (2)
-
Beman Dawes
-
SourceForge.net