commit 47092bd9b600d71a30af1f074742c9fe240c9176
parent 2e3fae67e20224ae1a65e0399e6c91b2eb7ab2b2
Author: sin <sin@2f30.org>
Date: Sat, 26 Jul 2014 15:31:44 +0100
Add mesg(1)
No manpage yet.
Diffstat:
M | Makefile | | | 1 | + |
A | mesg.c | | | 53 | +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2 files changed, 54 insertions(+), 0 deletions(-)
diff --git 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
@@ -0,0 +1,53 @@
+/* See LICENSE file for copyright and license details. */
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#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;
+}