mass renaming Kbuild -> Kbuild.src, Config.in -> Config.src
[platform/upstream/busybox.git] / init / mesg.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * mesg implementation for busybox
4  *
5  * Copyright (c) 2002 Manuel Novoa III  <mjn3@codepoet.org>
6  *
7  * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
8  */
9
10 #include "libbb.h"
11
12 #ifdef USE_TTY_GROUP
13 #define S_IWGRP_OR_S_IWOTH      S_IWGRP
14 #else
15 #define S_IWGRP_OR_S_IWOTH      (S_IWGRP | S_IWOTH)
16 #endif
17
18 int mesg_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
19 int mesg_main(int argc UNUSED_PARAM, char **argv)
20 {
21         struct stat sb;
22         const char *tty;
23         char c = 0;
24
25         argv++;
26
27         if (!argv[0]
28          || (!argv[1] && ((c = argv[0][0]) == 'y' || c == 'n'))
29         ) {
30                 tty = xmalloc_ttyname(STDERR_FILENO);
31                 if (tty == NULL) {
32                         tty = "ttyname";
33                 } else if (stat(tty, &sb) == 0) {
34                         mode_t m;
35                         if (c == 0) {
36                                 puts((sb.st_mode & (S_IWGRP|S_IWOTH)) ? "is y" : "is n");
37                                 return EXIT_SUCCESS;
38                         }
39                         m = (c == 'y') ? sb.st_mode | S_IWGRP_OR_S_IWOTH
40                                        : sb.st_mode & ~(S_IWGRP|S_IWOTH);
41                         if (chmod(tty, m) == 0) {
42                                 return EXIT_SUCCESS;
43                         }
44                 }
45                 bb_simple_perror_msg_and_die(tty);
46         }
47         bb_show_usage();
48 }