X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=flower%2Ffile-name.cc;h=ccb923355f09077024e8fbc3b2bc6d49d3faea35;hb=e90f0536f9be39ada0bef0aeb0d275dec3b2fb5b;hp=e5736e06b0834ed6c26e15e01f32d25d91682067;hpb=16cb456cabf477f6d398ff731aa0f10b60913394;p=lilypond.git diff --git a/flower/file-name.cc b/flower/file-name.cc index e5736e06b0..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--2007 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; +}