morpheus-base

morpheus base system
git clone git://git.2f30.org/morpheus-base.git
Log | Files | Refs

mesg.c (861B)


      1 /* See LICENSE file for copyright and license details. */
      2 #include <sys/stat.h>
      3 #include <sys/types.h>
      4 
      5 #include <stdio.h>
      6 #include <stdlib.h>
      7 #include <unistd.h>
      8 
      9 #include "util.h"
     10 
     11 static void
     12 usage(void)
     13 {
     14 	eprintf("usage: %s [n|y]\n", argv0);
     15 }
     16 
     17 int
     18 main(int argc, char *argv[])
     19 {
     20 	struct stat sb;
     21 	mode_t mode;
     22 
     23 	ARGBEGIN {
     24 	default:
     25 		usage();
     26 	} ARGEND;
     27 
     28 	if (argc > 1)
     29 		usage();
     30 
     31 	if (isatty(2) == 0)
     32 		eprintf("stderr: not a tty\n");
     33 
     34 	if (fstat(2, &sb) < 0)
     35 		eprintf("fstat stderr:");
     36 
     37 	if (argc == 0) {
     38 		puts(sb.st_mode & (S_IWGRP | S_IWOTH) ? "is y" : "is n");
     39 		return 0;
     40 	}
     41 
     42 	if (argv[0][0] == 'y' && argv[0][1] == '\0')
     43 		mode = sb.st_mode | S_IWGRP | S_IWOTH;
     44 	else if (argv[0][0] == 'n' && argv[0][1] == '\0')
     45 		mode = sb.st_mode & ~(S_IWGRP | S_IWOTH);
     46 	else
     47 		usage();
     48 
     49 	if (fchmod(2, mode) < 0)
     50 		eprintf("fchmod stderr:");
     51 
     52 	return 0;
     53 }