OLD | NEW |
1 // Copyright 2015 The Crashpad Authors. All rights reserved. | 1 // Copyright 2015 The Crashpad Authors. All rights reserved. |
2 // | 2 // |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
6 // | 6 // |
7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
8 // | 8 // |
9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
(...skipping 20 matching lines...) Expand all Loading... |
31 #include "base/strings/string_util.h" | 31 #include "base/strings/string_util.h" |
32 #include "base/strings/utf_string_conversions.h" | 32 #include "base/strings/utf_string_conversions.h" |
33 #include "build/build_config.h" | 33 #include "build/build_config.h" |
34 #include "client/crash_report_database.h" | 34 #include "client/crash_report_database.h" |
35 #include "client/settings.h" | 35 #include "client/settings.h" |
36 #include "tools/tool_support.h" | 36 #include "tools/tool_support.h" |
37 #include "util/file/file_io.h" | 37 #include "util/file/file_io.h" |
38 #include "util/file/file_reader.h" | 38 #include "util/file/file_reader.h" |
39 #include "util/misc/uuid.h" | 39 #include "util/misc/uuid.h" |
40 | 40 |
41 #if defined(OS_POSIX) | |
42 base::FilePath::StringType UTF8ToFilePathStringType(const char* path) { | |
43 return path; | |
44 } | |
45 #elif defined(OS_WIN) | |
46 base::FilePath::StringType UTF8ToFilePathStringType(const char* path) { | |
47 return base::UTF8ToUTF16(path); | |
48 } | |
49 #endif | |
50 | |
51 namespace crashpad { | 41 namespace crashpad { |
52 namespace { | 42 namespace { |
53 | 43 |
54 void Usage(const base::FilePath& me) { | 44 void Usage(const base::FilePath& me) { |
55 fprintf(stderr, | 45 fprintf(stderr, |
56 "Usage: %" PRFilePath " [OPTION]... PID\n" | 46 "Usage: %" PRFilePath " [OPTION]... PID\n" |
57 "Operate on Crashpad crash report databases.\n" | 47 "Operate on Crashpad crash report databases.\n" |
58 "\n" | 48 "\n" |
59 " -d, --database=PATH operate on the crash report database at PATH\
n" | 49 " -d, --database=PATH operate on the crash report database at PATH\
n" |
60 " --show-client-id show the client ID\n" | 50 " --show-client-id show the client ID\n" |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 | 236 |
247 for (const CrashReportDatabase::Report& report : reports) { | 237 for (const CrashReportDatabase::Report& report : reports) { |
248 printf("%s%s%s\n", spaces.c_str(), report.uuid.ToString().c_str(), colon); | 238 printf("%s%s%s\n", spaces.c_str(), report.uuid.ToString().c_str(), colon); |
249 if (options.show_all_report_info) { | 239 if (options.show_all_report_info) { |
250 ShowReport(report, space_count + 2, options.utc); | 240 ShowReport(report, space_count + 2, options.utc); |
251 } | 241 } |
252 } | 242 } |
253 } | 243 } |
254 | 244 |
255 int DatabaseUtilMain(int argc, char* argv[]) { | 245 int DatabaseUtilMain(int argc, char* argv[]) { |
256 const base::FilePath me( | 246 const base::FilePath argv0( |
257 base::FilePath(UTF8ToFilePathStringType(argv[0])).BaseName()); | 247 ToolSupport::CommandLineArgumentToFilePathStringType(argv[0])); |
| 248 const base::FilePath me(argv0.BaseName()); |
258 | 249 |
259 enum OptionFlags { | 250 enum OptionFlags { |
260 // “Short” (single-character) options. | 251 // “Short” (single-character) options. |
261 kOptionDatabase = 'd', | 252 kOptionDatabase = 'd', |
262 | 253 |
263 // Long options without short equivalents. | 254 // Long options without short equivalents. |
264 kOptionLastChar = 255, | 255 kOptionLastChar = 255, |
265 kOptionShowClientID, | 256 kOptionShowClientID, |
266 kOptionShowUploadsEnabled, | 257 kOptionShowUploadsEnabled, |
267 kOptionShowLastUploadAttemptTime, | 258 kOptionShowLastUploadAttemptTime, |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
357 return EXIT_FAILURE; | 348 return EXIT_FAILURE; |
358 } | 349 } |
359 options.has_set_uploads_enabled = true; | 350 options.has_set_uploads_enabled = true; |
360 break; | 351 break; |
361 } | 352 } |
362 case kOptionSetLastUploadAttemptTime: { | 353 case kOptionSetLastUploadAttemptTime: { |
363 options.set_last_upload_attempt_time_string = optarg; | 354 options.set_last_upload_attempt_time_string = optarg; |
364 break; | 355 break; |
365 } | 356 } |
366 case kOptionNewReport: { | 357 case kOptionNewReport: { |
367 options.new_report_paths.push_back( | 358 options.new_report_paths.push_back(base::FilePath( |
368 base::FilePath(UTF8ToFilePathStringType(optarg))); | 359 ToolSupport::CommandLineArgumentToFilePathStringType(optarg))); |
369 break; | 360 break; |
370 } | 361 } |
371 case kOptionUTC: { | 362 case kOptionUTC: { |
372 options.utc = true; | 363 options.utc = true; |
373 break; | 364 break; |
374 } | 365 } |
375 case kOptionHelp: { | 366 case kOptionHelp: { |
376 Usage(me); | 367 Usage(me); |
377 return EXIT_SUCCESS; | 368 return EXIT_SUCCESS; |
378 } | 369 } |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
418 const size_t set_operations = | 409 const size_t set_operations = |
419 options.has_set_uploads_enabled + | 410 options.has_set_uploads_enabled + |
420 (options.set_last_upload_attempt_time_string != nullptr); | 411 (options.set_last_upload_attempt_time_string != nullptr); |
421 | 412 |
422 if (show_operations + set_operations == 0) { | 413 if (show_operations + set_operations == 0) { |
423 ToolSupport::UsageHint(me, "nothing to do"); | 414 ToolSupport::UsageHint(me, "nothing to do"); |
424 return EXIT_FAILURE; | 415 return EXIT_FAILURE; |
425 } | 416 } |
426 | 417 |
427 scoped_ptr<CrashReportDatabase> database(CrashReportDatabase::Initialize( | 418 scoped_ptr<CrashReportDatabase> database(CrashReportDatabase::Initialize( |
428 base::FilePath(UTF8ToFilePathStringType(options.database)))); | 419 base::FilePath(ToolSupport::CommandLineArgumentToFilePathStringType( |
| 420 options.database)))); |
429 if (!database) { | 421 if (!database) { |
430 return EXIT_FAILURE; | 422 return EXIT_FAILURE; |
431 } | 423 } |
432 | 424 |
433 Settings* settings = database->GetSettings(); | 425 Settings* settings = database->GetSettings(); |
434 | 426 |
435 // Handle the “show” options before the “set” options so that when they’re | 427 // Handle the “show” options before the “set” options so that when they’re |
436 // specified together, the “show” option reflects the initial state. | 428 // specified together, the “show” option reflects the initial state. |
437 | 429 |
438 if (options.show_client_id) { | 430 if (options.show_client_id) { |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
578 | 570 |
579 } // namespace | 571 } // namespace |
580 } // namespace crashpad | 572 } // namespace crashpad |
581 | 573 |
582 #if defined(OS_POSIX) | 574 #if defined(OS_POSIX) |
583 int main(int argc, char* argv[]) { | 575 int main(int argc, char* argv[]) { |
584 return crashpad::DatabaseUtilMain(argc, argv); | 576 return crashpad::DatabaseUtilMain(argc, argv); |
585 } | 577 } |
586 #elif defined(OS_WIN) | 578 #elif defined(OS_WIN) |
587 int wmain(int argc, wchar_t* argv[]) { | 579 int wmain(int argc, wchar_t* argv[]) { |
588 scoped_ptr<char*[]> argv_as_utf8(new char*[argc]); | 580 return crashpad::ToolSupport::Wmain(argc, argv, crashpad::DatabaseUtilMain); |
589 std::vector<std::string> storage; | |
590 storage.reserve(argc); | |
591 for (int i = 0; i < argc; ++i) { | |
592 storage.push_back(base::UTF16ToUTF8(argv[i])); | |
593 argv_as_utf8[i] = &storage[i][0]; | |
594 } | |
595 return crashpad::DatabaseUtilMain(argc, argv_as_utf8.get()); | |
596 } | 581 } |
597 #endif // OS_POSIX | 582 #endif // OS_POSIX |
OLD | NEW |