2 # setexec: turns a file's executability on or off, same semantics as rsync's --executability
3 # usage: setexec { + | - | --reference=<file> } <file> [...]
8 if ($cmd =~ /^--reference=(.*)$/) {
10 @stbuf = stat($ref_file);
12 die "setexec: stat($ref_file): $!\n";
14 $ref_perms = $stbuf[2] & 07777;
15 if (($ref_perms & 0111) == 0) {
20 } elsif ($cmd ne '+' && $cmd ne '-') {
21 die "usage: setexec { + | - | --reference=<file> } <file> [...]\n";
25 my ($cmd, $perms) = @_;
27 return $perms | ($perms & 0444) >> 2;
28 } elsif ($cmd eq '-') {
29 return $perms & ~0111;
33 file: foreach $file (@ARGV) {
36 warn "setexec: stat($file): $!, skipping file\n";
39 $perms = $stbuf[2] & 07777;
40 $perms = docmd($cmd, $perms);
41 chmod($perms, $file) or warn "setexec: chmod($perms, $file): $!, skipping file\n";