]> rtime.felk.cvut.cz Git - ulut.git/commitdiff
Added parsing of log level argument.
authorppisa <ppisa>
Fri, 28 Jul 2006 15:31:42 +0000 (15:31 +0000)
committerppisa <ppisa>
Fri, 28 Jul 2006 15:31:42 +0000 (15:31 +0000)
ulut/ul_logreg.c
ulut/ul_logreg.h

index 4ab899936ee04f1d26ccdf94305e42c415f11f58..7b23c68314d83b8b1053eb855e21c9db10f0b386 100644 (file)
@@ -21,7 +21,9 @@
 
  *******************************************************************/
 
+#include <ctype.h>
 #include <string.h>
+#include <stdlib.h>
 #include <ul_logbase.h>
 #include <ul_logreg.h>
 #include <ul_gsacust.h>
@@ -84,7 +86,7 @@ int ul_log_domain_setlevel(const char *name, int setlevel)
   if(!name)
     all_fl=1;
   else
-    all_fl=!strcmp(name,"all");
+    all_fl=!strcmp(name,"all") || !strcmp(name,"ALL");
 
   if(!all_fl){
     domain=ul_log_domains_find(&ul_log_domains,&name);
@@ -117,6 +119,48 @@ int ul_log_domain_getlevel(const char *name)
   return domain->level;
 }
 
+#ifndef UL_MAX_DOMAIN_NAME
+#define UL_MAX_DOMAIN_NAME 20
+#endif /*UL_MAX_DOMAIN_NAME*/
+
+int ul_log_domain_arg2levels(const char *arg)
+{
+  const char *p=arg;
+  const char *r;
+  int l;
+  char name[UL_MAX_DOMAIN_NAME+1];
+
+  if(!arg)
+    return -1;
+
+  while(*p){
+    if(isdigit(*p)){
+      strcpy(name,"all");
+    }else{
+      r=p;
+      while(isalnum(*p)) p++;
+      l=p-r;
+      if(l>UL_MAX_DOMAIN_NAME)
+        l=UL_MAX_DOMAIN_NAME;
+      memcpy(name,r,l);
+      name[l]=0;
+      if(*p&&(*p!='.')&&(*p!='='))
+        return p-arg;
+      p++;
+    }
+    l=strtol(p,(char**)&r,0);
+    if(!r||(p==r)||(*p&&(*p!=':')&&(*p!=',')))
+      return p-arg;
+    p=r;
+    if(ul_log_domain_setlevel(name, l)<0)
+      return p-arg;
+    if(*p)
+      p++;
+  }
+
+  return 0;
+}
+
 int ul_logreg_domain(ul_log_domain_t *domain)
 {
   ul_log_check_default_output();
index aa0ca6b17f041b97fb8f02eb526641444627f83b..9a25b83745856a45dd6972ab07f317e0673ed474 100644 (file)
@@ -35,6 +35,7 @@ int ul_log_domain_getlevel(const char *name);
 
 int ul_logreg_domain(ul_log_domain_t *domain);
 int ul_logreg_domains_static(ul_log_domain_t *const *domains, int count);
+int ul_log_domain_arg2levels(const char *arg);
 
 #ifdef __cplusplus
 } /* extern "C"*/