afm-system-daemon: Improve error message report
[src/app-framework-main.git] / src / wgtpkg-install.c
index 27dcb87..31ef7c4 100644 (file)
@@ -40,6 +40,7 @@
 #include "wgtpkg-permissions.h"
 #include "wgtpkg-digsig.h"
 #include "wgtpkg-install.h"
+#include "wgtpkg-uninstall.h"
 #include "secmgr-wrap.h"
 #include "utils-dir.h"
 #include "wgtpkg-unit.h"
@@ -502,7 +503,7 @@ struct wgt_info *install_widget(const char *wgtfile, const char *root, int force
        struct wgt_info *ifo;
        const struct wgt_desc *desc;
        char installdir[PATH_MAX];
-       int port;
+       int port, err;
        struct unitconf uconf;
 
        NOTICE("-- INSTALLING widget %s to %s --", wgtfile, root);
@@ -532,6 +533,16 @@ struct wgt_info *install_widget(const char *wgtfile, const char *root, int force
        if (get_target_directory(installdir, root, desc))
                goto error3;
 
+       if (access(installdir, F_OK) == 0) {
+               if (!force) {
+                       ERROR("widget already installed");
+                       errno = EEXIST;
+                       goto error3;
+               }
+               if (uninstall_widget(desc->idaver, root))
+                       goto error3;
+       }
+
        if (move_widget_to(installdir, force))
                goto error3;
 
@@ -567,7 +578,9 @@ error3:
        wgt_info_unref(ifo);
 
 error2:
+       err = errno;
        remove_workdir();
+       errno = err;
 
 error1:
        file_reset();