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 18int mesg_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 19int 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} 49