gentoo: use /var/run for new /run compatibility
[util-vserver.git] / src / fstool.c
index d1df02a..34dc976 100644 (file)
@@ -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]);