int su_main(int argc, char *argv[]) { int ppid = getppid(); if ((geteuid() != AID_ROOT && getuid() != AID_ROOT) || (get_api_version() >= 18 && getuid() == AID_SHELL) || get_api_version() >= 19) { // attempt to connect to daemon... LOGD("starting daemon client %d %d", getuid(), geteuid()); return connect_daemon(argc, argv, ppid); } else { return su_main_nodaemon(argc, argv); } }
static int run_daemon_child(int infd, int outfd, int errfd, int argc, char** argv) { if (-1 == dup2(outfd, STDOUT_FILENO)) { PLOGE("dup2 child outfd"); exit(-1); } if (-1 == dup2(errfd, STDERR_FILENO)) { PLOGE("dup2 child errfd"); exit(-1); } if (-1 == dup2(infd, STDIN_FILENO)) { PLOGE("dup2 child infd"); exit(-1); } close(infd); close(outfd); close(errfd); return su_main_nodaemon(argc, argv); }