Commit 90ea078c authored by husky@chromium.org's avatar husky@chromium.org

Remove wchar_t versions of StringPrintf from Android

BUG=137864

TEST=StringPrintfTest


Review URL: https://chromiumcodereview.appspot.com/10800078

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149397 0039d316-1c4b-4281-b951-d872f2087c98
parent 30f6403d
// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -26,12 +26,14 @@ inline int vsnprintfT(char* buffer, ...@@ -26,12 +26,14 @@ inline int vsnprintfT(char* buffer,
return base::vsnprintf(buffer, buf_size, format, argptr); return base::vsnprintf(buffer, buf_size, format, argptr);
} }
#if !defined(OS_ANDROID)
inline int vsnprintfT(wchar_t* buffer, inline int vsnprintfT(wchar_t* buffer,
size_t buf_size, size_t buf_size,
const wchar_t* format, const wchar_t* format,
va_list argptr) { va_list argptr) {
return base::vswprintf(buffer, buf_size, format, argptr); return base::vswprintf(buffer, buf_size, format, argptr);
} }
#endif
// Templatized backend for StringPrintF/StringAppendF. This does not finalize // Templatized backend for StringPrintF/StringAppendF. This does not finalize
// the va_list, the caller is expected to do that. // the va_list, the caller is expected to do that.
...@@ -116,6 +118,7 @@ std::string StringPrintf(const char* format, ...) { ...@@ -116,6 +118,7 @@ std::string StringPrintf(const char* format, ...) {
return result; return result;
} }
#if !defined(OS_ANDROID)
std::wstring StringPrintf(const wchar_t* format, ...) { std::wstring StringPrintf(const wchar_t* format, ...) {
va_list ap; va_list ap;
va_start(ap, format); va_start(ap, format);
...@@ -124,6 +127,7 @@ std::wstring StringPrintf(const wchar_t* format, ...) { ...@@ -124,6 +127,7 @@ std::wstring StringPrintf(const wchar_t* format, ...) {
va_end(ap); va_end(ap);
return result; return result;
} }
#endif
std::string StringPrintV(const char* format, va_list ap) { std::string StringPrintV(const char* format, va_list ap) {
std::string result; std::string result;
...@@ -140,6 +144,7 @@ const std::string& SStringPrintf(std::string* dst, const char* format, ...) { ...@@ -140,6 +144,7 @@ const std::string& SStringPrintf(std::string* dst, const char* format, ...) {
return *dst; return *dst;
} }
#if !defined(OS_ANDROID)
const std::wstring& SStringPrintf(std::wstring* dst, const std::wstring& SStringPrintf(std::wstring* dst,
const wchar_t* format, ...) { const wchar_t* format, ...) {
va_list ap; va_list ap;
...@@ -149,6 +154,7 @@ const std::wstring& SStringPrintf(std::wstring* dst, ...@@ -149,6 +154,7 @@ const std::wstring& SStringPrintf(std::wstring* dst,
va_end(ap); va_end(ap);
return *dst; return *dst;
} }
#endif
void StringAppendF(std::string* dst, const char* format, ...) { void StringAppendF(std::string* dst, const char* format, ...) {
va_list ap; va_list ap;
...@@ -157,19 +163,23 @@ void StringAppendF(std::string* dst, const char* format, ...) { ...@@ -157,19 +163,23 @@ void StringAppendF(std::string* dst, const char* format, ...) {
va_end(ap); va_end(ap);
} }
#if !defined(OS_ANDROID)
void StringAppendF(std::wstring* dst, const wchar_t* format, ...) { void StringAppendF(std::wstring* dst, const wchar_t* format, ...) {
va_list ap; va_list ap;
va_start(ap, format); va_start(ap, format);
StringAppendV(dst, format, ap); StringAppendV(dst, format, ap);
va_end(ap); va_end(ap);
} }
#endif
void StringAppendV(std::string* dst, const char* format, va_list ap) { void StringAppendV(std::string* dst, const char* format, va_list ap) {
StringAppendVT(dst, format, ap); StringAppendVT(dst, format, ap);
} }
#if !defined(OS_ANDROID)
void StringAppendV(std::wstring* dst, const wchar_t* format, va_list ap) { void StringAppendV(std::wstring* dst, const wchar_t* format, va_list ap) {
StringAppendVT(dst, format, ap); StringAppendVT(dst, format, ap);
} }
#endif
} // namespace base } // namespace base
// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -17,8 +17,11 @@ namespace base { ...@@ -17,8 +17,11 @@ namespace base {
// Return a C++ string given printf-like input. // Return a C++ string given printf-like input.
BASE_EXPORT std::string StringPrintf(const char* format, ...) BASE_EXPORT std::string StringPrintf(const char* format, ...)
PRINTF_FORMAT(1, 2); PRINTF_FORMAT(1, 2);
// OS_ANDROID's libc does not support wchar_t, so several overloads are omitted.
#if !defined(OS_ANDROID)
BASE_EXPORT std::wstring StringPrintf(const wchar_t* format, ...) BASE_EXPORT std::wstring StringPrintf(const wchar_t* format, ...)
WPRINTF_FORMAT(1, 2); WPRINTF_FORMAT(1, 2);
#endif
// Return a C++ string given vprintf-like input. // Return a C++ string given vprintf-like input.
BASE_EXPORT std::string StringPrintV(const char* format, va_list ap) BASE_EXPORT std::string StringPrintV(const char* format, va_list ap)
...@@ -28,25 +31,31 @@ BASE_EXPORT std::string StringPrintV(const char* format, va_list ap) ...@@ -28,25 +31,31 @@ BASE_EXPORT std::string StringPrintV(const char* format, va_list ap)
BASE_EXPORT const std::string& SStringPrintf(std::string* dst, BASE_EXPORT const std::string& SStringPrintf(std::string* dst,
const char* format, ...) const char* format, ...)
PRINTF_FORMAT(2, 3); PRINTF_FORMAT(2, 3);
#if !defined(OS_ANDROID)
BASE_EXPORT const std::wstring& SStringPrintf(std::wstring* dst, BASE_EXPORT const std::wstring& SStringPrintf(std::wstring* dst,
const wchar_t* format, ...) const wchar_t* format, ...)
WPRINTF_FORMAT(2, 3); WPRINTF_FORMAT(2, 3);
#endif
// Append result to a supplied string. // Append result to a supplied string.
BASE_EXPORT void StringAppendF(std::string* dst, const char* format, ...) BASE_EXPORT void StringAppendF(std::string* dst, const char* format, ...)
PRINTF_FORMAT(2, 3); PRINTF_FORMAT(2, 3);
#if !defined(OS_ANDROID)
// TODO(evanm): this is only used in a few places in the code; // TODO(evanm): this is only used in a few places in the code;
// replace with string16 version. // replace with string16 version.
BASE_EXPORT void StringAppendF(std::wstring* dst, const wchar_t* format, ...) BASE_EXPORT void StringAppendF(std::wstring* dst, const wchar_t* format, ...)
WPRINTF_FORMAT(2, 3); WPRINTF_FORMAT(2, 3);
#endif
// Lower-level routine that takes a va_list and appends to a specified // Lower-level routine that takes a va_list and appends to a specified
// string. All other routines are just convenience wrappers around it. // string. All other routines are just convenience wrappers around it.
BASE_EXPORT void StringAppendV(std::string* dst, const char* format, va_list ap) BASE_EXPORT void StringAppendV(std::string* dst, const char* format, va_list ap)
PRINTF_FORMAT(2, 0); PRINTF_FORMAT(2, 0);
#if !defined(OS_ANDROID)
BASE_EXPORT void StringAppendV(std::wstring* dst, BASE_EXPORT void StringAppendV(std::wstring* dst,
const wchar_t* format, va_list ap) const wchar_t* format, va_list ap)
WPRINTF_FORMAT(2, 0); WPRINTF_FORMAT(2, 0);
#endif
} // namespace base } // namespace base
......
...@@ -28,7 +28,9 @@ TEST(StringPrintfTest, StringPrintfEmpty) { ...@@ -28,7 +28,9 @@ TEST(StringPrintfTest, StringPrintfEmpty) {
TEST(StringPrintfTest, StringPrintfMisc) { TEST(StringPrintfTest, StringPrintfMisc) {
EXPECT_EQ("123hello w", StringPrintf("%3d%2s %1c", 123, "hello", 'w')); EXPECT_EQ("123hello w", StringPrintf("%3d%2s %1c", 123, "hello", 'w'));
#if !defined(OS_ANDROID)
EXPECT_EQ(L"123hello w", StringPrintf(L"%3d%2ls %1lc", 123, L"hello", 'w')); EXPECT_EQ(L"123hello w", StringPrintf(L"%3d%2ls %1lc", 123, L"hello", 'w'));
#endif
} }
TEST(StringPrintfTest, StringAppendfEmptyString) { TEST(StringPrintfTest, StringAppendfEmptyString) {
...@@ -36,9 +38,11 @@ TEST(StringPrintfTest, StringAppendfEmptyString) { ...@@ -36,9 +38,11 @@ TEST(StringPrintfTest, StringAppendfEmptyString) {
StringAppendF(&value, "%s", ""); StringAppendF(&value, "%s", "");
EXPECT_EQ("Hello", value); EXPECT_EQ("Hello", value);
#if !defined(OS_ANDROID)
std::wstring valuew(L"Hello"); std::wstring valuew(L"Hello");
StringAppendF(&valuew, L"%ls", L""); StringAppendF(&valuew, L"%ls", L"");
EXPECT_EQ(L"Hello", valuew); EXPECT_EQ(L"Hello", valuew);
#endif
} }
TEST(StringPrintfTest, StringAppendfString) { TEST(StringPrintfTest, StringAppendfString) {
...@@ -46,9 +50,11 @@ TEST(StringPrintfTest, StringAppendfString) { ...@@ -46,9 +50,11 @@ TEST(StringPrintfTest, StringAppendfString) {
StringAppendF(&value, " %s", "World"); StringAppendF(&value, " %s", "World");
EXPECT_EQ("Hello World", value); EXPECT_EQ("Hello World", value);
#if !defined(OS_ANDROID)
std::wstring valuew(L"Hello"); std::wstring valuew(L"Hello");
StringAppendF(&valuew, L" %ls", L"World"); StringAppendF(&valuew, L" %ls", L"World");
EXPECT_EQ(L"Hello World", valuew); EXPECT_EQ(L"Hello World", valuew);
#endif
} }
TEST(StringPrintfTest, StringAppendfInt) { TEST(StringPrintfTest, StringAppendfInt) {
...@@ -56,9 +62,11 @@ TEST(StringPrintfTest, StringAppendfInt) { ...@@ -56,9 +62,11 @@ TEST(StringPrintfTest, StringAppendfInt) {
StringAppendF(&value, " %d", 123); StringAppendF(&value, " %d", 123);
EXPECT_EQ("Hello 123", value); EXPECT_EQ("Hello 123", value);
#if !defined(OS_ANDROID)
std::wstring valuew(L"Hello"); std::wstring valuew(L"Hello");
StringAppendF(&valuew, L" %d", 123); StringAppendF(&valuew, L" %d", 123);
EXPECT_EQ(L"Hello 123", valuew); EXPECT_EQ(L"Hello 123", valuew);
#endif
} }
// Make sure that lengths exactly around the initial buffer size are handled // Make sure that lengths exactly around the initial buffer size are handled
...@@ -79,10 +87,12 @@ TEST(StringPrintfTest, StringPrintfBounds) { ...@@ -79,10 +87,12 @@ TEST(StringPrintfTest, StringPrintfBounds) {
SStringPrintf(&out, "%s", src); SStringPrintf(&out, "%s", src);
EXPECT_STREQ(src, out.c_str()); EXPECT_STREQ(src, out.c_str());
#if !defined(OS_ANDROID)
srcw[kSrcLen - i] = 0; srcw[kSrcLen - i] = 0;
std::wstring outw; std::wstring outw;
SStringPrintf(&outw, L"%ls", srcw); SStringPrintf(&outw, L"%ls", srcw);
EXPECT_STREQ(srcw, outw.c_str()); EXPECT_STREQ(srcw, outw.c_str());
#endif
} }
} }
......
...@@ -215,6 +215,10 @@ class TestWriter { ...@@ -215,6 +215,10 @@ class TestWriter {
return console_->Write(txt); return console_->Write(txt);
} }
bool WriteInfoText(const std::string& txt) {
return WriteInfoText(UTF8ToWide(txt));
}
// Write a result block. It consist of two lines. The first line // Write a result block. It consist of two lines. The first line
// has [PASS] or [FAIL] with |name| and the second line has // has [PASS] or [FAIL] with |name| and the second line has
// the text in |extra|. // the text in |extra|.
...@@ -243,10 +247,10 @@ class TestWriter { ...@@ -243,10 +247,10 @@ class TestWriter {
DISALLOW_COPY_AND_ASSIGN(TestWriter); DISALLOW_COPY_AND_ASSIGN(TestWriter);
}; };
std::wstring PrintableUSCurrentTime() { std::string PrintableUSCurrentTime() {
base::Time::Exploded exploded = {0}; base::Time::Exploded exploded = {0};
base::Time::Now().UTCExplode(&exploded); base::Time::Now().UTCExplode(&exploded);
return base::StringPrintf(L"%d:%d:%d.%d:%d:%d", return base::StringPrintf("%d:%d:%d.%d:%d:%d",
exploded.year, exploded.year,
exploded.month, exploded.month,
exploded.day_of_month, exploded.day_of_month,
...@@ -269,8 +273,8 @@ class TestController : public DiagnosticsModel::Observer { ...@@ -269,8 +273,8 @@ class TestController : public DiagnosticsModel::Observer {
// Run all the diagnostics of |model| and invoke the view as the model // Run all the diagnostics of |model| and invoke the view as the model
// callbacks arrive. // callbacks arrive.
void Run(DiagnosticsModel* model) { void Run(DiagnosticsModel* model) {
std::wstring title(L"Chrome Diagnostics Mode ("); writer_->WriteInfoText(L"Chrome Diagnostics Mode (");
writer_->WriteInfoText(title.append(PrintableUSCurrentTime()) + L")\n"); writer_->WriteInfoText(PrintableUSCurrentTime() + ")\n");
if (!model) { if (!model) {
writer_->WriteResult(false, L"Diagnostics start", L"model is null"); writer_->WriteResult(false, L"Diagnostics start", L"model is null");
return; return;
...@@ -283,7 +287,7 @@ class TestController : public DiagnosticsModel::Observer { ...@@ -283,7 +287,7 @@ class TestController : public DiagnosticsModel::Observer {
ResourceBundle::InitSharedInstanceWithLocale(std::string(), NULL); ResourceBundle::InitSharedInstanceWithLocale(std::string(), NULL);
int count = model->GetTestAvailableCount(); int count = model->GetTestAvailableCount();
writer_->WriteInfoText(base::StringPrintf( writer_->WriteInfoText(base::StringPrintf(
L"%d available test(s)\n\n", count)); "%d available test(s)\n\n", count));
model->RunAll(this); model->RunAll(this);
} }
...@@ -303,7 +307,7 @@ class TestController : public DiagnosticsModel::Observer { ...@@ -303,7 +307,7 @@ class TestController : public DiagnosticsModel::Observer {
virtual void OnDoneAll(DiagnosticsModel* model) { virtual void OnDoneAll(DiagnosticsModel* model) {
if (writer_->failures() > 0) { if (writer_->failures() > 0) {
writer_->WriteInfoText(base::StringPrintf( writer_->WriteInfoText(base::StringPrintf(
L"DONE. %d failure(s)\n\n", writer_->failures())); "DONE. %d failure(s)\n\n", writer_->failures()));
} else { } else {
writer_->WriteInfoText(L"DONE\n\n"); writer_->WriteInfoText(L"DONE\n\n");
} }
......
...@@ -156,9 +156,8 @@ void SetChildProcessLoggingExperimentList() { ...@@ -156,9 +156,8 @@ void SetChildProcessLoggingExperimentList() {
GetFieldTrialSelectedGroupIds(&name_group_ids); GetFieldTrialSelectedGroupIds(&name_group_ids);
std::vector<string16> experiment_strings(name_group_ids.size()); std::vector<string16> experiment_strings(name_group_ids.size());
for (size_t i = 0; i < name_group_ids.size(); ++i) { for (size_t i = 0; i < name_group_ids.size(); ++i) {
// Wish there was a StringPrintf for string16... :-( experiment_strings[i] = UTF8ToUTF16(base::StringPrintf(
experiment_strings[i] = WideToUTF16(base::StringPrintf( "%x-%x", name_group_ids[i].name, name_group_ids[i].group));
L"%x-%x", name_group_ids[i].name, name_group_ids[i].group));
} }
child_process_logging::SetExperimentList(experiment_strings); child_process_logging::SetExperimentList(experiment_strings);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment