/* start.c - Start/stop system services.
 *
 * Copyright 2016 The Android Open Source Project

USE_START(NEWTOY(start, "", TOYFLAG_USR|TOYFLAG_SBIN))
USE_STOP(NEWTOY(stop, "", TOYFLAG_USR|TOYFLAG_SBIN))

config START
  bool "start"
  depends on TOYBOX_ON_ANDROID
  default y
  help
    usage: start [SERVICE...]

    Starts the given system service, or netd/surfaceflinger/zygotes.

config STOP
  bool "stop"
  depends on TOYBOX_ON_ANDROID
  default y
  help
    usage: stop [SERVICE...]

    Stop the given system service, or netd/surfaceflinger/zygotes.
*/

#define FOR_start
#include "toys.h"

#include <sys/system_properties.h>

static void start_stop(int start)
{
  char *property = start ? "ctl.start" : "ctl.stop";
  // null terminated in both directions
  char *services[] = {0,"netd","surfaceflinger","zygote","zygote_secondary",0},
       **ss = toys.optargs;
  int direction = 1;

  if (getuid()) error_exit("must be root");

  if (!*ss) {
    // If we don't have optargs, iterate through services forward/backward.
    ss = services+1;
    if (!start) ss = services+ARRAY_LEN(services)-2, direction = -1;
  }

  for (; *ss; ss += direction)
    if (__system_property_set(property, *ss))
      error_exit("failed to set property '%s' to '%s'", property, *ss);
}

void start_main(void)
{
  start_stop(1);
}

void stop_main(void)
{
  start_stop(0);
}
