diff options
Diffstat (limited to 'usr.bin/biff/biff.c')
-rw-r--r-- | usr.bin/biff/biff.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/usr.bin/biff/biff.c b/usr.bin/biff/biff.c index 67341ba..ccbc32a 100644 --- a/usr.bin/biff/biff.c +++ b/usr.bin/biff/biff.c @@ -81,28 +81,35 @@ main(argc, argv) err(2, "stat"); if (*argv == NULL) { - (void)printf("is %s\n", sb.st_mode & S_IXUSR ? "y" : "n"); - return(sb.st_mode & S_IXUSR ? 0 : 1); + (void)printf("is %s%s\n", + sb.st_mode & S_IXUSR ? "y" : + sb.st_mode & S_IXGRP ? "b" : "n"); + return(sb.st_mode & (S_IXUSR | S_IXGRP) ? 0 : 1); + } switch(argv[0][0]) { case 'n': - if (chmod(name, sb.st_mode & ~S_IXUSR) < 0) + if (chmod(name, sb.st_mode & ~(S_IXUSR | S_IXGRP)) < 0) err(2, "%s", name); break; case 'y': - if (chmod(name, sb.st_mode | S_IXUSR) < 0) + if (chmod(name, (sb.st_mode & ~(S_IXUSR | S_IXGRP)) | S_IXUSR) < 0) + err(2, "%s", name); + break; + case 'b': + if (chmod(name, (sb.st_mode & ~(S_IXUSR | S_IXGRP)) | S_IXGRP) < 0) err(2, "%s", name); break; default: usage(); } - return(sb.st_mode & S_IXUSR ? 0 : 1); + return(sb.st_mode & (S_IXUSR | S_IXGRP) ? 0 : 1); } static void usage() { - (void)fprintf(stderr, "usage: biff [y | n]\n"); + (void)fprintf(stderr, "usage: biff [n | y | b]\n"); exit(2); } |