Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(287)

Side by Side Diff: base/string_util.cc

Issue 6894037: Add more information to about:version and "About Chromium" dialog (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | base/string_util_unittest.cc » ('j') | chrome/app/generated_resources.grd » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/string_util.h" 5 #include "base/string_util.h"
6 6
7 #include "build/build_config.h" 7 #include "build/build_config.h"
8 8
9 #include <ctype.h> 9 #include <ctype.h>
10 #include <errno.h> 10 #include <errno.h>
(...skipping 813 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 } 824 }
825 825
826 string16 JoinString(const std::vector<string16>& parts, char16 sep) { 826 string16 JoinString(const std::vector<string16>& parts, char16 sep) {
827 return JoinStringT(parts, sep); 827 return JoinStringT(parts, sep);
828 } 828 }
829 829
830 template<class FormatStringType, class OutStringType> 830 template<class FormatStringType, class OutStringType>
831 OutStringType DoReplaceStringPlaceholders(const FormatStringType& format_string, 831 OutStringType DoReplaceStringPlaceholders(const FormatStringType& format_string,
832 const std::vector<OutStringType>& subst, std::vector<size_t>* offsets) { 832 const std::vector<OutStringType>& subst, std::vector<size_t>* offsets) {
833 size_t substitutions = subst.size(); 833 size_t substitutions = subst.size();
834 DCHECK(substitutions < 10);
835 834
836 size_t sub_length = 0; 835 size_t sub_length = 0;
837 for (typename std::vector<OutStringType>::const_iterator iter = subst.begin(); 836 for (typename std::vector<OutStringType>::const_iterator iter = subst.begin();
838 iter != subst.end(); ++iter) { 837 iter != subst.end(); ++iter) {
839 sub_length += iter->length(); 838 sub_length += iter->length();
840 } 839 }
841 840
842 OutStringType formatted; 841 OutStringType formatted;
843 formatted.reserve(format_string.length() + sub_length); 842 formatted.reserve(format_string.length() + sub_length);
844 843
845 std::vector<ReplacementOffset> r_offsets; 844 std::vector<ReplacementOffset> r_offsets;
846 for (typename FormatStringType::const_iterator i = format_string.begin(); 845 for (typename FormatStringType::const_iterator i = format_string.begin();
847 i != format_string.end(); ++i) { 846 i != format_string.end(); ++i) {
848 if ('$' == *i) { 847 if ('$' == *i) {
849 if (i + 1 != format_string.end()) { 848 if (i + 1 != format_string.end()) {
850 ++i; 849 ++i;
851 DCHECK('$' == *i || '1' <= *i) << "Invalid placeholder: " << *i; 850 DCHECK('$' == *i || '1' <= *i) << "Invalid placeholder: " << *i;
852 if ('$' == *i) { 851 if ('$' == *i) {
853 while (i != format_string.end() && '$' == *i) { 852 while (i != format_string.end() && '$' == *i) {
854 formatted.push_back('$'); 853 formatted.push_back('$');
855 ++i; 854 ++i;
856 } 855 }
857 --i; 856 --i;
858 } else { 857 } else {
859 uintptr_t index = *i - '1'; 858 uintptr_t index = 0;
859 while ('0' <= *i && '9' >= *i) {
860 index *= 10;
861 index += *i - '0';
862 ++i;
863 }
864 --i;
865 index -= 1;
860 if (offsets) { 866 if (offsets) {
861 ReplacementOffset r_offset(index, 867 ReplacementOffset r_offset(index,
862 static_cast<int>(formatted.size())); 868 static_cast<int>(formatted.size()));
863 r_offsets.insert(std::lower_bound(r_offsets.begin(), 869 r_offsets.insert(std::lower_bound(r_offsets.begin(),
864 r_offsets.end(), 870 r_offsets.end(),
865 r_offset, 871 r_offset,
866 &CompareParameter), 872 &CompareParameter),
867 r_offset); 873 r_offset);
868 } 874 }
869 if (index < substitutions) 875 if (index < substitutions)
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
1088 } 1094 }
1089 1095
1090 } // namespace 1096 } // namespace
1091 1097
1092 size_t base::strlcpy(char* dst, const char* src, size_t dst_size) { 1098 size_t base::strlcpy(char* dst, const char* src, size_t dst_size) {
1093 return lcpyT<char>(dst, src, dst_size); 1099 return lcpyT<char>(dst, src, dst_size);
1094 } 1100 }
1095 size_t base::wcslcpy(wchar_t* dst, const wchar_t* src, size_t dst_size) { 1101 size_t base::wcslcpy(wchar_t* dst, const wchar_t* src, size_t dst_size) {
1096 return lcpyT<wchar_t>(dst, src, dst_size); 1102 return lcpyT<wchar_t>(dst, src, dst_size);
1097 } 1103 }
OLDNEW
« no previous file with comments | « no previous file | base/string_util_unittest.cc » ('j') | chrome/app/generated_resources.grd » ('J')

Powered by Google App Engine
This is Rietveld 408576698