Mercurial > octave
changeset 22029:6e618b8277ad
Strip extra file separators with make_absolute_filename (bug #48351).
* oct-env.cc (do_make_absolute): Eliminate unnecessary call to do_getcwd.
Don't copy duplicate directory separators over to result string.
Strip a trailing directory separator from final result string.
author | Rik <rik@octave.org> |
---|---|
date | Sat, 02 Jul 2016 15:01:25 -0700 |
parents | 5c949eecb6dd |
children | 3a4742ebaf63 |
files | liboctave/system/oct-env.cc |
diffstat | 1 files changed, 13 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/system/oct-env.cc Sat Jul 02 10:19:44 2016 -0400 +++ b/liboctave/system/oct-env.cc Sat Jul 02 15:01:25 2016 -0700 @@ -388,9 +388,6 @@ std::string current_dir = dot_path; - if (current_dir.empty ()) - current_dir = do_getcwd (); - size_t pos = current_dir.length () - 1; if (! octave::sys::file_ops::is_dir_sep (current_dir[pos])) @@ -415,10 +412,10 @@ } if (s[i+1] == '.' - && (i + 2 == slen || octave::sys::file_ops::is_dir_sep (s[i+2]))) + && (i + 2 == slen + || octave::sys::file_ops::is_dir_sep (s[i+2]))) { i += 2; - if (i != slen) i++; @@ -428,13 +425,19 @@ } } - size_t tmp = s.find_first_of (octave::sys::file_ops::dir_sep_chars (), i); + size_t tmp; + tmp = s.find_first_of (octave::sys::file_ops::dir_sep_chars (), i); if (tmp == std::string::npos) { current_dir.append (s, i, tmp-i); break; } + else if (tmp == i) + { + /* Two separators in a row, skip adding 2nd separator */ + i++; + } else { current_dir.append (s, i, tmp-i+1); @@ -442,6 +445,10 @@ } } + // Strip any trailing directory separator + if (octave::sys::file_ops::is_dir_sep (current_dir.back ())) + current_dir.pop_back (); + return current_dir; }