blob: 3e323bdcf120f1553e5eff7bfea30d6d7470ab2c [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_SHELL_DIALOGS_SELECT_FILE_UTILS_WIN_H_
#define UI_SHELL_DIALOGS_SELECT_FILE_UTILS_WIN_H_
#include "base/strings/string_tokenizer.h"
namespace ui {
// Given a file name, return the sanitized version by removing substrings that
// are embedded in double '%' characters as those are reserved for environment
// variables. Implementation detail exported for unit tests.
template <typename T>
std::basic_string<T> RemoveEnvVarFromFileName(
const std::basic_string<T>& file_name,
const std::basic_string<T>& env_delimit) {
base::StringTokenizerT<std::basic_string<T>,
typename std::basic_string<T>::const_iterator>
t(file_name, env_delimit);
t.set_options(base::StringTokenizer::RETURN_EMPTY_TOKENS);
std::basic_string<T> result;
bool token_valid = t.GetNext();
while (token_valid) {
// Append substring before the first "%".
result.append(t.token());
// Done if we are reaching the end delimiter,
if (!t.GetNext()) {
break;
}
std::basic_string<T> string_after_first_percent = t.token();
token_valid = t.GetNext();
// If there are no other "%", append the string after
// the first "%". Otherwise, remove the string between
// the "%" and continue handing the remaining string.
if (!token_valid) {
result.append(env_delimit);
result.append(string_after_first_percent);
break;
}
}
return result;
}
} // namespace ui
#endif // UI_SHELL_DIALOGS_SELECT_FILE_UTILS_WIN_H_