init/*: move applet/kbuild/config/help bits into applet source files
[oweals/busybox.git] / init / mesg.c
index 658c82447057900702249211d3e18e818ec03a5f..b560df205f7ea3d5e63c50d69f1ad65ec45bb783 100644 (file)
@@ -4,10 +4,28 @@
  *
  * Copyright (c) 2002 Manuel Novoa III  <mjn3@codepoet.org>
  *
- * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
+ * Licensed under GPLv2 or later, see file LICENSE in this source tree.
  */
 
-#include "busybox.h"
+//applet:IF_MESG(APPLET(mesg, _BB_DIR_USR_BIN, _BB_SUID_DROP))
+
+//kbuild:lib-$(CONFIG_MESG) += mesg.o
+
+//config:config MESG
+//config:      bool "mesg"
+//config:      default y
+//config:      help
+//config:        Mesg controls access to your terminal by others. It is typically
+//config:        used to allow or disallow other users to write to your terminal
+
+//usage:#define mesg_trivial_usage
+//usage:       "[y|n]"
+//usage:#define mesg_full_usage "\n\n"
+//usage:       "Control write access to your terminal\n"
+//usage:       "       y       Allow write access to your terminal\n"
+//usage:       "       n       Disallow write access to your terminal"
+
+#include "libbb.h"
 
 #ifdef USE_TTY_GROUP
 #define S_IWGRP_OR_S_IWOTH     S_IWGRP
 #define S_IWGRP_OR_S_IWOTH     (S_IWGRP | S_IWOTH)
 #endif
 
-int mesg_main(int argc, char *argv[])
+int mesg_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+int mesg_main(int argc UNUSED_PARAM, char **argv)
 {
        struct stat sb;
        const char *tty;
        char c = 0;
 
-       if (--argc == 0
-        || (argc == 1 && ((c = **++argv) == 'y' || c == 'n'))
+       argv++;
+
+       if (!argv[0]
+        || (!argv[1] && ((c = argv[0][0]) == 'y' || c == 'n'))
        ) {
-               tty = ttyname(STDERR_FILENO);
+               tty = xmalloc_ttyname(STDERR_FILENO);
                if (tty == NULL) {
                        tty = "ttyname";
                } else if (stat(tty, &sb) == 0) {
                        mode_t m;
-                       if (argc == 0) {
+                       if (c == 0) {
                                puts((sb.st_mode & (S_IWGRP|S_IWOTH)) ? "is y" : "is n");
                                return EXIT_SUCCESS;
                        }
@@ -39,7 +60,7 @@ int mesg_main(int argc, char *argv[])
                                return EXIT_SUCCESS;
                        }
                }
-               bb_perror_msg_and_die("%s", tty);
+               bb_simple_perror_msg_and_die(tty);
        }
        bb_show_usage();
 }