X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwgtpkg-uninstall.c;h=41bc69307263576b2add2283888595d21912f20b;hb=f8cee78b734acf4636d134afa3f81ddcc06241e6;hp=653aea729fb98ddd81aea093a4cc0e99af6e9f28;hpb=a9fb60ac4c40234fc3e1d183e3ec1bf98a02c48d;p=src%2Fapp-framework-main.git diff --git a/src/wgtpkg-uninstall.c b/src/wgtpkg-uninstall.c index 653aea7..41bc693 100644 --- a/src/wgtpkg-uninstall.c +++ b/src/wgtpkg-uninstall.c @@ -1,5 +1,6 @@ /* - Copyright 2015, 2016, 2017 IoT.bzh + Copyright (C) 2015-2020 IoT.bzh + Copyright (C) 2020 Konsulko Group author: José Bollo @@ -36,17 +37,20 @@ /* uninstall the widget of idaver */ int uninstall_widget(const char *idaver, const char *root) { +#if DISTINCT_VERSIONS char *id; char *ver; - char path[PATH_MAX]; const char *at; - int rc, rc2; +#endif + char path[PATH_MAX]; + int rc; struct unitconf uconf; struct wgt_info *ifo; NOTICE("-- UNINSTALLING widget of id %s from %s --", idaver, root); /* find the last '@' of the id */ +#if DISTINCT_VERSIONS at = strrchr(idaver, '@'); if (at == NULL) { ERROR("bad widget id '%s', no @", idaver); @@ -58,6 +62,10 @@ int uninstall_widget(const char *idaver, const char *root) /* compute the path */ rc = snprintf(path, sizeof path, "%s/%s/%s", root, id, ver); +#else + rc = snprintf(path, sizeof path, "%s/%s", root, idaver); +#endif + if (rc >= (int)sizeof path) { ERROR("bad widget id '%s', too long", idaver); errno = EINVAL; @@ -72,7 +80,8 @@ int uninstall_widget(const char *idaver, const char *root) } uconf.installdir = path; uconf.icondir = FWK_ICON_DIR; - uconf.port = 0; + uconf.new_afid = 0; + uconf.base_http_ports = 0; unit_uninstall(ifo, &uconf); wgt_info_unref(ifo); @@ -87,17 +96,20 @@ 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); + return -1; + } +#if DISTINCT_VERSIONS /* 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) { - ERROR("error while removing directory '%s': %m", path); + ERROR("while removing directory '%s': %m", path); return -1; } @@ -105,16 +117,18 @@ 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); +#else + rc = secmgr_init(idaver); +#endif + 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; } -