tAdd ARGLOOP() macro to arg.h - pm - barely a pack manager
 (HTM) git clone git://z3bra.org/pm
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 1e3c9cc7bfb79be2052b44e6c9c70c95ad0c185b
 (DIR) parent d17c5f2b5394540d33d5751943f0b9d5e5d5d8df
 (HTM) Author: z3bra <willyatmailoodotorg>
       Date:   Sun,  1 May 2016 23:50:01 +0200
       
       Add ARGLOOP() macro to arg.h
       
       Diffstat:
         M arg.h                               |      16 ++++++++++++++++
         M pm.c                                |      12 +++++-------
       
       2 files changed, 21 insertions(+), 7 deletions(-)
       ---
 (DIR) diff --git a/arg.h b/arg.h
       t@@ -29,6 +29,20 @@ extern char *argv0;
                                                argc_ = argv[0][0];\
                                                switch (argc_)
        
       +#define ARGLOOP()        while((argc>0 && *argv)||(!argc && !feof(stdin))){\
       +                                char *lf_;\
       +                                char argi_[LINE_MAX];\
       +                                memset(argi_, 0, LINE_MAX);\
       +                                if (argc>0) {\
       +                                        strncpy(argi_, *(argv++), LINE_MAX);\
       +                                } else {\
       +                                        fgets(argi_, LINE_MAX, stdin);\
       +                                }\
       +                                if (strnlen(argi_, LINE_MAX) > 0) {\
       +                                        lf_ = strrchr(argi_, '\n');\
       +                                        if (lf_){ *lf_ = 0; }
       +
       +
        /* Handles obsolete -NUM syntax */
        #define ARGNUM                                case '0':\
                                                case '1':\
       t@@ -60,6 +74,8 @@ extern char *argv0;
                                                (&argv[0][1]) :\
                                                (argc--, argv++, argv[0])))
        
       +#define ARGI()                argi_
       +
        #define LNGARG()        &argv[0][0]
        
        #endif
 (DIR) diff --git a/pm.c b/pm.c
       t@@ -771,16 +771,14 @@ main (int argc, char **argv)
                case ACTION_INSTALL:
                case ACTION_UPDATE:
                case ACTION_DELETE:
       -                while ((n = ARGV_OR_STDIN(argc, argv)) != NULL) {
       +                ARGLOOP(){
                                if (action == ACTION_INSTALL)
       -                                r += install(rootfs, datadir, n);
       +                                r += install(rootfs, datadir, ARGI());
                                if (action == ACTION_UPDATE)
       -                                r += update(rootfs, datadir, n);
       +                                r += update(rootfs, datadir, ARGI());
                                if (action == ACTION_DELETE)
       -                                r += delete(rootfs, datadir, n);
       -
       -                        free(n);
       -                }
       +                                r += delete(rootfs, datadir, ARGI());
       +                }ARGEND;
                        break;
                case ACTION_INSPECT:
                        if (inspect(datadir, n) != 0)