URI: 
       tFix bug in inspect_installed() - pm - barely a pack manager
  HTML git clone git://z3bra.org/pm
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit e9711c9b1d1dc9fd7c3741309cd879cda2ebabc6
   DIR parent 11ca8f6728acf195601b904ac0c90cbfff2f2f8f
  HTML Author: z3bra <willyatmailoodotorg>
       Date:   Wed, 22 Jun 2016 10:20:56 +0200
       
       Fix bug in inspect_installed()
       
       Diffstat:
         M pm.c                                |      23 +++++++++++++----------
       
       1 file changed, 13 insertions(+), 10 deletions(-)
       ---
   DIR diff --git a/pm.c b/pm.c
       t@@ -368,12 +368,11 @@ pack_install(const char *rootfs, const char *datadir, struct pack *p)
        {
                int r;
                char tmp[PATH_MAX] = "";
       -        struct stat st;
        
                if (overwrite == 0) {
                        snprintf(tmp, PATH_MAX, "%s/%s", datadir, p->name);
                        log(LOG_VERBOSE, "checking installation status\n");
       -                if (stat(tmp, &st) == 0 && S_ISDIR(st.st_mode)) {
       +                if (inspect_installed(datadir, p->name) == 0) {
                                fprintf(stderr, "%s: Pack already installed\n", p->name);
                                return -1;
                        }
       t@@ -384,12 +383,17 @@ pack_install(const char *rootfs, const char *datadir, struct pack *p)
        
                log(LOG_VERBOSE, "writing metadata\n");
                if (write_metadata(datadir, p) < 0) {
       -                perror(datadir);
       +                delete_metadata(datadir, p->name);
                        return -1;
                }
        
                r = pack_extract(rootfs, datadir, p);
        
       +        if (r != 0) {
       +                fprintf(stderr, "%s: Installation failed. Deleting pack\n", p->name);
       +                pack_delete(rootfs, datadir, p);
       +        }
       +
                return r;
        }
        
       t@@ -456,7 +460,8 @@ inspect_installed(const char *datadir, const char *name)
                struct stat st;
        
                snprintf(tmp, PATH_MAX, "%s/%s", datadir, name);
       -        return stat(tmp, &st) || S_ISDIR(st.st_mode);
       +        log(LOG_VERBOSE, "checking existence of %s\n", tmp);
       +        return stat(tmp, &st) || !S_ISDIR(st.st_mode);
        }
        
        
       t@@ -799,19 +804,17 @@ update(const char *rootfs, const char *datadir, char *path)
                        return ERR_DELETE;
                }
        
       -        if (pack_delete(rootfs, datadir, p) != 0)
       +        if (pack_delete(rootfs, datadir, p) != 0) {
       +                pack_free(p);
                        return ERR_DELETE;
       +        }
        
                overwrite = 1;
                r += pack_install(rootfs, datadir, p);
                overwrite = tmp;
        
       -        if (r == 0) {
       +        if (r == 0)
                        log(LOG_INFO, "updated %s to %s\n", p->name, p->version);
       -        } else {
       -                fprintf(stderr, "%s: Update failed. Cleaning filesystem\n", p->name);
       -                pack_delete(rootfs, datadir, p);
       -        }
        
                pack_free(p);