.do_set = false,
.do_unset = false,
.local_fs = false,
- .set_mask = 0,
- .del_mask = 0
+ .set_mask = 0,
+ .del_mask = 0,
+ .no_unified = false,
};
global_args = &args;
while (1) {
int c = getopt_long(argc, argv, CMDLINE_OPTIONS_SHORT,
CMDLINE_OPTIONS, 0);
+ long flags;
+ char *endptr;
if (c==-1) break;
switch (c) {
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_WRITE : args.set_mask |= VC_IATTR_WRITE; break;
+ case CMD_COW : args.set_mask |= VC_IATTR_COW; 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_IMMUTABLE : args.del_mask |= VC_IATTR_IMMUTABLE; break;
case CMD_UNSET_WATCH : args.del_mask |= VC_IATTR_WATCH; break;
case CMD_UNSET_HIDE : args.del_mask |= VC_IATTR_HIDE; break;
case CMD_UNSET_BARRIER : args.del_mask |= VC_IATTR_BARRIER; break;
+ case CMD_UNSET_WRITE : args.del_mask |= VC_IATTR_WRITE; break;
+ case CMD_UNSET_COW : args.del_mask |= VC_IATTR_COW; break;
+ case CMD_FLAGS :
+ case CMD_UNSET_FLAGS :
+ flags = strtoul(optarg, &endptr, 0);
+ if ((flags == 0 && errno != 0) || *endptr != '\0') {
+ WRITE_MSG(2, "Invalid flags argument: '");
+ WRITE_STR(2, optarg);
+ WRITE_MSG(2, "'; try '--help' for more information\n");
+ return EXIT_FAILURE;
+ }
+ if (c == CMD_FLAGS)
+ args.set_mask |= flags;
+ else
+ args.del_mask |= flags;
+ break;
case 'R' : args.do_recurse = true; break;
case 'a' : args.do_display_dot = true; break;
case 'd' : args.do_display_dir = true; break;
case 'u' : args.do_unset = true; break;
case 'c' : args.ctx_str = optarg; break;
case 'x' : args.local_fs = true; break;
+ case 'U' : args.no_unified = true; break;
default :
WRITE_MSG(2, "Try '");
WRITE_STR(2, argv[0]);