don't modify argv, use a counter - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit a5a928bfc1dd049780a45e072cb4ee42de7219bf
 (DIR) parent 6ac8c8aa50d521f82d491ab54eb972660fdf3207
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Tue, 20 Mar 2018 21:22:27 +0100
       
       don't modify argv, use a counter
       
       on some platforms (OpenBSD) this changes the exposed argv in tools using
       the kvm_* interface, such as ps and pgrep.
       
       Diffstat:
         M arg.h                               |      22 ++++++++++++----------
       
       1 file changed, 12 insertions(+), 10 deletions(-)
       ---
 (DIR) diff --git a/arg.h b/arg.h
       @@ -21,28 +21,30 @@ extern char *argv0;
                                                argc--;\
                                                break;\
                                        }\
       -                                for (brk_ = 0, argv[0]++, argv_ = argv;\
       -                                                argv[0][0] && !brk_;\
       -                                                argv[0]++) {\
       +                                int i_;\
       +                                for (i_ = 1, brk_ = 0, argv_ = argv;\
       +                                                argv[0][i_] && !brk_;\
       +                                                i_++) {\
                                                if (argv_ != argv)\
                                                        break;\
       -                                        argc_ = argv[0][0];\
       +                                        argc_ = argv[0][i_];\
                                                switch (argc_)
       +
        #define ARGEND                        }\
                                }
        
        #define ARGC()                argc_
        
       -#define EARGF(x)        ((argv[0][1] == '\0' && argv[1] == NULL)?\
       +#define EARGF(x)        ((argv[0][i_+1] == '\0' && argv[1] == NULL)?\
                                        ((x), abort(), (char *)0) :\
       -                                (brk_ = 1, (argv[0][1] != '\0')?\
       -                                        (&argv[0][1]) :\
       +                                (brk_ = 1, (argv[0][i_+1] != '\0')?\
       +                                        (&argv[0][i_+1]) :\
                                                (argc--, argv++, argv[0])))
        
       -#define ARGF()                ((argv[0][1] == '\0' && argv[1] == NULL)?\
       +#define ARGF()                ((argv[0][i_+1] == '\0' && argv[1] == NULL)?\
                                        (char *)0 :\
       -                                (brk_ = 1, (argv[0][1] != '\0')?\
       -                                        (&argv[0][1]) :\
       +                                (brk_ = 1, (argv[0][i_+1] != '\0')?\
       +                                        (&argv[0][i_+1]) :\
                                                (argc--, argv++, argv[0])))
        
        #endif