tSpecify pack loading method explicitely - pm - barely a pack manager
 (HTM) git clone git://z3bra.org/pm
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 365b4680352256efca096caabfcedb6ef654f17d
 (DIR) parent 74821245d8bf64da7337c48a14622371499a8e4f
 (HTM) Author: z3bra <willyatmailoodotorg>
       Date:   Tue, 21 Jun 2016 01:52:52 +0200
       
       Specify pack loading method explicitely
       
       Diffstat:
         M pm.c                                |      35 +++++++++----------------------
       
       1 file changed, 10 insertions(+), 25 deletions(-)
       ---
 (DIR) diff --git a/pm.c b/pm.c
       t@@ -63,7 +63,6 @@ int re_match(const char *re, const char *str);
        
        struct pack *pack_load_tarball(char *path);
        struct pack *pack_load_metadata(const char *datadir, char *name);
       -struct pack *pack_load(const char *datadir, char *path);
        void pack_free(struct pack *p);
        int pack_extract(const char *rootfs, const char *datadir, struct pack *p);
        int pack_install(const char *rootfs, const char *datadir, struct pack *p);
       t@@ -192,13 +191,17 @@ pack_load_tarball(char *path)
                regmatch_t sub[3];
                size_t i, nmatch = 3, sublen[3];
        
       +        fn = base_name(path);
       +        if (re_match(PACK_FORMAT, fn) != 0) {
       +                fprintf(stderr, "%s: invalid filename\n", fn);
       +                return NULL;
       +        }
       +
                if (stat(path, &st) < 0) {
                        perror(path);
                        return NULL;
                }
        
       -        fn = base_name(path);
       -
                regcomp(&preg, regex, 0);
                regexec(&preg, fn, nmatch, sub, 0);
        
       t@@ -240,7 +243,7 @@ pack_load_metadata(const char *datadir, char *name)
                snprintf(tmp, PATH_MAX, "%s/%s", datadir, name);
        
                if (stat(tmp, &st) < 0) {
       -                perror(tmp);
       +                fprintf(stderr, "%s: no such pack installed\n", name);
                        return NULL;
                }
        
       t@@ -259,24 +262,6 @@ pack_load_metadata(const char *datadir, char *name)
        
        
        /*
       - * Guess how a pack should be loaded depending on the path given
       - */
       -struct pack *
       -pack_load(const char *datadir, char *path)
       -{
       -        struct pack *p = NULL;
       -
       -        if (re_match(PACK_FORMAT, path) == 0) {
       -                p = pack_load_tarball(path);
       -        } else {
       -                p = pack_load_metadata(datadir, path);
       -        }
       -
       -        return p;
       -}
       -
       -
       -/*
         * Free a pack structure
         */
        void
       t@@ -745,7 +730,7 @@ install(const char *rootfs, const char *datadir, char *path)
                int r = 0;
                struct pack *p = NULL;
        
       -        if ((p = pack_load(datadir, path)) == NULL)
       +        if ((p = pack_load_tarball(path)) == NULL)
                        return ERR_PACK_LOAD;
        
        
       t@@ -770,7 +755,7 @@ update(const char *rootfs, const char *datadir, char *path)
                int r = 0, tmp = overwrite;
                struct pack *p = NULL;
        
       -        if ((p = pack_load(datadir, path)) == NULL)
       +        if ((p = pack_load_tarball(path)) == NULL)
                        return ERR_PACK_LOAD;
        
                if (pack_delete(rootfs, datadir, p) != 0)
       t@@ -798,7 +783,7 @@ delete(const char *rootfs, const char *datadir, char *name)
                int r = 0;
                struct pack *p = NULL;
        
       -        if ((p = pack_load(datadir, name)) == NULL)
       +        if ((p = pack_load_metadata(datadir, name)) == NULL)
                        return ERR_PACK_LOAD;
        
                r += pack_delete(rootfs, datadir, p);