URI: 
       tList package 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 b1f152ac97a08e6bc3c5c401a36228643ce77672
   DIR parent 4cddf9af68b6e22c51621a9c04159a266f23adc5
  HTML Author: z3bra <willyatmailoodotorg>
       Date:   Wed, 30 Dec 2015 12:11:29 +0100
       
       List package installed
       
       Diffstat:
         M pm.c                                |      35 ++++++++++++++++++++++++++-----
       
       1 file changed, 30 insertions(+), 5 deletions(-)
       ---
   DIR diff --git a/pm.c b/pm.c
       t@@ -1,3 +1,4 @@
       +#include <dirent.h>
        #include <fcntl.h>
        #include <limits.h>
        #include <stdio.h>
       t@@ -48,6 +49,7 @@ void usage(char *name);
        int p_mkdir(char *dir, mode_t mode);
        char *base_name(char *path);
        int inspect(int fd, char *filename);
       +int list_local(const char *datadir);
        int metadata(char *datadir, char *filename);
        int pack(char *out, char **filename);
        int unpack(char *root, char *in);
       t@@ -128,6 +130,25 @@ inspect(int fd, char *filename)
                return 0;
        }
        
       +
       +int
       +list_local(const char *datadir)
       +{
       +        DIR *d;
       +        struct dirent *p;
       +
       +        if (!(d = opendir(datadir))) {
       +                perror("opendir");
       +                return -1;
       +        }
       +
       +        while ((p = readdir(d)))
       +                if (strcmp(p->d_name, ".") && strcmp(p->d_name, ".."))
       +                        printf("%s\n", p->d_name);
       +
       +        return 0;
       +}
       +
        /*
         * write metadata about a package file
         *
       t@@ -353,17 +374,20 @@ main (int argc, char **argv)
                        action = ACTION_INSPECT;
                        fn = EARGF(usage(argv0));
                        break;
       +        case 'l':
       +                action = ACTION_LIST_LOCAL;
       +                break;
                case 'h':
                default:
                        usage(argv0);
                        return 0;
                }ARGEND;
        
       -        if (fn)
       +        if (fn) {
                        p = pack_load(fn);
       -
       -        if (!p)
       -                return ERR_PACKAGE_LOAD;
       +                if (!p)
       +                        return ERR_PACKAGE_LOAD;
       +        }
        
                switch (action) {
                case ACTION_INSTALL:
       t@@ -375,12 +399,13 @@ main (int argc, char **argv)
                        return inspect(1, p->path);
                case ACTION_PACKAGE:
                        return pack(p->path, argv);
       +        case ACTION_LIST_LOCAL:
       +                return list_local(PACKAGE_DATA);
                /* handle me, Octave */
                case ACTION_REMOVE:
                case ACTION_UPDATE:
                case ACTION_LIST_FILES:
                case ACTION_LIST_DEPS:
       -        case ACTION_LIST_LOCAL:
                case ACTION_LIST_REMOTE:
                default:
                        usage(argv0);