
The methodology used to generate this CL is documented in https://crbug.com/1098010#c95. No-Try: true Bug: 1098010 Change-Id: I4bd37f76f2cc56763fc4018087890eae3c92c700 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3899419 Reviewed-by: Mark Mentovai <mark@chromium.org> Commit-Queue: Avi Drissman <avi@chromium.org> Owners-Override: Avi Drissman <avi@chromium.org> Auto-Submit: Avi Drissman <avi@chromium.org> Cr-Commit-Position: refs/heads/main@{#1047649}
49 lines
1.6 KiB
C++
49 lines
1.6 KiB
C++
// 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_
|