X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwgtpkg-install.c;h=31c9e9105a10a3c1d922e846bdcb436bc8b754da;hb=bfc9c138b1a9e87f9d387e2f900c14807c9da9b9;hp=9881e9c53a235ffdbbe8accbf8bfd8e8c06f2ca1;hpb=c6b2074e18ce7a37a59bc1c3831407b42b18c889;p=src%2Fapp-framework-main.git diff --git a/src/wgtpkg-install.c b/src/wgtpkg-install.c index 9881e9c..31c9e91 100644 --- a/src/wgtpkg-install.c +++ b/src/wgtpkg-install.c @@ -1,5 +1,5 @@ /* - Copyright 2015, 2016 IoT.bzh + Copyright 2015, 2016, 2017 IoT.bzh author: José Bollo @@ -30,6 +30,7 @@ #include "verbose.h" #include "wgt.h" #include "wgt-info.h" +#include "wgt-strings.h" #include "wgtpkg-files.h" #include "wgtpkg-workdir.h" #include "wgtpkg-zip.h" @@ -39,9 +40,6 @@ #include "secmgr-wrap.h" #include "utils-dir.h" -static const char permission_required[] = "required"; -static const char permission_optional[] = "optional"; -static const char feature_required_permissions[] = FWK_PREFIX "required-permission"; static const char* exec_type_strings[] = { "application/x-executable", "application/vnd.agl.native" @@ -83,13 +81,16 @@ static int check_valid_string(const char *value, const char *name) static int check_temporary_constraints(const struct wgt_desc *desc) { - int result = check_valid_string(desc->id, "id"); + int result; + + result = check_valid_string(desc->id, "id"); result |= check_valid_string(desc->version, "version"); result |= check_valid_string(desc->ver, "ver"); result |= check_defined(desc->icons, "icon"); result |= check_defined(desc->content_src, "content"); if (result) return result; + if (desc->icons->next) { ERROR("widget has more than one icon defined (temporary constraints)"); errno = EINVAL; @@ -104,9 +105,9 @@ static int set_required_permissions(struct wgt_desc_param *params, int required) while (params) { /* check the value */ - if (!strcmp(params->value, permission_required)) + if (!strcmp(params->value, string_required)) optional = !required; - else if (!strcmp(params->value, permission_optional)) + else if (!strcmp(params->value, string_optional)) optional = 1; else { ERROR("unexpected parameter value: %s found for %s", params->value, params->name); @@ -136,26 +137,31 @@ static int check_widget(const struct wgt_desc *desc) result = check_temporary_constraints(desc); feature = desc->features; while(result >= 0 && feature) { - if (!strcmp(feature->name, feature_required_permissions)) + if (!strcmp(feature->name, feature_required_permission)) result = set_required_permissions(feature->params, feature->required); feature = feature->next; } return result; } -static int move_widget(const char *root, const struct wgt_desc *desc, int force) +static int get_target_directory(char target[PATH_MAX], const char *root, const struct wgt_desc *desc) { - char newdir[PATH_MAX]; int rc; - rc = snprintf(newdir, sizeof newdir, "%s/%s/%s", root, desc->id, desc->ver); - if (rc >= (int)sizeof newdir) { - ERROR("path too long in move_widget"); + rc = snprintf(target, PATH_MAX, "%s/%s/%s", root, desc->id, desc->ver); + if (rc < PATH_MAX) + rc = 0; + else { + ERROR("path too long"); errno = EINVAL; - return -1; + rc = -1; } + return rc; +} - return move_workdir(newdir, 1, force); +static int move_widget_to(const char *destdir, int force) +{ + return move_workdir(destdir, 1, force); } static int install_icon(const struct wgt_desc *desc) @@ -271,6 +277,7 @@ struct wgt_info *install_widget(const char *wgtfile, const char *root, int force { struct wgt_info *ifo; const struct wgt_desc *desc; + char installdir[PATH_MAX]; NOTICE("-- INSTALLING widget %s to %s --", wgtfile, root); @@ -296,7 +303,10 @@ struct wgt_info *install_widget(const char *wgtfile, const char *root, int force if (check_widget(desc)) goto error3; - if (move_widget(root, desc, force)) + if (get_target_directory(installdir, root, desc)) + goto error3; + + if (move_widget_to(installdir, force)) goto error3; if (install_icon(desc))