static int __convert_to_absolute_path(pm_tool_args *data)
{
char abs[PATH_MAX] = {'\0'};
- char temp[PATH_MAX] = {'\0'};
+ char *temp;
char *ptr = NULL;
int ret;
- if (data->pkg_path[0] == '\0') {
- printf("path is NULL\n");
+ GList *list;
+
+ ptr = realpath(data->pkg_path, abs);
+ if (ptr == NULL) {
+ printf("realpath fail: %d\n", errno);
return -1;
}
- ret = snprintf(temp, PATH_MAX - 1, "%s", data->pkg_path);
- if (ret < 0 || ret > PATH_MAX - 1) {
+ ret = snprintf(data->pkg_path, PKG_NAME_STRING_LEN_MAX - 1, "%s", abs);
+ if (ret < 0 || ret > PKG_NAME_STRING_LEN_MAX - 1) {
printf("snprintf fail\n");
return -1;
}
- if (strchr(data->pkg_path, '/') == NULL) {
- if (getcwd(abs, PKG_NAME_STRING_LEN_MAX - 1) == NULL) {
- printf("getcwd() failed\n");
- return -1;
- }
- memset(data->pkg_path, '\0', PKG_NAME_STRING_LEN_MAX);
- ret = snprintf(data->pkg_path, PKG_NAME_STRING_LEN_MAX - 1,
- "%s/%s", abs, temp);
- if (ret < 0 || ret > PKG_NAME_STRING_LEN_MAX - 1) {
- printf("snprintf fail\n");
- return -1;
- }
- return 0;
- }
- if (strncmp(data->pkg_path, "./", 2) == 0) {
- ptr = temp;
- if (getcwd(abs, PKG_NAME_STRING_LEN_MAX - 1) == NULL) {
- printf("getcwd() failed\n");
+
+ for (list = data->pkgs; list; list = list->next) {
+ ptr = realpath(list->data, abs);
+ if (ptr == NULL) {
+ printf("realpath fail: %d\n", errno);
return -1;
}
- ptr = ptr + 2;
- memset(data->pkg_path, '\0', PKG_NAME_STRING_LEN_MAX);
- ret = snprintf(data->pkg_path, PKG_NAME_STRING_LEN_MAX - 1,
- "%s/%s", abs, ptr);
- if (ret < 0 || ret > PKG_NAME_STRING_LEN_MAX - 1) {
- printf("snprintf fail\n");
+ temp = list->data;
+ list->data = strdup(abs);
+ if (list->data == NULL) {
+ printf("out of memory\n");
return -1;
}
- return 0;
+ free(temp);
}
+
return 0;
}
if (optarg)
snprintf(data.pkg_path, sizeof(data.pkg_path),
"%s", optarg);
+ __parse_multiple_pkgs(&data, argc, argv);
ret = __convert_to_absolute_path(&data);
if (ret == -1) {
printf("conversion of relative path to absolute path failed\n");
return -1;
}
printf("path is %s\n", data.pkg_path);
-
- __parse_multiple_pkgs(&data, argc, argv);
break;
case 'X': /* old_tpk */