improve rule checker function in xevlog_analyze
authorHeebum Kwak <heebum0.kwak@samsung.com>
Tue, 21 May 2013 05:43:19 +0000 (14:43 +0900)
committerBoram Park <boram1288.park@samsung.com>
Mon, 17 Jun 2013 08:44:34 +0000 (17:44 +0900)
Change-Id: I35b5532d00c84e8d052b5d48bb6f24b81c860e2c

bin/xevlog_analyze/xevlog_analyze.c
common/xdbg_evlog.c

index 77f899e..01e45cb 100644 (file)
@@ -112,6 +112,7 @@ static void _xEvlogAnalyzePrint (EvlogOption *eo, char* reply, int* len)
     if (!strlen(eo->path_name))
     {
         printf ("failed: no evlog path\n");
+        _printUsage(eo->command_name);
         return;
     }
 
@@ -451,76 +452,33 @@ _checkOption(int argc, char** argv)
                         len = read(fd, fs, sizeof(fs));
                         pfs = fs;
 
-                        while (pfs != NULL)
+                        while (pfs - fs < len)
                         {
                             int   new_argc = 3;
                             char *new_argv[3] = {"add", };
-                            char *policy[2] = {"allow", "deny"};
-                            char  tstring[1024] = {0,};
-                            int   pflag, i;
-
-                            if (strstr(pfs, policy[0]) && strstr(pfs, policy[1]))
-                                if (strstr(pfs,policy[0]) > strstr(pfs,policy[1]))
-                                {
-                                    pfs = strstr(pfs,policy[1]);
-                                    pflag = 1;
-                                }
-                                else
-                                {
-                                    pfs = strstr(pfs,policy[0]);
-                                    pflag = 0;
-                                }
-                            else if (strstr(pfs, policy[0]) && !strstr(pfs, policy[1]))
-                            {
-                                pfs = strstr(pfs, policy[0]);
-                                pflag = 0;
-                            }
-                            else if (!strstr(pfs, policy[0]) && strstr(pfs, policy[1]))
-                            {
-                                pfs = strstr(pfs, policy[1]);
-                                pflag = 1;
-                            }
-                            else
-                                break;
+                            char  policy[64] = {0, };
+                            char  rule[1024] = {0, };
+                            int   i;
 
-                            if (pflag == 0)
+                            if (pfs[0] == ' ' || pfs[0] == '\n')
                             {
-                                new_argv[1] = (char*)malloc (strlen(policy[0]) + 1);
-
-                                if(!new_argv[1])
-                                {
-                                    printf ("failed: malloc new_argv[1]\n");
-                                    return;
-                                }
-                                memset(new_argv[1], 0, strlen(policy[0]) + 1);
-                                strncpy(new_argv[1], policy[0], strlen(policy[0]));
-                                pfs += (strlen(policy[0]) + 1);
-                            }
-                            else if (pflag == 1)
-                            {
-                                new_argv[1] = (char*)malloc (strlen(policy[1]) + 1);
-
-                                if(!new_argv[1])
-                                {
-                                    printf ("failed: malloc new_argv[1]\n");
-                                    return;
-                                }
-                                memset(new_argv[1], 0, strlen(policy[1]) + 1);
-                                strncpy(new_argv[1], policy[1], strlen(policy[1]));
-                                pfs += (strlen(policy[1]) + 1);
+                                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++)
-                                tstring[i] = pfs[i];
+                                rule[i] = pfs[i];
+
+                            new_argv[2] = rule;
+
+                            pfs += (strlen(new_argv[2]) + 1);
 
-                            new_argv[2] = (char*)malloc (strlen(tstring) + 1);
-                            if(!new_argv[2])
-                            {
-                                printf ("failed: malloc new_argv[2]\n");
-                                return;
-                            }
-                            memset(new_argv[2], 0, strlen(tstring) + 1);
-                            strncpy(new_argv[2], tstring, strlen(tstring));
 
                             if(!xDbgEvlogRuleSet ((const int) new_argc,
                                                   (const char**) new_argv,
@@ -530,16 +488,6 @@ _checkOption(int argc, char** argv)
                                 return;
                             }
 
-                            if (new_argv[1])
-                            {
-                                free (new_argv[1]);
-                                new_argv[1] = NULL;
-                            }
-                            if (new_argv[2])
-                            {
-                                free (new_argv[2]);
-                                new_argv[2] = NULL;
-                            }
                         }
 
                         eo.isRule = TRUE;
index fa314fa..7e9f86e 100644 (file)
@@ -119,6 +119,7 @@ xDbgEvlogRuleSet (const int argc, const char **argv, char *reply, int *len)
         RC_RESULT_TYPE result;
         const char * policy = argv[1];
         char rule[8192];
+        int i;
 
         if (argc < 3)
         {
@@ -138,6 +139,10 @@ xDbgEvlogRuleSet (const int argc, const char **argv, char *reply, int *len)
 
         _mergeArgs (rule, argc - 2, &(argv[2]));
 
+        for (i = 0 ; i < strlen(rule) ; i++)
+            if(rule[i] == '\"' || rule[i] == '\'')
+                rule[i] = ' ';
+
         result = rulechecker_add_rule (rc, policy_type, rule);
         if (result == RC_ERR_TOO_MANY_RULES)
         {