less -> more
[unix-history] / usr / src / usr.bin / mesg / mesg.c
... / ...
CommitLineData
1/*
2 * Copyright (c) 1987 Regents of the University of California.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley. The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16 */
17
18#ifndef lint
19char copyright[] =
20"@(#) Copyright (c) 1987 Regents of the University of California.\n\
21 All rights reserved.\n";
22#endif /* not lint */
23
24#ifndef lint
25static char sccsid[] = "@(#)mesg.c 4.5 (Berkeley) %G%";
26#endif /* not lint */
27
28/*
29 * mesg -- set current tty to accept or
30 * forbid write permission.
31 *
32 * mesg [y] [n]
33 * y allow messages
34 * n forbid messages
35 */
36
37#include <sys/types.h>
38#include <sys/stat.h>
39#include <stdio.h>
40
41static char *tty;
42
43main(argc, argv)
44 int argc;
45 char **argv;
46{
47 struct stat sbuf;
48 char *ttyname();
49
50 if (!(tty = ttyname(2))) {
51 fputs("mesg: not a device in /dev.\n", stderr);
52 exit(-1);
53 }
54 if (stat(tty, &sbuf) < 0) {
55 perror("mesg");
56 exit(-1);
57 }
58 if (argc < 2) {
59 if (sbuf.st_mode & 020) {
60 fputs("is y\n", stderr);
61 exit(0);
62 }
63 fputs("is n\n", stderr);
64 exit(1);
65 }
66#define OTHER_WRITE 020
67 switch(*argv[1]) {
68 case 'y':
69 newmode(sbuf.st_mode | OTHER_WRITE);
70 exit(0);
71 case 'n':
72 newmode(sbuf.st_mode &~ OTHER_WRITE);
73 exit(1);
74 default:
75 fputs("usage: mesg [y] [n]\n", stderr);
76 exit(-1);
77 }
78 /*NOTREACHED*/
79}
80
81static
82newmode(m)
83 u_short m;
84{
85 if (chmod(tty, m) < 0) {
86 perror("mesg");
87 exit(-1);
88 }
89}