В Sun, 4 Jul 2021 11:55:53 +0200
Hiltjo Posthuma <[email protected]> пишет:
> On Sun, Jul 04, 2021 at 12:30:27PM +0500, Nikita Zlobin wrote:
> > - improved code readability
> > - cleaned redundant variables and checks
> > - isolated reusable part for (E)ARGF
> > ---
> > arg.h | 65
> > +++++++++++++++++++++++++++++------------------------------ 1 file
> > changed, 32 insertions(+), 33 deletions(-)
> >
> > diff --git a/arg.h b/arg.h
> > index a22e019..ee0bbc6 100644
> > --- a/arg.h
> > +++ b/arg.h
> > @@ -9,42 +9,41 @@
> > extern char *argv0;
> >
> > /* use main(int argc, char *argv[]) */
> > -#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\
> > - argv[0] && argv[0][0] ==
> > '-'\
> > - && argv[0][1];\
> > - argc--, argv++) {\
> > - char argc_;\
> > - char **argv_;\
> > - int brk_;\
> > - if (argv[0][1] == '-' &&
> > argv[0][2] == '\0') {\
> > - argv++;\
> > - argc--;\
> > - break;\
> > - }\
> > - int i_;\
> > - for (i_ = 1, brk_ = 0, argv_ =
> > argv;\
> > - argv[0][i_] &&
> > !brk_;\
> > - i_++) {\
> > - if (argv_ != argv)\
> > - break;\
> > - argc_ = argv[0][i_];\
> > - switch (argc_)
> > -
> > -#define ARGEND }\
> > +#define ARGBEGIN \
> > + for (argv0 = *argv, argv++, argc--;
> > \
> > + argv[0] && argv[0][0] == '-' &&
> > argv[0][1]; \
> > + argc--, argv++ )
> > \
> > + {
> > \
> > + char arg_;
> > \
> > + int brk_;
> > \
> > + if (argv[0][1] == '-' &&
> > argv[0][2] == '\0') \
> > + {
> > \
> > + argv++;
> > \
> > + argc--;
> > \
> > + break;
> > \
> > + }
> > \
> > + for (brk_ = 0, argv[0]++;
> > \
> > + !brk_ && (arg_ = argv[0][0]);
> > \
> > + argv[0]++ )
> > \
> > + {
> > \
> > + switch (arg_)
> > +#define ARGEND \
> > + } \
> > }
> >
> > -#define ARGC() argc_
> > +#define _ARGF(x) \
> > + ( (argv[0][1] == '\0' && argv[1] == NULL)
> > \
> > + ? (x)
> > \
> > + : (brk_ = 1, ( (++argv[0]) [0] != '\0')
> > \
> > + ? argv[0]
> > \
> > + : ( argc--, (++argv)[0] )
> > \
> > + )
> > \
> > + )
> >
> > -#define EARGF(x) ((argv[0][i_+1] == '\0' && argv[1] ==
> > NULL)?\
> > - ((x), abort(), (char *)0) :\
> > - (brk_ = 1, (argv[0][i_+1] !=
> > '\0')?\
> > - (&argv[0][i_+1]) :\
> > - (argc--, argv++, argv[0])))
> > +#define ARGC() arg_
> >
> > -#define ARGF() ((argv[0][i_+1] == '\0' && argv[1]
> > == NULL)?\
> > - (char *)0 :\
> > - (brk_ = 1, (argv[0][i_+1] !=
> > '\0')?\
> > - (&argv[0][i_+1]) :\
> > - (argc--, argv++, argv[0])))
> > +#define EARGF(x) (_ARGF( ((x), abort(), NULL) ))
> > +
> > +#define ARGF() (_ARGF( NULL ))
> >
> > #endif
> > --
> > 2.31.1
> >
> >
>
> Hi,
>
> Thanks, but I prefer the current style one.
>
> I'm not confident this patch doesn't modify any behaviour.
> For example I see the `i` variable was removed, but it is actually
> important to not modify argv as this causes issues on NetBSD and
> OpenBSD process listing (see commit
> a5a928bfc1dd049780a45e072cb4ee42de7219bf).
>
> This is just one example. Unless it fixes a bug I rather keep the
> current code.
>
Hm, will look closer. I did not compare original arg.h from st and
tabbed. 20h copied this file from st, so I assued they should be
identical.