cleanups; use modern methods...
authorEnrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Sun, 7 Mar 2004 19:37:15 +0000 (19:37 +0000)
committerEnrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Sun, 7 Mar 2004 19:37:15 +0000 (19:37 +0000)
git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@1133 94cd875c-1c1d-0410-91d2-eb244daf1a30

util-vserver/lib/flags-v13.c
util-vserver/lib/flags_list-compat.c
util-vserver/lib/flags_list-v13.c

index 5b02a90..a8ed134 100644 (file)
 #endif
 
 #include "vserver.h"
-#include "lib_internal/util-dimof.h"
+#include "internal.h"
+#include <lib_internal/util-dimof.h>
 
 #include <string.h>
 #include <assert.h>
 
 #define DECL(STR, VAL) { STR, sizeof(STR)-1, VAL }
 
-static struct {
-    char const * const         id;
-    size_t                     len;
-    unsigned char              val;
-} const FLAGVALUES[] = {
+static struct Mapping_uint64 const VALUES[] = {
   DECL("fakeinit",  S_CTX_INFO_INIT),
 };
 
 uint_least64_t
 vc_text2flag(char const *str, size_t len)
 {
-  size_t       i;
-  if (len==0) len=strlen(str);
-
-  for (i=0; i<sizeof(FLAGVALUES)/sizeof(FLAGVALUES[0]); ++i)
-    if (len==FLAGVALUES[i].len &&
-       strncmp(FLAGVALUES[i].id, str, len)==0)
-      return FLAGVALUES[i].val;
-
-  return 0;
+  ssize_t      idx = utilvserver_value2text_uint64(str, len,
+                                                   VALUES, DIM_OF(VALUES));
+  if (idx==-1) return 0;
+  else         return VALUES[idx].val;
 }
 
 char const *
-vc_hiflag2text(uint_least64_t val)
+vc_loflag2text(uint_least64_t *val)
 {
-  size_t       i;
-  size_t       idx;
-
-  for (i=S_CTX_INFO_INIT, idx=DIM_OF(FLAGVALUES); i>0 && idx>0; i/=2) {
-    --idx;
-    if (val & i) return FLAGVALUES[idx].id;
-  }
+  ssize_t      idx = utilvserver_text2value_uint64(val,
+                                                   VALUES, DIM_OF(VALUES));
 
-  return 0;
+  if (idx==-1) return 0;
+  else         return VALUES[idx].id;
 }
index b881f8c..e6255cc 100644 (file)
@@ -25,7 +25,7 @@
 
 uint_least32_t
 vc_list2flag_compat(char const *str, size_t len,
-                   char const **err_ptr, size_t *err_len)
+                   struct vc_err_listparser *err)
 {
   uint32_t             res = 0;
 
@@ -43,8 +43,10 @@ vc_list2flag_compat(char const *str, size_t len,
 
     if (tmp!=0) res |= tmp;
     else {
-      if (err_ptr) *err_ptr = str;
-      if (err_len) *err_len = cnt;
+      if (err) {
+       err->ptr = str;
+       err->len = cnt;
+      }
       return res;
     }
 
@@ -52,7 +54,9 @@ vc_list2flag_compat(char const *str, size_t len,
     str = ptr+1;
   }
 
-  if (err_ptr) *err_ptr = 0;
-  if (err_len) *err_len = 0;
+  if (err) {
+    err->ptr = 0;
+    err->len = 0;
+  }
   return res;
 }
index 6b8fd35..f7f9502 100644 (file)
 
 int
 vc_list2flag(char const *str, size_t len,
-            char const **err_ptr, size_t *err_len,
-            uint_least64_t *flag,
-            uint_least64_t *mask)
+            struct vc_err_listparser *err,
+            struct vc_ctx_flags *flags)
 {
-  return utilvserver_listparser_uint64(str, len, err_ptr, err_len,
-                                      flag, mask,
+  return utilvserver_listparser_uint64(str, len,
+                                      err ? &err->ptr : 0,
+                                      err ? &err->len : 0,
+                                      &flags->flagword, &flags->mask,
                                       vc_text2flag);
 }