Allow to install widget with no icon
authorJosé Bollo <jose.bollo@iot.bzh>
Tue, 11 Jul 2017 15:06:06 +0000 (17:06 +0200)
committerJosé Bollo <jose.bollo@iot.bzh>
Tue, 11 Jul 2017 15:56:02 +0000 (17:56 +0200)
This patch allows a widget to not specify any icon
but it still enforce when an icon is specified to
specify only one icon and to provide the attribute
"src".

Bug-AGL: SPEC-702

Change-Id: Ieeb17e4de8885a3a525b35ae365e51b421d39f83
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
src/wgtpkg-install.c
src/wgtpkg-uninstall.c

index cec3b75..3f5ab92 100644 (file)
@@ -188,12 +188,13 @@ static int check_temporary_constraints(const struct wgt_desc *desc)
        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 (desc->icons)
+               result |= check_defined(desc->icons->src, "icon.src");
        if (result)
                return result;
 
-       if (desc->icons->next) {
+       if (desc->icons && desc->icons->next) {
                ERROR("widget has more than one icon defined (temporary constraints)");
                errno = EINVAL;
                result = -1;
@@ -357,6 +358,9 @@ static int install_icon(const struct wgt_desc *desc)
        char target[PATH_MAX];
        int rc;
 
+       if (!desc->icons)
+               return 0;
+
        create_directory(FWK_ICON_DIR, 0755, 1);
        rc = snprintf(link, sizeof link, "%s/%s", FWK_ICON_DIR, desc->idaver);
        if (rc >= (int)sizeof link) {
@@ -411,7 +415,7 @@ static int install_security(const struct wgt_desc *desc)
        }
        len--;
        *head++ = '/';
-       icon = desc->icons->src;
+       icon = desc->icons ? desc->icons->src : NULL;
        lic = (unsigned)strlen(icon);
        n = file_count();
        i = 0;
@@ -424,7 +428,7 @@ static int install_security(const struct wgt_desc *desc)
                        goto error2;
                }
                strcpy(head, f->name);
-               if (lf <= lic && !memcmp(f->name, icon, lf) && (!f->name[lf] || f->name[lf] == '/'))
+               if (lf <= lic && icon && !memcmp(f->name, icon, lf) && (!f->name[lf] || f->name[lf] == '/'))
                        rc = secmgr_path_public_read_only(path);
                else
                        rc = secmgr_path_read_only(path);
index 653aea7..6156c0a 100644 (file)
@@ -87,8 +87,8 @@ int uninstall_widget(const char *idaver, const char *root)
        rc = snprintf(path, sizeof path, "%s/%s", FWK_ICON_DIR, idaver);
        assert(rc < (int)sizeof path);
        rc = unlink(path);
-       if (rc < 0)
-               ERROR("can't removing '%s': %m", path);
+       if (rc < 0 && errno != ENOENT)
+               ERROR("can't remove '%s': %m", path);
 
        /* removes the parent directory if empty */
        rc2 = snprintf(path, sizeof path, "%s/%s", root, id);
@@ -97,7 +97,7 @@ int uninstall_widget(const char *idaver, const char *root)
        if (rc < 0 && errno == ENOTEMPTY)
                return rc;
        if (rc < 0) {
-               ERROR("error while removing directory '%s': %m", path);
+               ERROR("while removing directory '%s': %m", path);
                return -1;
        }