18a16b7a1SPedro F. Giffuni /*- 28a16b7a1SPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 38a16b7a1SPedro F. Giffuni * 49b50d902SRodney W. Grimes * Copyright (c) 1980, 1993 59b50d902SRodney W. Grimes * The Regents of the University of California. All rights reserved. 69b50d902SRodney W. Grimes * 79b50d902SRodney W. Grimes * Redistribution and use in source and binary forms, with or without 89b50d902SRodney W. Grimes * modification, are permitted provided that the following conditions 99b50d902SRodney W. Grimes * are met: 109b50d902SRodney W. Grimes * 1. Redistributions of source code must retain the above copyright 119b50d902SRodney W. Grimes * notice, this list of conditions and the following disclaimer. 129b50d902SRodney W. Grimes * 2. Redistributions in binary form must reproduce the above copyright 139b50d902SRodney W. Grimes * notice, this list of conditions and the following disclaimer in the 149b50d902SRodney W. Grimes * documentation and/or other materials provided with the distribution. 15fbbd9655SWarner Losh * 3. Neither the name of the University nor the names of its contributors 169b50d902SRodney W. Grimes * may be used to endorse or promote products derived from this software 179b50d902SRodney W. Grimes * without specific prior written permission. 189b50d902SRodney W. Grimes * 199b50d902SRodney W. Grimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 209b50d902SRodney W. Grimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 219b50d902SRodney W. Grimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 229b50d902SRodney W. Grimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 239b50d902SRodney W. Grimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 249b50d902SRodney W. Grimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 259b50d902SRodney W. Grimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 269b50d902SRodney W. Grimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 279b50d902SRodney W. Grimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 289b50d902SRodney W. Grimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 299b50d902SRodney W. Grimes * SUCH DAMAGE. 309b50d902SRodney W. Grimes */ 319b50d902SRodney W. Grimes 329b50d902SRodney W. Grimes #ifndef lint 33fa146c53SArchie Cobbs static const char copyright[] = 349b50d902SRodney W. Grimes "@(#) Copyright (c) 1980, 1993\n\ 359b50d902SRodney W. Grimes The Regents of the University of California. All rights reserved.\n"; 36151aa6c3SMark Murray #endif 379b50d902SRodney W. Grimes 389f5b04e9SDavid Malone #if 0 399b50d902SRodney W. Grimes #ifndef lint 409f5b04e9SDavid Malone static char sccsid[] = "@(#)biff.c 8.1 (Berkeley) 6/6/93"; 41151aa6c3SMark Murray #endif 429f5b04e9SDavid Malone #endif 439f5b04e9SDavid Malone 449f5b04e9SDavid Malone #include <sys/cdefs.h> 459f5b04e9SDavid Malone __FBSDID("$FreeBSD$"); 469b50d902SRodney W. Grimes 479b50d902SRodney W. Grimes #include <sys/stat.h> 481a7fa91eSMike Barcroft 490676cb89SPhilippe Charnier #include <err.h> 50b0a2f60dSPhilippe Charnier #include <stdio.h> 511a7fa91eSMike Barcroft #include <stdlib.h> 52b0a2f60dSPhilippe Charnier #include <unistd.h> 539b50d902SRodney W. Grimes 54*498a0a9cSAlfonso Gregory static void usage(void) __dead2; 559b50d902SRodney W. Grimes 56d7d10053SAlexander Langer int 574ca470d6SRobert Drehmel main(int argc, char *argv[]) 589b50d902SRodney W. Grimes { 599b50d902SRodney W. Grimes struct stat sb; 609b50d902SRodney W. Grimes int ch; 619b50d902SRodney W. Grimes char *name; 629b50d902SRodney W. Grimes 639b50d902SRodney W. Grimes 641c8af878SWarner Losh while ((ch = getopt(argc, argv, "")) != -1) 659b50d902SRodney W. Grimes switch(ch) { 669b50d902SRodney W. Grimes case '?': 679b50d902SRodney W. Grimes default: 689b50d902SRodney W. Grimes usage(); 699b50d902SRodney W. Grimes } 709b50d902SRodney W. Grimes argc -= optind; 719b50d902SRodney W. Grimes argv += optind; 729b50d902SRodney W. Grimes 73adf721d1SRobert Drehmel if ((name = ttyname(STDIN_FILENO)) == NULL && 74adf721d1SRobert Drehmel (name = ttyname(STDOUT_FILENO)) == NULL && 75adf721d1SRobert Drehmel (name = ttyname(STDERR_FILENO)) == NULL) 760676cb89SPhilippe Charnier err(2, "unknown tty"); 779b50d902SRodney W. Grimes 789b50d902SRodney W. Grimes if (stat(name, &sb)) 790676cb89SPhilippe Charnier err(2, "stat"); 809b50d902SRodney W. Grimes 819b50d902SRodney W. Grimes if (*argv == NULL) { 82da2dc5ccSJohan Karlsson (void)printf("is %s\n", 837da9dccbSJohan Karlsson sb.st_mode & S_IXUSR ? "y" : 847da9dccbSJohan Karlsson sb.st_mode & S_IXGRP ? "b" : "n"); 857da9dccbSJohan Karlsson return (sb.st_mode & (S_IXUSR | S_IXGRP) ? 0 : 1); 867da9dccbSJohan Karlsson 879b50d902SRodney W. Grimes } 889b50d902SRodney W. Grimes 899b50d902SRodney W. Grimes switch (argv[0][0]) { 909b50d902SRodney W. Grimes case 'n': 917da9dccbSJohan Karlsson if (chmod(name, sb.st_mode & ~(S_IXUSR | S_IXGRP)) < 0) 92cf6e06f2SKris Kennaway err(2, "%s", name); 939b50d902SRodney W. Grimes break; 949b50d902SRodney W. Grimes case 'y': 95971b504bSRobert Drehmel if (chmod(name, (sb.st_mode & ~(S_IXUSR | S_IXGRP)) | S_IXUSR) 96971b504bSRobert Drehmel < 0) 977da9dccbSJohan Karlsson err(2, "%s", name); 987da9dccbSJohan Karlsson break; 997da9dccbSJohan Karlsson case 'b': 100971b504bSRobert Drehmel if (chmod(name, (sb.st_mode & ~(S_IXUSR | S_IXGRP)) | S_IXGRP) 101971b504bSRobert Drehmel < 0) 102cf6e06f2SKris Kennaway err(2, "%s", name); 1039b50d902SRodney W. Grimes break; 1049b50d902SRodney W. Grimes default: 1059b50d902SRodney W. Grimes usage(); 1069b50d902SRodney W. Grimes } 1077da9dccbSJohan Karlsson return (sb.st_mode & (S_IXUSR | S_IXGRP) ? 0 : 1); 1089b50d902SRodney W. Grimes } 1099b50d902SRodney W. Grimes 1109b50d902SRodney W. Grimes static void 111ef636796SEd Schouten usage(void) 1129b50d902SRodney W. Grimes { 1137da9dccbSJohan Karlsson (void)fprintf(stderr, "usage: biff [n | y | b]\n"); 1149b50d902SRodney W. Grimes exit(2); 1159b50d902SRodney W. Grimes } 116