#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 */
};
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");
}
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();
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;
}