diff --git a/Makefile b/Makefile index 37d4ec3..992c570 100644 --- a/Makefile +++ b/Makefile @@ -53,6 +53,7 @@ SRC = \ login.c \ lsmod.c \ lsusb.c \ + mesg.c \ mknod.c \ mkswap.c \ mount.c \ diff --git a/mesg.c b/mesg.c new file mode 100644 index 0000000..a44a098 --- /dev/null +++ b/mesg.c @@ -0,0 +1,53 @@ +/* See LICENSE file for copyright and license details. */ +#include +#include + +#include +#include +#include + +#include "util.h" + +static void +usage(void) +{ + eprintf("usage: %s [n|y]\n", argv0); +} + +int +main(int argc, char *argv[]) +{ + struct stat sb; + mode_t mode; + + ARGBEGIN { + default: + usage(); + } ARGEND; + + if (argc > 1) + usage(); + + if (isatty(STDIN_FILENO) == 0) + eprintf("stdin: not a tty\n"); + + if (fstat(STDIN_FILENO, &sb) < 0) + eprintf("fstat stdin:"); + + if (argc == 0) { + puts(sb.st_mode & (S_IWGRP | S_IWOTH) ? "is y" : "is n"); + return EXIT_SUCCESS; + } + + if (argv[0][0] == 'y') + mode = sb.st_mode | S_IWGRP | S_IWOTH; + else if (argv[0][0] == 'n') + mode = sb.st_mode & ~(S_IWGRP | S_IWOTH); + else + usage(); + + if (fchmod(STDIN_FILENO, mode) < 0) + eprintf("fchmod stdin:"); + + return EXIT_SUCCESS; +}