.do_display_dot = false,
.do_display_dir = false,
.do_mapping = true,
- .immutable = false,
- .immulink = false,
.ctx = VC_NOCTX,
.is_legacy = false,
.do_set = false,
switch (c) {
case CMD_HELP : showHelp(1, argv[0], 0);
case CMD_VERSION : showVersion();
- case CMD_IMMU : args.set_mask |= VC_IATTR_IUNLINK; break;
+ case CMD_IMMU : args.set_mask |= VC_IATTR_IMMUTABLE; /*@fallthrough@*/
+ case CMD_IMMUX : args.set_mask |= VC_IATTR_IUNLINK; break;
case CMD_ADMIN : args.set_mask |= VC_IATTR_ADMIN; break;
case CMD_WATCH : args.set_mask |= VC_IATTR_WATCH; break;
case CMD_HIDE : args.set_mask |= VC_IATTR_HIDE; break;
case CMD_BARRIER : args.set_mask |= VC_IATTR_BARRIER; break;
- case CMD_UNSET_IMMU : args.del_mask |= VC_IATTR_IUNLINK; break;
+ case CMD_UNSET_IMMU : args.del_mask |= VC_IATTR_IMMUTABLE; /*@fallthrough@*/
+ case CMD_UNSET_IMMUX : args.del_mask |= VC_IATTR_IUNLINK; break;
case CMD_UNSET_ADMIN : args.del_mask |= VC_IATTR_ADMIN; break;
case CMD_UNSET_WATCH : args.del_mask |= VC_IATTR_WATCH; break;
case CMD_UNSET_HIDE : args.del_mask |= VC_IATTR_HIDE; break;
#define CMD_WATCH 0x8012
#define CMD_HIDE 0x8013
#define CMD_BARRIER 0x8014
+#define CMD_IMMUX 0x8015
#define CMD_UNSET_IMMU 0x8020
#define CMD_UNSET_ADMIN 0x8021
#define CMD_UNSET_WATCH 0x8022
#define CMD_UNSET_HIDE 0x8023
#define CMD_UNSET_BARRIER 0x8024
+#define CMD_UNSET_IMMUX 0x8025
struct stat;
bool do_display_dot;
bool do_display_dir;
bool do_mapping;
- bool immutable;
- bool immulink;
char const * ctx_str;
xid_t ctx;
bool is_legacy;
{ "~watch", no_argument, 0, CMD_UNSET_WATCH },
{ "~hide", no_argument, 0, CMD_UNSET_HIDE },
{ "~barrier", no_argument, 0, CMD_UNSET_BARRIER },
+ { "iunlink-but-not-immutable", no_argument, 0, CMD_IMMUX },
+ { "~iunlink-but-not-immutable", no_argument, 0, CMD_UNSET_IMMUX },
{ 0,0,0,0 }
};
WRITE_MSG(fd, "Usage: ");
WRITE_STR(fd, cmd);
WRITE_MSG(fd,
- " [-Rx] [--[~]iunlink] [--[~]admin] [--[~]watch] [--[~]hide] [--[~]barrier] [--] <file>+\n\n"
+ " [-Rx] [--[~](iunlink|admin|watch|hide|barrier|iunlink-but-not-immutable)]* [--] <file>+\n\n"
" Options:\n"
" -R ... recurse through directories\n"
" -x ... do not cross filesystems\n\n"
memset(buf, ' ', sizeof buf);
if (getFlags(name, &flags, &mask)) {
- // 1 1 0 0
- // fedcba9876543210fedcba9876543210
- static char const MARKER[33] = ".......x......ib.............hwa";
+ // 1 1 0 0
+ // fedcba9876543210fedcba9876543210
+ static char const MARKER[33] = ".......x.....iub.............hwa";
int i;
uint32_t used_flags = (VC_IATTR_XID|VC_IATTR_ADMIN|
VC_IATTR_WATCH|VC_IATTR_HIDE|
- VC_IATTR_BARRIER|VC_IATTR_IUNLINK);
+ VC_IATTR_BARRIER|VC_IATTR_IUNLINK|
+ VC_IATTR_IMMUTABLE);
for (i=0; i<32; ++i) {
if (used_flags & 1) {
}
}
else {
- memcpy(buf, "ERR ", 6);
+ memcpy(buf, "ERR ", 7);
res = false;
}