summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2020-05-28 15:51:05 -0400
committerScott Murray <scott.murray@konsulko.com>2020-05-28 15:51:05 -0400
commit7084f123b4f8a704ae2bc35b5fe9433f767439fe (patch)
treee6ae5f4c2503355c5c0dcf37599b369084e4e129
parent61fddd3f281061a93a13e4e14e75b80925816684 (diff)
Fix uninstall of widgets without iconsicefish_9.0.2icefish/9.0.29.0.2
Trying to uninstall a widget without an icon would remove the widget files, but report an error, and the widget would not be removed from the database until a reboot, preventing installation of a new version. To fix this, the error handling in uninstall_widget has been reworked to only explicitly return an error when the unlink of the icon file fails for reasons other than the file not being present. This then allows some code cleanup by removing the extra rc2 variable and fixing some error checks where rc and rc2 were being mixed. Bug-AGL: SPEC-3401 Signed-off-by: Scott Murray <scott.murray@konsulko.com> Change-Id: Ia86805bd814e787b7e47c489973ee974fff4b6d3
-rw-r--r--src/wgtpkg-uninstall.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/wgtpkg-uninstall.c b/src/wgtpkg-uninstall.c
index bb7739f..4fd7979 100644
--- a/src/wgtpkg-uninstall.c
+++ b/src/wgtpkg-uninstall.c
@@ -1,5 +1,6 @@
/*
Copyright (C) 2015-2020 IoT.bzh
+ Copyright (C) 2020 Konsulko Group
author: José Bollo <jose.bollo@iot.bzh>
@@ -40,7 +41,7 @@ int uninstall_widget(const char *idaver, const char *root)
char *ver;
char path[PATH_MAX];
const char *at;
- int rc, rc2;
+ int rc;
struct unitconf uconf;
struct wgt_info *ifo;
@@ -88,13 +89,15 @@ 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 && errno != ENOENT)
+ if (rc < 0 && errno != ENOENT) {
ERROR("can't remove '%s': %m", path);
+ return -1;
+ }
/* removes the parent directory if empty */
- rc2 = snprintf(path, sizeof path, "%s/%s", root, id);
- assert(rc2 < (int)sizeof path);
- rc2 = rmdir(path);
+ rc = snprintf(path, sizeof path, "%s/%s", root, id);
+ assert(rc < (int)sizeof path);
+ rc = rmdir(path);
if (rc < 0 && errno == ENOTEMPTY)
return rc;
if (rc < 0) {
@@ -106,16 +109,16 @@ int uninstall_widget(const char *idaver, const char *root)
* parent directory removed: last occurrence of the application
* uninstall it for the security-manager
*/
- rc2 = secmgr_init(id);
- if (rc2) {
+ rc = secmgr_init(id);
+ if (rc) {
ERROR("can't init security manager context");
return -1;
}
- rc2 = secmgr_uninstall();
- if (rc2) {
+ rc = secmgr_uninstall();
+ if (rc) {
ERROR("can't uninstall security manager context");
return -1;
}
- return rc;
+ return 0;
}