X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ffstool.c;h=34dc97689d4585734dc007c57f2f63ee5092b607;hb=b1dbdec10c0cadc46a58889d738c8ab1c92a07e9;hp=d1df02ac8fe5c562dda092ba3acc81f9f6104806;hpb=df4a683742df97801b80a4cbfdbcbb3a46240ad5;p=util-vserver.git diff --git a/src/fstool.c b/src/fstool.c index d1df02a..34dc976 100644 --- a/src/fstool.c +++ b/src/fstool.c @@ -182,14 +182,17 @@ int main(int argc, char *argv[]) .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) { @@ -202,6 +205,8 @@ int main(int argc, char *argv[]) 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; @@ -209,6 +214,22 @@ int main(int argc, char *argv[]) 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; @@ -217,6 +238,7 @@ int main(int argc, char *argv[]) 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]);