gentoo: use /var/run for new /run compatibility
[util-vserver.git] / src / vsched.c
index b97c654..215f879 100644 (file)
@@ -158,34 +158,37 @@ showVersion()
 
 static void do_dir_entry(struct vc_set_sched *sched, const char *name)
 {
-  int fd;
-  char buf[128];
-  signed long val;
   struct sched_opt *opt;
-  ssize_t len;
-  char *newline;
 
   for (opt = FILE_OPTIONS; opt->name != 0; opt++) {
     if (strcmp(name, opt->name) == 0)
       break;
   }
+  if (opt->name == 0)
+    return;
+
+  if (opt->offset != offsetof(struct vc_set_sched, set_mask)) {
+    int fd;
+    char buf[128], *newline;
+    signed long val;
+    ssize_t len;
+
+    fd = Eopen(name, O_RDONLY, 0);
+    len = Eread(fd, buf, sizeof(buf)-1);
+    Eclose(fd);
+    buf[len] = '\0';
+    if ((newline=strchr(buf, '\n')) != NULL)
+      *newline = '\0';
+
+    if (!isNumber(buf, &val, true)) {
+      WRITE_MSG(2, ENSC_WRAPPERS_PREFIX);
+      WRITE_STR(2, name);
+      WRITE_MSG(2, ": is not an integer\n");
+      exit(1);
+    }
 
-  fd = Eopen(name, O_RDONLY, 0);
-  len = Eread(fd, buf, sizeof(buf)-1);
-  Eclose(fd);
-  buf[len] = '\0';
-  if ((newline=strchr(buf, '\n')) != NULL)
-    *newline = '\0';
-
-  if (!isNumber(buf, &val, true)) {
-    WRITE_MSG(2, ENSC_WRAPPERS_PREFIX);
-    WRITE_STR(2, name);
-    WRITE_MSG(2, ": is not a number\n");
-    exit(1);
-  }
-
-  if (opt->offset != offsetof(struct vc_set_sched, set_mask))
     *(int_least32_t *)(((char *)sched)+opt->offset) = (int_least32_t) val;
+  }
 
   sched->set_mask |= opt->mask;
 }
@@ -241,7 +244,7 @@ static void do_dir(xid_t xid, struct vc_set_sched *sched, const char *dir, int m
 
 #define SETVAL(ATTR,MASK) \
   if (!isNumber(optarg, &tmp, false)) { \
-    WRITE_MSG(2, ENSC_WRAPPERS_PREFIX "non-numeric value specified for '--" #ATTR "'\n"); \
+    WRITE_MSG(2, ENSC_WRAPPERS_PREFIX "non-integer value specified for '--" #ATTR "'\n"); \
     exit(wrapper_exit_code); \
   } \
   else { \
@@ -310,7 +313,8 @@ int main(int argc, char *argv[])
     do_dir(xid, &sched, dir, missing_ok, 0);
   }
   else {
-    if (sched.set_mask!=0 && vc_set_sched(xid, &sched)==-1) {
+    if (sched.set_mask!=0 && sched.set_mask!=VC_VXSM_FORCE &&
+        vc_set_sched(xid, &sched)==-1) {
       perror("vc_set_sched()");
       exit(255);
     }