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

Unified Diff: tools/on_demand_service_tool.mm

Issue 804913003: tools: Move Mac-specific tools to tools/mac (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Created 6 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/on_demand_service_tool.ad ('k') | tools/tools.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/on_demand_service_tool.mm
diff --git a/tools/on_demand_service_tool.mm b/tools/on_demand_service_tool.mm
deleted file mode 100644
index 0b22cbd11fa30568d02846c32cce64ce9264e88b..0000000000000000000000000000000000000000
--- a/tools/on_demand_service_tool.mm
+++ /dev/null
@@ -1,197 +0,0 @@
-// Copyright 2014 The Crashpad Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include <CoreFoundation/CoreFoundation.h>
-#import <Foundation/Foundation.h>
-#include <getopt.h>
-#include <launch.h>
-#include <libgen.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <string>
-#include <vector>
-
-#include "base/mac/foundation_util.h"
-#include "base/strings/sys_string_conversions.h"
-#include "tools/tool_support.h"
-#include "util/mac/service_management.h"
-#include "util/stdlib/objc.h"
-
-namespace crashpad {
-namespace {
-
-void Usage(const std::string& me) {
- fprintf(stderr,
-"Usage: %s -L -l LABEL [OPTION]... COMMAND [ARG]...\n"
-" %s -U -l LABEL\n"
-"Load and unload on-demand Mach services from launchd.\n"
-"\n"
-" -L, --load load (submit) the job identified by --label;\n"
-" COMMAND must be specified\n"
-" -U, --unload unload (remove) the job identified by --label\n"
-" -l, --label=LABEL identify the job to launchd with LABEL\n"
-" -m, --mach-service=SERVICE register SERVICE with the bootstrap server\n"
-" --help display this help and exit\n"
-" --version output version information and exit\n",
- me.c_str(),
- me.c_str());
- ToolSupport::UsageTail(me);
-}
-
-int OnDemandServiceToolMain(int argc, char* argv[]) {
- const std::string me(basename(argv[0]));
-
- enum Operation {
- kOperationUnknown = 0,
- kOperationLoadJob,
- kOperationUnloadJob,
- };
-
- enum OptionFlags {
- // “Short” (single-character) options.
- kOptionLoadJob = 'L',
- kOptionUnloadJob = 'U',
- kOptionJobLabel = 'l',
- kOptionMachService = 'm',
-
- // Long options without short equivalents.
- kOptionLastChar = 255,
-
- // Standard options.
- kOptionHelp = -2,
- kOptionVersion = -3,
- };
-
- struct {
- Operation operation;
- std::string job_label;
- std::vector<std::string> mach_services;
- } options = {};
-
- const struct option long_options[] = {
- {"load", no_argument, nullptr, kOptionLoadJob},
- {"unload", no_argument, nullptr, kOptionUnloadJob},
- {"label", required_argument, nullptr, kOptionJobLabel},
- {"mach-service", required_argument, nullptr, kOptionMachService},
- {"help", no_argument, nullptr, kOptionHelp},
- {"version", no_argument, nullptr, kOptionVersion},
- {nullptr, 0, nullptr, 0},
- };
-
- int opt;
- while ((opt = getopt_long(argc, argv, "+LUl:m:", long_options, nullptr)) !=
- -1) {
- switch (opt) {
- case kOptionLoadJob:
- options.operation = kOperationLoadJob;
- break;
- case kOptionUnloadJob:
- options.operation = kOperationUnloadJob;
- break;
- case kOptionJobLabel:
- options.job_label = optarg;
- break;
- case kOptionMachService:
- options.mach_services.push_back(optarg);
- break;
- case kOptionHelp:
- Usage(me);
- return EXIT_SUCCESS;
- case kOptionVersion:
- ToolSupport::Version(me);
- return EXIT_SUCCESS;
- default:
- ToolSupport::UsageHint(me, nullptr);
- return EXIT_FAILURE;
- }
- }
- argc -= optind;
- argv += optind;
-
- if (options.job_label.empty()) {
- ToolSupport::UsageHint(me, "must provide -l");
- return EXIT_FAILURE;
- }
-
- switch (options.operation) {
- case kOperationLoadJob: {
- if (argc == 0) {
- ToolSupport::UsageHint(me, "must provide COMMAND with -L");
- return EXIT_FAILURE;
- }
-
- @autoreleasepool {
- NSString* job_label = base::SysUTF8ToNSString(options.job_label);
-
- NSMutableArray* command = [NSMutableArray arrayWithCapacity:argc];
- for (int index = 0; index < argc; ++index) {
- NSString* argument = base::SysUTF8ToNSString(argv[index]);
- [command addObject:argument];
- }
-
- NSDictionary* job_dictionary = @{
- @LAUNCH_JOBKEY_LABEL : job_label,
- @LAUNCH_JOBKEY_PROGRAMARGUMENTS : command,
- };
-
- if (!options.mach_services.empty()) {
- NSMutableDictionary* mach_services = [NSMutableDictionary
- dictionaryWithCapacity:options.mach_services.size()];
- for (std::string mach_service : options.mach_services) {
- NSString* mach_service_ns = base::SysUTF8ToNSString(mach_service);
- [mach_services setObject:@YES forKey:mach_service_ns];
- }
-
- NSMutableDictionary* mutable_job_dictionary =
- [[job_dictionary mutableCopy] autorelease];
- [mutable_job_dictionary setObject:mach_services
- forKey:@LAUNCH_JOBKEY_MACHSERVICES];
- job_dictionary = mutable_job_dictionary;
- }
-
- CFDictionaryRef job_dictionary_cf =
- base::mac::NSToCFCast(job_dictionary);
- if (!ServiceManagementSubmitJob(job_dictionary_cf)) {
- fprintf(stderr, "%s: failed to submit job\n", me.c_str());
- return EXIT_FAILURE;
- }
- }
-
- return EXIT_SUCCESS;
- }
-
- case kOperationUnloadJob: {
- if (!ServiceManagementRemoveJob(options.job_label, true)) {
- fprintf(stderr, "%s: failed to remove job\n", me.c_str());
- return EXIT_FAILURE;
- }
-
- return EXIT_SUCCESS;
- }
-
- default: {
- ToolSupport::UsageHint(me, "must provide -L or -U");
- return EXIT_FAILURE;
- }
- }
-}
-
-} // namespace
-} // namespace crashpad
-
-int main(int argc, char* argv[]) {
- return crashpad::OnDemandServiceToolMain(argc, argv);
-}
« no previous file with comments | « tools/on_demand_service_tool.ad ('k') | tools/tools.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698