]> rtime.felk.cvut.cz Git - ulut.git/blobdiff - ulut/ul_logreg.c
Initialization of the first_changed field of timer queue added to make Valgrind happy.
[ulut.git] / ulut / ul_logreg.c
index 4ab899936ee04f1d26ccdf94305e42c415f11f58..f1a54fccc1a500c966ed745d1d42ba3346543a14 100644 (file)
 
  *******************************************************************/
 
+#include <ctype.h>
 #include <string.h>
+#ifndef __RTL__
+#include <stdlib.h>
+#endif
 #include <ul_logbase.h>
 #include <ul_logreg.h>
 #include <ul_gsacust.h>
@@ -78,13 +82,16 @@ int ul_log_domain_setlevel(const char *name, int setlevel)
   ul_log_domains_it_t it;
   ul_log_domain_t *domain=NULL;
 
-  if((setlevel<0) || (setlevel>UL_LOGL_MAX))
+  if(setlevel<0)
     return -1;
 
+  if(setlevel>UL_LOGL_MAX)
+    setlevel=UL_LOGL_MAX;
+
   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 +124,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++;
+    }
+    r=p;
+    l=strtol(r,(char**)&p,0);
+    if(!p||(p==r)||(*p&&(*p!=':')&&(*p!=',')))
+      return p-arg;
+    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();