ubase

suckless linux base utils
git clone git://git.2f30.org/ubase
Log | Files | Refs | README | LICENSE

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:
MMakefile | 1+
Amesg.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; +}