Fix cleardata command-line interface 95/108295/4
authorSangyoon Jang <s89.jang@samsung.com>
Wed, 4 Jan 2017 04:07:36 +0000 (13:07 +0900)
committerSangyoon Jang <s89.jang@samsung.com>
Wed, 4 Jan 2017 05:57:13 +0000 (14:57 +0900)
Allow clear data and cache together.

Change-Id: I7c593abb4fa1f4be0929393a8b1c058f5cf33c6b
Signed-off-by: Sangyoon Jang <s89.jang@samsung.com>
src/pkg_cleardata.c

index 0c4abb095e3b715ede9f2ff6f2ff67b0d8e779c2..de2cc675642df74e52b632ace9392c6e2f6e8345 100644 (file)
 #define LOG_TAG "PKGMGR_CLEARDATA"
 #endif                         /* LOG_TAG */
 
-const char *short_options = "c:d:h";
+const char short_options[] = "cdhn:";
 
 const struct option long_options[] = {
-       {"cache", 1, NULL, 'c'},
-       {"data", 1, NULL, 'd'},
+       {"cache", 0, NULL, 'c'},
+       {"data", 0, NULL, 'd'},
        {"help", 0, NULL, 'h'},
+       {"pkgid", 1, NULL, 'n'},
        {0, 0, 0, 0}            /* sentinel */
 };
 
@@ -291,17 +292,19 @@ static int __clear_all_cache_dir(void)
 
 static void print_usage(void)
 {
-       printf("pkg data/cache clear tool \n");
+       printf("pkg data/cache clear tool\n");
 
        printf("\n");
-       printf("-c --clear-cache        clear pkg's cache\n");
-       printf("-c --clear-data         clear pkg's data\n");
-       printf("-h, --help              print this help\n");
+       printf("-c, --cache           clear pkg's cache\n");
+       printf("-d, --data            clear pkg's data\n");
+       printf("-h, --help            print this help\n");
+       printf("-n, --pkgid           package id\n");
 
        printf("\n");
        printf("Usage: pkg_cleardata [options]\n");
-       printf("pkg_cleardata -c <pkgid> \n");
-       printf("pkg_cleardata -d <pkgid> \n");
+       printf("pkg_cleardata -c -n <pkgid> \n");
+       printf("pkg_cleardata -d -n <pkgid> \n");
+       printf("pkg_cleardata -cd -n <pkgid> \n");
        printf("\n");
 }
 
@@ -310,7 +313,9 @@ int main(int argc, char *argv[])
        int ret = -1;
        int c = -1;
        int opt_idx = 0;
-       char pkgid[MAX_PKG_NAME_LEN];
+       char pkgid[MAX_PKG_NAME_LEN] = { 0, };
+       bool clear_cache = false;
+       bool clear_data = false;
 
        if (argc < 3) {
                print_usage();
@@ -329,35 +334,42 @@ int main(int argc, char *argv[])
                        break;  /* Parse end */
                switch (c) {
                case 'c': /* cache */
-                       if (optarg) {
-                               snprintf(pkgid, sizeof(pkgid), "%s", optarg);
-                       } else {
-                               print_usage();
-                               break;
-                       }
-
-                       if (strcmp(pkgid, PKG_CLEAR_ALL_CACHE) == 0)
-                               ret = __clear_all_cache_dir();
-                       else
-                               ret = __clear_cache_dir(pkgid);
+                       clear_cache = true;
                        break;
                case 'd': /* data */
+                       clear_data = true;
+                       break;
+               case 'h': /* help */
+                       print_usage();
+                       ret = 0;
+                       break;
+               case 'n': /* pkgid */
                        if (optarg) {
                                snprintf(pkgid, sizeof(pkgid), "%s", optarg);
                        } else {
                                print_usage();
-                               break;
+                               return -1;
                        }
-
-                       ret = __clear_data_dir(pkgid);
-                       break;
-               case 'h': /* help */
-                       print_usage();
-                       ret = 0;
                        break;
                default:
                        break;
                }
        }
+
+       if ((!clear_cache && !clear_data) || (pkgid[0] == '\0')) {
+               print_usage();
+               return -1;
+       }
+
+       if (clear_cache) {
+               if (strcmp(pkgid, PKG_CLEAR_ALL_CACHE) == 0)
+                       ret = __clear_all_cache_dir();
+               else
+                       ret = __clear_cache_dir(pkgid);
+       }
+
+       if (clear_data)
+               ret = __clear_data_dir(pkgid);
+
        return ret;
 }