int main(int argc, char **argv) { fprintf(stderr, "%s: built at " __TIME__ "!@\n", __progname); #if defined(STATIC_CRASHER) debuggerd_callbacks_t callbacks = { .get_abort_message = []() { static struct { size_t size; char msg[32]; } msg; msg.size = strlen("dummy abort message"); memcpy(msg.msg, "dummy abort message", strlen("dummy abort message")); return reinterpret_cast<abort_msg_t*>(&msg); }, .post_dump = nullptr }; debuggerd_init(&callbacks); #endif if (argc > 1) { return do_action(argv[1]); } else { crash1(); } return 0; }
int main(int argc, char** argv) { while (true) { static struct option opts[] = { {"root_seclabel", required_argument, nullptr, 's'}, {"device_banner", required_argument, nullptr, 'b'}, {"version", no_argument, nullptr, 'v'}, }; int option_index = 0; int c = getopt_long(argc, argv, "", opts, &option_index); if (c == -1) { break; } switch (c) { case 's': root_seclabel = optarg; break; case 'b': adb_device_banner = optarg; break; case 'v': printf("Android Debug Bridge Daemon version %d.%d.%d %s\n", ADB_VERSION_MAJOR, ADB_VERSION_MINOR, ADB_SERVER_VERSION, ADB_REVISION); return 0; default: // getopt already prints "adbd: invalid option -- %c" for us. return 1; } } close_stdin(); debuggerd_init(nullptr); adb_trace_init(argv); D("Handling main()"); return adbd_main(DEFAULT_ADB_PORT); }