add reading rule file option in 'xdbg evlog_rule'
authorHeebum Kwak <heebum0.kwak@samsung.com>
Wed, 19 Jun 2013 05:58:28 +0000 (14:58 +0900)
committerBoram Park <boram1288.park@samsung.com>
Mon, 24 Jun 2013 03:37:48 +0000 (12:37 +0900)
Change-Id: I263a25bc734e88fa72610405baee43116ce29daa

bin/xevlog_analyze/xevlog_analyze.c
common/ds/bool_exp_rule_checker.c
common/xdbg_evlog.c
common/xdbg_evlog.h
module/xdbg_module_command.c

index d089b23..7509aa1 100644 (file)
@@ -464,63 +464,12 @@ _checkOption(int argc, char** argv)
 
                     if(opt_str_len > 0)
                     {
-                        int   fd = -1;
-                        char  fs[8096];
-                        char *pfs;
-                        int   len;
-
-                        fd = open (opt_str, O_RDONLY);
-                        if (fd < 0)
+                        if(!xDbgEvlogReadRuleFile(opt_str, rule_log, &rule_size))
                         {
-                            printf ("failed: open '%s'. (%s)\n", opt_str, strerror(errno));
+                            printf("%s", rule_log);
                             return;
                         }
-
-                        len = read(fd, fs, sizeof(fs));
-                        pfs = fs;
-
-                        while (pfs - fs < len)
-                        {
-                            int   new_argc = 3;
-                            char *new_argv[3] = {"add", };
-                            char  policy[64] = {0, };
-                            char  rule[1024] = {0, };
-                            int   i;
-
-                            if (pfs[0] == ' ' || pfs[0] == '\n')
-                            {
-                                pfs++;
-                                continue;
-                            }
-                            for (i = 0 ; pfs[i] != ' ' ; i++)
-                                policy[i] = pfs[i];
-
-                            new_argv[1] = policy;
-                            pfs += (strlen(new_argv[1]) + 1);
-
-                            memset(rule, 0, sizeof(rule));
-                            for (i = 0 ; pfs[i] != '\n' ; i++)
-                                rule[i] = pfs[i];
-
-                            new_argv[2] = rule;
-
-                            pfs += (strlen(new_argv[2]) + 1);
-
-
-                            if(!xDbgEvlogRuleSet ((const int) new_argc,
-                                                  (const char**) new_argv,
-                                                   rule_log, &rule_size))
-                            {
-                                printf("%s\n", rule_log);
-                                return;
-                            }
-
-                        }
-
                         eo.isRule = TRUE;
-
-                        if (fd >= 0)
-                            close (fd);
                     }
                     break;
                 }
index 761a430..280d9ff 100644 (file)
@@ -362,6 +362,7 @@ const char * rulechecker_print_usage()
         "-----------------------------------------------------------------\n"
         "Usage : xdbg evlog_rule add [POLICY] [RULE]\n"
         "        xdbg evlog_rule remove [INDEX]\n"
+        "        xdbg evlog_rule file [RULE_FILE]\n"
         "        xdbg evlog_rule help / print\n"
         "      [POLICY] : allow / deny \n"
         "      [RULE] : C Language-style boolean expression syntax. [VARIABLE] [COMPAROTOR] [VALUE]\n"
index 304d49a..618f00b 100644 (file)
@@ -215,6 +215,20 @@ xDbgEvlogRuleSet (const int argc, const char **argv, char *reply, int *len)
         rulechecker_print_rule (rc, reply);
         return TRUE;
     }
+    else if (!_strcasecmp (command, "file"))
+    {
+        if (argc < 2)
+        {
+            REPLY ("Error : Too few arguments.\n");
+            return FALSE;
+        }
+
+        if (!xDbgEvlogReadRuleFile(argv[1], reply, len))
+            return FALSE;
+        rulechecker_print_rule (rc, reply);
+        
+        return TRUE;
+    }
     else if (!_strcasecmp (command, "print"))
     {
         rulechecker_print_rule (rc, reply);
@@ -263,6 +277,65 @@ xDbgEvlogRuleValidate (EvlogInfo *evinfo)
                                       cmd);
 }
 
+Bool
+xDbgEvlogReadRuleFile(const char *filename, char *reply, int *len)
+{
+    int   fd = -1;
+    char  fs[8096];
+    char *pfs;
+    int   rule_len;
+
+    fd = open (filename, O_RDONLY);
+    if (fd < 0)
+    {
+        REPLY ("failed: open '%s'. (%s)\n", filename, strerror(errno));
+        return FALSE;
+    }
+
+    rule_len = read(fd, fs, sizeof(fs));
+    pfs = fs;
+
+    while (pfs - fs < rule_len)
+    {
+        int   new_argc = 3;
+        char *new_argv[3] = {"add", };
+        char  policy[64] = {0, };
+        char  rule[1024] = {0, };
+        int   i;
+
+        if (pfs[0] == ' ' || pfs[0] == '\n')
+        {
+            pfs++;
+            continue;
+        }
+        for (i = 0 ; pfs[i] != ' ' ; i++)
+            policy[i] = pfs[i];
+
+        new_argv[1] = policy;
+        pfs += (strlen(new_argv[1]) + 1);
+
+        memset(rule, 0, sizeof(rule));
+        for (i = 0 ; pfs[i] != '\n' ; i++)
+            rule[i] = pfs[i];
+
+        new_argv[2] = rule;
+
+        pfs += (strlen(new_argv[2]) + 1);
+
+
+        if(!xDbgEvlogRuleSet ((const int) new_argc, (const char**) new_argv, reply, len))
+        {
+            return FALSE;
+        }
+
+    }
+
+    if (fd >= 0)
+        close (fd);
+
+    return TRUE;
+}
+
 
 ExtensionInfo Evlog_extensions[] = {
     {xDbgEvlogCompositeGetBase, 0, 0, 0, NULL, NULL},
index 1d0d714..0c1069e 100644 (file)
@@ -54,6 +54,7 @@ Bool   xDbgEvlogRuleSet        (const int argc, const char **argv, char *reply,
 Bool   xDbgEvlogRuleValidate   (EvlogInfo *evinfo);
 Bool   xDbgEvlogGetExtensionEntry ();
 Bool   xDbgEvlogFillLog        (EvlogInfo *evinfo, int detail_level, char *reply, int *len);
+Bool   xDbgEvlogReadRuleFile(const char *filename, char *reply, int *len);
 
 void   xDbgDistroyAtomList  (EvlogInfo *evinfo);
 void   xDbgDistroyRegionList (EvlogInfo *evinfo);
index 7dece09..d1290a6 100644 (file)
@@ -363,8 +363,8 @@ static struct
     },
 
     {
-        "evlog_rule", "to set evlog rules", "[add/remove/print]",
-        NULL, "[add allow/deny rules / remove (index) / print]",
+        "evlog_rule", "to set evlog rules", "[add/remove/file/print/help]",
+        NULL, "[add allow/deny rules / remove (index) / file(file_name) / print / help]",
         _CommandSetEvlogRule
     },