| 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 28 matching lines...) Expand all Loading... |
| 39 #include "util/misc/uuid.h" | 39 #include "util/misc/uuid.h" |
| 40 | 40 |
| 41 namespace crashpad { | 41 namespace crashpad { |
| 42 namespace { | 42 namespace { |
| 43 | 43 |
| 44 void Usage(const base::FilePath& me) { | 44 void Usage(const base::FilePath& me) { |
| 45 fprintf(stderr, | 45 fprintf(stderr, |
| 46 "Usage: %" PRFilePath " [OPTION]... PID\n" | 46 "Usage: %" PRFilePath " [OPTION]... PID\n" |
| 47 "Operate on Crashpad crash report databases.\n" | 47 "Operate on Crashpad crash report databases.\n" |
| 48 "\n" | 48 "\n" |
| 49 " --create allow database at PATH to be created\n" |
| 49 " -d, --database=PATH operate on the crash report database at PATH\
n" | 50 " -d, --database=PATH operate on the crash report database at PATH\
n" |
| 50 " --show-client-id show the client ID\n" | 51 " --show-client-id show the client ID\n" |
| 51 " --show-uploads-enabled show whether uploads are enabled\n" | 52 " --show-uploads-enabled show whether uploads are enabled\n" |
| 52 " --show-last-upload-attempt-time\n" | 53 " --show-last-upload-attempt-time\n" |
| 53 " show the last-upload-attempt time\n" | 54 " show the last-upload-attempt time\n" |
| 54 " --show-pending-reports show reports eligible for upload\n" | 55 " --show-pending-reports show reports eligible for upload\n" |
| 55 " --show-completed-reports show reports not eligible for upload\n" | 56 " --show-completed-reports show reports not eligible for upload\n" |
| 56 " --show-all-report-info with --show-*-reports, show more information\
n" | 57 " --show-all-report-info with --show-*-reports, show more information\
n" |
| 57 " --show-report=UUID show report stored under UUID\n" | 58 " --show-report=UUID show report stored under UUID\n" |
| 58 " --set-uploads-enabled=BOOL enable or disable uploads\n" | 59 " --set-uploads-enabled=BOOL enable or disable uploads\n" |
| 59 " --set-last-upload-attempt-time=TIME\n" | 60 " --set-last-upload-attempt-time=TIME\n" |
| 60 " set the last-upload-attempt time to TIME\n" | 61 " set the last-upload-attempt time to TIME\n" |
| 61 " --new-report=PATH submit a new report at PATH, or - for stdin\n
" | 62 " --new-report=PATH submit a new report at PATH, or - for stdin\n
" |
| 62 " --utc show and set UTC times instead of local\n" | 63 " --utc show and set UTC times instead of local\n" |
| 63 " --help display this help and exit\n" | 64 " --help display this help and exit\n" |
| 64 " --version output version information and exit\n", | 65 " --version output version information and exit\n", |
| 65 me.value().c_str()); | 66 me.value().c_str()); |
| 66 ToolSupport::UsageTail(me); | 67 ToolSupport::UsageTail(me); |
| 67 } | 68 } |
| 68 | 69 |
| 69 struct Options { | 70 struct Options { |
| 70 std::vector<UUID> show_reports; | 71 std::vector<UUID> show_reports; |
| 71 std::vector<base::FilePath> new_report_paths; | 72 std::vector<base::FilePath> new_report_paths; |
| 72 const char* database; | 73 const char* database; |
| 73 const char* set_last_upload_attempt_time_string; | 74 const char* set_last_upload_attempt_time_string; |
| 74 time_t set_last_upload_attempt_time; | 75 time_t set_last_upload_attempt_time; |
| 76 bool create; |
| 75 bool show_client_id; | 77 bool show_client_id; |
| 76 bool show_uploads_enabled; | 78 bool show_uploads_enabled; |
| 77 bool show_last_upload_attempt_time; | 79 bool show_last_upload_attempt_time; |
| 78 bool show_pending_reports; | 80 bool show_pending_reports; |
| 79 bool show_completed_reports; | 81 bool show_completed_reports; |
| 80 bool show_all_report_info; | 82 bool show_all_report_info; |
| 81 bool set_uploads_enabled; | 83 bool set_uploads_enabled; |
| 82 bool has_set_uploads_enabled; | 84 bool has_set_uploads_enabled; |
| 83 bool utc; | 85 bool utc; |
| 84 }; | 86 }; |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 const base::FilePath argv0( | 248 const base::FilePath argv0( |
| 247 ToolSupport::CommandLineArgumentToFilePathStringType(argv[0])); | 249 ToolSupport::CommandLineArgumentToFilePathStringType(argv[0])); |
| 248 const base::FilePath me(argv0.BaseName()); | 250 const base::FilePath me(argv0.BaseName()); |
| 249 | 251 |
| 250 enum OptionFlags { | 252 enum OptionFlags { |
| 251 // “Short” (single-character) options. | 253 // “Short” (single-character) options. |
| 252 kOptionDatabase = 'd', | 254 kOptionDatabase = 'd', |
| 253 | 255 |
| 254 // Long options without short equivalents. | 256 // Long options without short equivalents. |
| 255 kOptionLastChar = 255, | 257 kOptionLastChar = 255, |
| 258 kOptionCreate, |
| 256 kOptionShowClientID, | 259 kOptionShowClientID, |
| 257 kOptionShowUploadsEnabled, | 260 kOptionShowUploadsEnabled, |
| 258 kOptionShowLastUploadAttemptTime, | 261 kOptionShowLastUploadAttemptTime, |
| 259 kOptionShowPendingReports, | 262 kOptionShowPendingReports, |
| 260 kOptionShowCompletedReports, | 263 kOptionShowCompletedReports, |
| 261 kOptionShowAllReportInfo, | 264 kOptionShowAllReportInfo, |
| 262 kOptionShowReport, | 265 kOptionShowReport, |
| 263 kOptionSetUploadsEnabled, | 266 kOptionSetUploadsEnabled, |
| 264 kOptionSetLastUploadAttemptTime, | 267 kOptionSetLastUploadAttemptTime, |
| 265 kOptionNewReport, | 268 kOptionNewReport, |
| 266 kOptionUTC, | 269 kOptionUTC, |
| 267 | 270 |
| 268 // Standard options. | 271 // Standard options. |
| 269 kOptionHelp = -2, | 272 kOptionHelp = -2, |
| 270 kOptionVersion = -3, | 273 kOptionVersion = -3, |
| 271 }; | 274 }; |
| 272 | 275 |
| 273 const option long_options[] = { | 276 const option long_options[] = { |
| 277 {"create", no_argument, nullptr, kOptionCreate}, |
| 274 {"database", required_argument, nullptr, kOptionDatabase}, | 278 {"database", required_argument, nullptr, kOptionDatabase}, |
| 275 {"show-client-id", no_argument, nullptr, kOptionShowClientID}, | 279 {"show-client-id", no_argument, nullptr, kOptionShowClientID}, |
| 276 {"show-uploads-enabled", no_argument, nullptr, kOptionShowUploadsEnabled}, | 280 {"show-uploads-enabled", no_argument, nullptr, kOptionShowUploadsEnabled}, |
| 277 {"show-last-upload-attempt-time", | 281 {"show-last-upload-attempt-time", |
| 278 no_argument, | 282 no_argument, |
| 279 nullptr, | 283 nullptr, |
| 280 kOptionShowLastUploadAttemptTime}, | 284 kOptionShowLastUploadAttemptTime}, |
| 281 {"show-pending-reports", no_argument, nullptr, kOptionShowPendingReports}, | 285 {"show-pending-reports", no_argument, nullptr, kOptionShowPendingReports}, |
| 282 {"show-completed-reports", | 286 {"show-completed-reports", |
| 283 no_argument, | 287 no_argument, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 298 {"help", no_argument, nullptr, kOptionHelp}, | 302 {"help", no_argument, nullptr, kOptionHelp}, |
| 299 {"version", no_argument, nullptr, kOptionVersion}, | 303 {"version", no_argument, nullptr, kOptionVersion}, |
| 300 {nullptr, 0, nullptr, 0}, | 304 {nullptr, 0, nullptr, 0}, |
| 301 }; | 305 }; |
| 302 | 306 |
| 303 Options options = {}; | 307 Options options = {}; |
| 304 | 308 |
| 305 int opt; | 309 int opt; |
| 306 while ((opt = getopt_long(argc, argv, "d:", long_options, nullptr)) != -1) { | 310 while ((opt = getopt_long(argc, argv, "d:", long_options, nullptr)) != -1) { |
| 307 switch (opt) { | 311 switch (opt) { |
| 312 case kOptionCreate: { |
| 313 options.create = true; |
| 314 break; |
| 315 } |
| 308 case kOptionDatabase: { | 316 case kOptionDatabase: { |
| 309 options.database = optarg; | 317 options.database = optarg; |
| 310 break; | 318 break; |
| 311 } | 319 } |
| 312 case kOptionShowClientID: { | 320 case kOptionShowClientID: { |
| 313 options.show_client_id = true; | 321 options.show_client_id = true; |
| 314 break; | 322 break; |
| 315 } | 323 } |
| 316 case kOptionShowUploadsEnabled: { | 324 case kOptionShowUploadsEnabled: { |
| 317 options.show_uploads_enabled = true; | 325 options.show_uploads_enabled = true; |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 options.show_uploads_enabled + | 411 options.show_uploads_enabled + |
| 404 options.show_last_upload_attempt_time + | 412 options.show_last_upload_attempt_time + |
| 405 options.show_pending_reports + | 413 options.show_pending_reports + |
| 406 options.show_completed_reports + | 414 options.show_completed_reports + |
| 407 options.show_reports.size() + | 415 options.show_reports.size() + |
| 408 options.new_report_paths.size(); | 416 options.new_report_paths.size(); |
| 409 const size_t set_operations = | 417 const size_t set_operations = |
| 410 options.has_set_uploads_enabled + | 418 options.has_set_uploads_enabled + |
| 411 (options.set_last_upload_attempt_time_string != nullptr); | 419 (options.set_last_upload_attempt_time_string != nullptr); |
| 412 | 420 |
| 413 if (show_operations + set_operations == 0) { | 421 if ((options.create ? 1 : 0) + show_operations + set_operations == 0) { |
| 414 ToolSupport::UsageHint(me, "nothing to do"); | 422 ToolSupport::UsageHint(me, "nothing to do"); |
| 415 return EXIT_FAILURE; | 423 return EXIT_FAILURE; |
| 416 } | 424 } |
| 417 | 425 |
| 418 scoped_ptr<CrashReportDatabase> database(CrashReportDatabase::Initialize( | 426 scoped_ptr<CrashReportDatabase> database; |
| 419 base::FilePath(ToolSupport::CommandLineArgumentToFilePathStringType( | 427 base::FilePath database_path = base::FilePath( |
| 420 options.database)))); | 428 ToolSupport::CommandLineArgumentToFilePathStringType(options.database)); |
| 429 if (options.create) { |
| 430 database = CrashReportDatabase::Initialize(database_path); |
| 431 } else { |
| 432 database = CrashReportDatabase::InitializeWithoutCreating(database_path); |
| 433 } |
| 421 if (!database) { | 434 if (!database) { |
| 422 return EXIT_FAILURE; | 435 return EXIT_FAILURE; |
| 423 } | 436 } |
| 424 | 437 |
| 425 Settings* settings = database->GetSettings(); | 438 Settings* settings = database->GetSettings(); |
| 426 | 439 |
| 427 // Handle the “show” options before the “set” options so that when they’re | 440 // Handle the “show” options before the “set” options so that when they’re |
| 428 // specified together, the “show” option reflects the initial state. | 441 // specified together, the “show” option reflects the initial state. |
| 429 | 442 |
| 430 if (options.show_client_id) { | 443 if (options.show_client_id) { |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 592 | 605 |
| 593 #if defined(OS_POSIX) | 606 #if defined(OS_POSIX) |
| 594 int main(int argc, char* argv[]) { | 607 int main(int argc, char* argv[]) { |
| 595 return crashpad::DatabaseUtilMain(argc, argv); | 608 return crashpad::DatabaseUtilMain(argc, argv); |
| 596 } | 609 } |
| 597 #elif defined(OS_WIN) | 610 #elif defined(OS_WIN) |
| 598 int wmain(int argc, wchar_t* argv[]) { | 611 int wmain(int argc, wchar_t* argv[]) { |
| 599 return crashpad::ToolSupport::Wmain(argc, argv, crashpad::DatabaseUtilMain); | 612 return crashpad::ToolSupport::Wmain(argc, argv, crashpad::DatabaseUtilMain); |
| 600 } | 613 } |
| 601 #endif // OS_POSIX | 614 #endif // OS_POSIX |
| OLD | NEW |