On Mon, Jun 26, 2017 at 04:44:59PM +0200, Rüdiger Meier wrote: > > > On 06/26/2017 04:07 PM, Karel Zak wrote: > > On Mon, Jun 26, 2017 at 03:04:30PM +0200, Rüdiger Meier wrote: > > > On 06/22/2017 04:37 AM, Ruediger Meier wrote: > > > > From: Ruediger Meier <ruediger.meier@xxxxxxxxxxx> > > > > > > > > This is pull request #467 on github > > > > https://github.com/karelzak/util-linux/pull/467 > > > > > > > The major goal is to avoid printing usage/help messages on stderr. > > > > > > > > This is the preparing first part of a bigger patch-set. There are > > > > some minor bug fixes and finally we add --help options to all our > > > > commands (just 5 commands were missing it). > > > > > > > > The next completing patch-set (part 2) will be more invasive but > > > > even more trivial. > > > > > > Thanks for merging. > > > > > > FYI I've PR'ed the second part on github only because it's almost > > > trivial but invasive. > > > https://github.com/karelzak/util-linux/pull/471 > > > > Merged, thanks! > > > > It seems we have many places with "not enough arguments" or "device no > > specified" or "bad usage". What about to create some inline function > > for these things? > > > > static inline err_usage(int eval, char *msg) > > { > > warnx(msg); > > errtryhelp(eval); > > } > > > > #define errnoargs(x) err_usage(x, _("not enough arguments")) > > #define errnodevice(x) err_usage(x, _("no device specified")) > > #define errbadusage(x) err_usage(x, _("bad usage")) > > > > > Maybe it seems like over-engineering, but it's pretty common in the > > code and some consolidation to avoid creativity would be nice. The current > > solution requires > > > > if (argv < 2) { > > warnx(_("not enough arguments"))); > > errtryhelp(EXIT_FAILURE); > > } > > > > I think > > > > if (argv < 2) > > errnoargs(EXIT_FAILURE); > > > > is shorter, seems better and provides control on the messages > > (errtryhelp() call, etc). > > > > Comments? > > I was already playing around with something like this > > #define werrtryhelp(eval, s...) __extension__ ({ \ > warnx(s); \ > errtryhelp(eval); \ > }) > > This would make things 1simple in about 100 cases, for example > > - if (argc > 0) { > - warnx(_("%d too many arguments given"), argc); > - errtryhelp(EXIT_FAILURE); > - } > + if (argc > 0) > + werrtryhelp(EXIT_FAILURE, _("%d too many arguments given"), argc); > > > For the standard errors we would only need defines like: > > > #define ERR_MSG_NOARGS _("not enough arguments")) > > if (argv < 2) > errtryhelp(EXIT_FAILURE, ERR_MSG_NOARGS); I'd like to avoid things like ERR_MSG_NOARGS in the standard code for basic messages. if (argv < 2) errnoargs(EXIT_FAILURE); seems as a way how to keep it simple and stupid. It's fine to have ERR_MSG_* somewhere in the header files, but details for standard things should be hidden by errxxxxx() macros. > Funny, I've had already deleted my werrtryhelp branch because I got > already tired of this cleanup. I just got it back from git-reflog > and safe it for later ;) I understand :-) It's nothing critical -- just idea. Karel -- Karel Zak <kzak@xxxxxxxxxx> http://karelzak.blogspot.com -- To unsubscribe from this list: send the line "unsubscribe util-linux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html