tExplode delete() in two functions - pm - barely a pack manager
 (HTM) git clone git://z3bra.org/pm
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit e592a819ac5982f7999174cbea4a4b9c76a24e99
 (DIR) parent 77b61b8c42ad62ed77124cf43cb68632ad9d5005
 (HTM) Author: z3bra <willyatmailoodotorg>
       Date:   Fri, 17 Jun 2016 01:10:22 +0200
       
       Explode delete() in two functions
       
       Diffstat:
         M pm.c                                |      43 +++++++++++++++++++++++--------
       
       1 file changed, 32 insertions(+), 11 deletions(-)
       ---
 (DIR) diff --git a/pm.c b/pm.c
       t@@ -56,6 +56,7 @@ struct pack *pack_load_directory(const char *datadir, char *path);
        struct pack *pack_load(const char *datadir, char *path);
        void pack_free(struct pack *p);
        int pack_install(const char *rootfs, const char *datadir, struct pack *p);
       +int pack_delete(const char *rootfs, struct pack *p);
        
        
        int inspect_collision(const char *rootfs, struct pack *p);
       t@@ -73,7 +74,7 @@ int delete_content(char *map, size_t size);
        /* action wrappers around CLI arguments */
        int install(const char *rootfs, const char *datadir, char *path);
        int update(const char *rootfs, const char *datadir, char *path);
       -int delete(const char *rootfs, const char *datadir, const char *name);
       +int delete(const char *rootfs, const char *datadir, char *name);
        
        int verbose = 0;
        int overwrite = 0;
       t@@ -535,16 +536,16 @@ delete_content(char *map, size_t size)
         * and call delete_content()
         */
        int
       -delete(const char *rootfs, const char *datadir, const char *packname)
       +pack_delete(const char *rootfs, struct pack *p)
        {
                int fd;
                char *addr = NULL;
                char tmp[PATH_MAX];
                struct stat st;
        
       -        snprintf(tmp, PATH_MAX, "%s/%s/files", datadir, packname);
       +        snprintf(tmp, PATH_MAX, "%s/files", p->path);
                if (stat(tmp, &st) < 0 && errno == ENOENT) {
       -                fprintf(stderr, "%s: not installed\n", packname);
       +                fprintf(stderr, "%s: not installed\n", p->name);
                        return -1;
                }
                if ((fd = open(tmp, O_RDONLY)) < 0) {
       t@@ -567,29 +568,28 @@ delete(const char *rootfs, const char *datadir, const char *packname)
        
                /* ignore errors so everything gets deleted */
                if (delete_content(addr, st.st_size) < 0) {
       -                fprintf(stderr, "%s: cannot remove pack\n", packname);
       +                fprintf(stderr, "%s: cannot remove pack\n", p->name);
                        close(fd);
                        return ERR_DELETE;
                }
                close(fd);
        
                if (verbose == 1)
       -                printf("%s: removing metadata\n", packname);
       +                printf("%s: removing metadata\n", p->name);
                if (unlink(tmp) < 0) {
                        perror(tmp);
       -                fprintf(stderr, "%s: cannot remove file list\n", packname);
       +                fprintf(stderr, "%s: cannot remove file list\n", p->name);
                        return ERR_DELETE;
                }
        
       -        snprintf(tmp, PATH_MAX, "%s/%s/version", datadir, packname);
       +        snprintf(tmp, PATH_MAX, "%s/version", p->path);
                if (unlink(tmp) < 0) {
                        perror(tmp);
       -                fprintf(stderr, "%s: cannot clean version\n", packname);
       +                fprintf(stderr, "%s: cannot clean version\n", p->name);
                        return ERR_DELETE;
                }
        
       -        snprintf(tmp, PATH_MAX, "%s/%s", datadir, packname);
       -        return rmdir(tmp);
       +        return rmdir(p->path);
        }
        
        
       t@@ -635,6 +635,25 @@ update(const char *rootfs, const char *datadir, char *path)
        }
        
        
       +int
       +delete(const char *rootfs, const char *datadir, char *name)
       +{
       +        int r = 0;
       +        struct pack *p = NULL;
       +        char tmp[PATH_MAX] = "";
       +
       +
       +        snprintf(tmp, PATH_MAX, "%s/%s", datadir, name);
       +        if ((p = pack_load(datadir, tmp)) == NULL)
       +                return ERR_PACK_LOAD;
       +
       +        r += pack_delete(rootfs, p);
       +        pack_free(p);
       +
       +        return r;
       +}
       +
       +
        /*
         * Load a pack from a tarball and return a pack structure
         */
       t@@ -686,6 +705,7 @@ pack_load_tarball(char *path)
                return pack;
        }
        
       +
        /*
         * Load a pack from a metadata directory and return a pack structure
         */
       t@@ -710,6 +730,7 @@ pack_load_directory(const char *datadir, char *path)
                return pack;
        }
        
       +
        /*
         * Guess how a pack should be loaded depending on the path given
         */