/* ============================================================================== This file is part of the JUCE 6 technical preview. Copyright (c) 2017 - ROLI Ltd. You may use this code under the terms of the GPL v3 (see www.gnu.org/licenses). For this technical preview, this file is not subject to commercial licensing. JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE DISCLAIMED. ============================================================================== */ #include "../../Application/jucer_Headers.h" #include "jucer_CodeHelpers.h" //============================================================================== namespace FileHelpers { bool containsAnyNonHiddenFiles (const File& folder) { for (const auto& di : RangedDirectoryIterator (folder, false)) if (! di.getFile().isHidden()) return true; return false; } bool shouldPathsBeRelative (String path1, String path2) { path1 = build_tools::unixStylePath (path1); path2 = build_tools::unixStylePath (path2); const int len = jmin (path1.length(), path2.length()); int commonBitLength = 0; for (int i = 0; i < len; ++i) { if (CharacterFunctions::toLowerCase (path1[i]) != CharacterFunctions::toLowerCase (path2[i])) break; ++commonBitLength; } return path1.substring (0, commonBitLength).removeCharacters ("/:").isNotEmpty(); } // removes "/../" bits from the middle of the path String simplifyPath (String::CharPointerType p) { #if JUCE_WINDOWS if (CharacterFunctions::indexOf (p, CharPointer_ASCII ("/../")) >= 0 || CharacterFunctions::indexOf (p, CharPointer_ASCII ("\\..\\")) >= 0) #else if (CharacterFunctions::indexOf (p, CharPointer_ASCII ("/../")) >= 0) #endif { StringArray toks; #if JUCE_WINDOWS toks.addTokens (p, "\\/", StringRef()); #else toks.addTokens (p, "/", StringRef()); #endif while (toks[0] == ".") toks.remove (0); for (int i = 1; i < toks.size(); ++i) { if (toks[i] == ".." && toks [i - 1] != "..") { toks.removeRange (i - 1, 2); i = jmax (0, i - 2); } } return toks.joinIntoString ("/"); } return p; } String simplifyPath (const String& path) { #if JUCE_WINDOWS if (path.contains ("\\..\\") || path.contains ("/../")) #else if (path.contains ("/../")) #endif return simplifyPath (path.getCharPointer()); return path; } }