/*
- Copyright 2015, 2016, 2017 IoT.bzh
+ Copyright (C) 2015-2020 IoT.bzh
+ Copyright (C) 2020 Konsulko Group
author: José Bollo <jose.bollo@iot.bzh>
#include <stdio.h>
#include <assert.h>
#include <unistd.h>
+#include <fcntl.h>
#include "verbose.h"
#include "utils-dir.h"
#include "secmgr-wrap.h"
+#include "wgtpkg-unit.h"
+#include "wgt.h"
+#include "wgt-info.h"
/* uninstall the widget of idaver */
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;
NOTICE("-- UNINSTALLING widget of id %s from %s --", idaver, root);
return -1;
}
+ /* removes the units */
+ ifo = wgt_info_createat(AT_FDCWD, path, 1, 1, 1);
+ if (!ifo) {
+ ERROR("can't read widget config in directory '%s': %m", path);
+ return -1;
+ }
+ uconf.installdir = path;
+ uconf.icondir = FWK_ICON_DIR;
+ uconf.new_afid = 0;
+ uconf.base_http_ports = 0;
+ unit_uninstall(ifo, &uconf);
+ wgt_info_unref(ifo);
+
/* removes the directory of the application */
rc = remove_directory(path, 1);
if (rc < 0) {
- ERROR("error while removing directory '%s': %m", path);
+ ERROR("while removing directory '%s': %m", path);
return -1;
}
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;
+ }
/* 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;
}
* 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;
}