Home | History | Annotate | Download | only in toolbox
      1 #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 
      9 static const char* services[] = {
     10   "netd",
     11   "surfaceflinger",
     12   "zygote",
     13   "zygote_secondary",
     14 };
     15 
     16 static 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 
     37 extern "C" int start_main(int argc, char* argv[]) {
     38   return start_stop(true, argc, argv);
     39 }
     40 
     41 extern "C" int stop_main(int argc, char* argv[]) {
     42   return start_stop(false, argc, argv);
     43 }
     44