blob: dc48c0c0c506922679e4c997225f0f87a952a750 [file] [log] [blame]
Elliott Hughes6e83c3d2015-06-05 16:43:23 -07001#include <error.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5#include <unistd.h>
6
7#include <cutils/properties.h>
8
9static const char* services[] = {
10 "netd",
11 "surfaceflinger",
12 "zygote",
13 "zygote_secondary",
14};
15
16static int start_stop(bool start, int argc, char* argv[]) {
17 if (getuid() != 0) error(1, 0, "must be root");
18 const char* property = start ? "ctl.start" : "ctl.stop";
19 if (argc > 2) {
20 error(1, 0, "usage: %s [SERVICE]\n", argv[0]);
21 } else if (argc == 2) {
22 property_set(property, argv[1]);
23 } else {
24 if (start) {
25 for (size_t i = 0; i < sizeof(services)/sizeof(services[0]); ++i) {
26 property_set(property, services[i]);
27 }
28 } else {
29 for (int i = sizeof(services)/sizeof(services[0]) - 1; i >= 0; --i) {
30 property_set(property, services[i]);
31 }
32 }
33 }
34 return 0;
35}
36
37extern "C" int start_main(int argc, char* argv[]) {
38 return start_stop(true, argc, argv);
39}
40
41extern "C" int stop_main(int argc, char* argv[]) {
42 return start_stop(false, argc, argv);
43}