X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=flower%2Ffile-name.cc;h=ccb923355f09077024e8fbc3b2bc6d49d3faea35;hb=refs%2Fheads%2Fdon%2Fdep5_copyright;hp=21fec4e4b1a8a8a5a054edef2f32ae3175a9c566;hpb=daffbcdf881ddacfb28c3f3ef67b83d7ca7dd843;p=lilypond.git diff --git a/flower/file-name.cc b/flower/file-name.cc index 21fec4e4b1..ccb923355f 100644 --- a/flower/file-name.cc +++ b/flower/file-name.cc @@ -1,10 +1,21 @@ /* - file-name.cc - implement File_name + This file is part of LilyPond, the GNU music typesetter. - source file of the Flower Library - - (c) 1997--2006 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys Jan Nieuwenhuizen + + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #include "file-name.hh" @@ -12,6 +23,7 @@ #include #include #include +#include using namespace std; @@ -60,8 +72,8 @@ static /* avoid warning */ string slashify (string file_name) { - replace_all (file_name, '\\', '/'); - replace_all (file_name, string ("//"), "/"); + replace_all (&file_name, '\\', '/'); + replace_all (&file_name, string ("//"), "/"); return file_name; } @@ -177,3 +189,26 @@ File_name::is_absolute () const return (dir_.length () && dir_[0] == DIRSEP) || root_.length (); } + + +File_name +File_name::canonicalized () const +{ + File_name c = *this; + + replace_all (&c.dir_, string ("//"), string ("/")); + + vector components = string_split (c.dir_, '/'); + vector new_components; + + for (vsize i = 0; i < components.size (); i++) + { + if (components[i] == "..") + new_components.pop_back (); + else + new_components.push_back (components[i]); + } + + c.dir_ = string_join (new_components, "/"); + return c; +}