Allowed values are:
 - DEBUG, INFO, WARNING, ERROR (case insensitive)
 - integer numbers

Signed-off-by: Jan Safranek <jsafr...@redhat.com>
---

 src/log.c |   30 +++++++++++++++++++++++++-----
 1 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/src/log.c b/src/log.c
index 8ca756c..1b02d45 100644
--- a/src/log.c
+++ b/src/log.c
@@ -18,6 +18,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
+#include <strings.h>
 
 static cgroup_logger_callback cgroup_logger;
 static void *cgroup_logger_userdata;
@@ -58,6 +59,29 @@ void cgroup_set_default_logger(int level)
                cgroup_set_logger(cgroup_default_logger, level, NULL);
 }
 
+static int cgroup_parse_log_level_str(const char *levelstr)
+{
+       char *end;
+       long level;
+       errno = 0;
+
+       /* try to parse integer first */
+       level = strtol(levelstr, &end, 10);
+       if (end != levelstr && *end == '\0')
+               return level;
+
+       if (strcasecmp(levelstr, "ERROR") == 0)
+               return CGROUP_LOG_ERROR;
+       if (strcasecmp(levelstr, "WARNING") == 0)
+               return CGROUP_LOG_WARNING;
+       if (strcasecmp(levelstr, "INFO") == 0)
+               return CGROUP_LOG_INFO;
+       if (strcasecmp(levelstr, "DEBUG") == 0)
+               return CGROUP_LOG_DEBUG;
+
+       return CGROUP_DEFAULT_LOGLEVEL;
+}
+
 void cgroup_set_loglevel(int loglevel)
 {
        if (loglevel != -1)
@@ -65,11 +89,7 @@ void cgroup_set_loglevel(int loglevel)
        else {
                char *level_str = getenv("CGROUP_LOGLEVEL");
                if (level_str != NULL)
-                       /*
-                        * TODO: add better loglevel detection, e.g. strings
-                        * instead of plain numbers.
-                        */
-                       cgroup_loglevel = atoi(level_str);
+                       cgroup_loglevel = cgroup_parse_log_level_str(level_str);
                else
                        cgroup_loglevel = CGROUP_DEFAULT_LOGLEVEL;
        }


------------------------------------------------------------------------------
Achieve unprecedented app performance and reliability
What every C/C++ and Fortran developer should know.
Learn how Intel has extended the reach of its next-generation tools
to help boost performance applications - inlcuding clusters.
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to