From bb4cd6174006925a71baf6596b32e2d1dec26171 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Bollo?= Date: Tue, 11 Jul 2017 17:06:06 +0200 Subject: [PATCH] Allow to install widget with no icon MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- src/wgtpkg-install.c | 12 ++++++++---- src/wgtpkg-uninstall.c | 6 +++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/wgtpkg-install.c b/src/wgtpkg-install.c index cec3b75..3f5ab92 100644 --- a/src/wgtpkg-install.c +++ b/src/wgtpkg-install.c @@ -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); diff --git a/src/wgtpkg-uninstall.c b/src/wgtpkg-uninstall.c index 653aea7..6156c0a 100644 --- a/src/wgtpkg-uninstall.c +++ b/src/wgtpkg-uninstall.c @@ -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; } -- 2.16.6