summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2017-07-11 17:06:06 +0200
committerJosé Bollo <jose.bollo@iot.bzh>2017-07-11 17:56:02 +0200
commitbb4cd6174006925a71baf6596b32e2d1dec26171 (patch)
tree8ada523a69a4c9243829fa08e28108e29dd64c20
parentaefa15cde960ca4528d415337bbeb8e5f0072e44 (diff)
Allow to install widget with no icon
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>
-rw-r--r--src/wgtpkg-install.c12
-rw-r--r--src/wgtpkg-uninstall.c6
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;
}