- enum {
- OPT_PORT = 4 * ENABLE_FEATURE_TELNETD_STANDALONE,
- OPT_FOREGROUND = 0x10 * ENABLE_FEATURE_TELNETD_STANDALONE,
- OPT_INETD = 0x20 * ENABLE_FEATURE_TELNETD_STANDALONE,
- };
-
- opt = getopt32(argc, argv, "f:l:" USE_FEATURE_TELNETD_STANDALONE("p:b:Fi"),
- &issuefile, &loginpath
- USE_FEATURE_TELNETD_STANDALONE(, &opt_portnbr, &opt_bindaddr));
+ INIT_G();
+
+ /* -w NUM, and implies -F. -w and -i don't mix */
+ IF_FEATURE_TELNETD_INETD_WAIT(opt_complementary = "wF:w+:i--w:w--i";)
+ /* Even if !STANDALONE, we accept (and ignore) -i, thus people
+ * don't need to guess whether it's ok to pass -i to us */
+ opt = getopt32(argv, "f:l:Ki"
+ IF_FEATURE_TELNETD_STANDALONE("p:b:F")
+ IF_FEATURE_TELNETD_INETD_WAIT("Sw:"),
+ &G.issuefile, &G.loginpath
+ IF_FEATURE_TELNETD_STANDALONE(, &opt_portnbr, &opt_bindaddr)
+ IF_FEATURE_TELNETD_INETD_WAIT(, &sec_linger)
+ );
+ if (!IS_INETD /*&& !re_execed*/) {
+ /* inform that we start in standalone mode?
+ * May be useful when people forget to give -i */
+ /*bb_error_msg("listening for connections");*/
+ if (!(opt & OPT_FOREGROUND)) {
+ /* DAEMON_CHDIR_ROOT was giving inconsistent
+ * behavior with/without -F, -i */
+ bb_daemonize_or_rexec(0 /*was DAEMON_CHDIR_ROOT*/, argv);
+ }
+ }