]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
strutils: move an error message to where it is used, and improve it
authorBenno Schulenberg <bensberg@telfort.nl>
Fri, 2 May 2025 12:22:42 +0000 (14:22 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 5 May 2025 08:45:15 +0000 (10:45 +0200)
Calling gettext() is somewhat costly: it has to find the given message
among the more than five thousand messages in util-linux's repertoire.
So, call gettext() only when the message actually gets printed.

Besides, allowing to customize the error message for parse_switch() was
a nice gesture, but it's unneeded: a fixed error message is good enough.

Also, "argument error" was rather vague, as it doesn't say _what_ the
error is.  Better say "unsupported argument".

Signed-off-by: Benno Schulenberg <bensberg@telfort.nl>
include/strutils.h
lib/strutils.c
sys-utils/eject.c
sys-utils/irqtop.c
sys-utils/losetup.c
sys-utils/tunelp.c
term-utils/setterm.c

index 63cd1c1c6b3183e32e1f6cb675324d1e725e83f2..f8eb5f7c454647a7778230df0860e873959bbfcb 100644 (file)
@@ -68,7 +68,7 @@ extern int isxdigit_strend(const char *str, const char **end);
 #define isxdigit_string(_s)    isxdigit_strend(_s, NULL)
 
 
-extern int parse_switch(const char *arg, const char *errmesg, ...);
+extern int parse_switch(const char *arg, ...);
 
 #ifndef HAVE_MEMPCPY
 extern void *mempcpy(void *restrict dest, const void *restrict src, size_t n);
index 0cf0da96b6b76e8c8e4667936dcf796dddebb096..00934d5119b10554273d8f6a840960527360cb59 100644 (file)
@@ -247,14 +247,14 @@ int isxdigit_strend(const char *str, const char **end)
 }
 
 /*
- *  parse_switch(argv[i], "on", "off",  "yes", "no",  NULL);
+ *  For example: parse_switch(argv[i], "on", "off",  "yes", "no",  NULL);
  */
-int parse_switch(const char *arg, const char *errmesg, ...)
+int parse_switch(const char *arg, ...)
 {
        const char *a, *b;
        va_list ap;
 
-       va_start(ap, errmesg);
+       va_start(ap, *arg);
        do {
                a = va_arg(ap, char *);
                if (!a)
@@ -275,7 +275,7 @@ int parse_switch(const char *arg, const char *errmesg, ...)
        } while (1);
        va_end(ap);
 
-       errx(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, arg);
+       errx(STRTOXX_EXIT_CODE, _("unsupported argument: %s"), arg);
 }
 
 #ifndef HAVE_MEMPCPY
index 310d6c3dfad09b466ed6b85acf52904609ef0f46..d01cde719182f09fef924ee026770f9c8d9ab922 100644 (file)
@@ -207,8 +207,7 @@ static void parse_args(struct eject_control *ctl, int argc, char **argv)
                switch (c) {
                case 'a':
                        ctl->a_option = 1;
-                       ctl->a_arg = parse_switch(optarg, _("argument error"),
-                                               "on", "off",  "1", "0",  NULL);
+                       ctl->a_arg = parse_switch(optarg, "on", "off",  "1", "0",  NULL);
                        break;
                case 'c':
                        ctl->c_option = 1;
@@ -229,8 +228,7 @@ static void parse_args(struct eject_control *ctl, int argc, char **argv)
                        break;
                case 'i':
                        ctl->i_option = 1;
-                       ctl->i_arg = parse_switch(optarg, _("argument error"),
-                                               "on", "off",  "1", "0",  NULL);
+                       ctl->i_arg = parse_switch(optarg, "on", "off",  "1", "0",  NULL);
                        break;
                case 'm':
                        ctl->m_option = 1;
index 51e04ee85ab0f70bb880c0ea4dd5766aecebd325..7275d0510ea877ba164380a5c14a5beba6eadaa9 100644 (file)
@@ -366,9 +366,8 @@ static void parse_args(     struct irqtop_ctl *ctl,
                                ctl->cpustat_mode = IRQTOP_CPUSTAT_AUTO;
                        else
                                ctl->cpustat_mode = IRQTOP_CPUSTAT_DISABLE - parse_switch(optarg,
-                                                       _("unsupported argument"), "yes", "no",
                                                        "always", "never", "enable", "disable",
-                                                       "on", "off", "1", "0", NULL);
+                                                       "on", "off", "yes", "no", "1", "0", NULL);
                        break;
                case 'C':
                        {
index eafab72f3df614f9fe45f815466dd6106a83354c..2840586a84bea50647dd57a2e022d276a2cb5c59 100644 (file)
@@ -818,7 +818,7 @@ int main(int argc, char **argv)
                case OPT_DIO:
                        use_dio = set_dio = 1;
                        if (optarg)
-                               use_dio = parse_switch(optarg, _("argument error"), "on", "off", NULL);
+                               use_dio = parse_switch(optarg, "on", "off", NULL);
                        if (use_dio)
                                lo_flags |= LO_FLAGS_DIRECT_IO;
                        break;
index 95a21b39eeecbebec1b4b89543fc1916e964f40c..51442d59576bbcd36a83ccb228652d8aafb9b034 100644 (file)
@@ -189,24 +189,24 @@ int main(int argc, char **argv)
                        break;
                case 'a':
                        cmds->op = LPABORT;
-                       cmds->val = parse_switch(optarg, _("argument error"), "on", "off", NULL);
+                       cmds->val = parse_switch(optarg, "on", "off", NULL);
                        cmds->next = xmalloc(sizeof(struct command));
                        cmds = cmds->next;
                        cmds->next = NULL;
                        break;
                case 'q':
-                       show_irq = parse_switch(optarg, _("argument error"), "on", "off", NULL);
+                       show_irq = parse_switch(optarg, "on", "off", NULL);
                        break;
                case 'o':
                        cmds->op = LPABORTOPEN;
-                       cmds->val = parse_switch(optarg, _("argument error"), "on", "off", NULL);
+                       cmds->val = parse_switch(optarg, "on", "off", NULL);
                        cmds->next = xmalloc(sizeof(struct command));
                        cmds = cmds->next;
                        cmds->next = NULL;
                        break;
                case 'C':
                        cmds->op = LPCAREFUL;
-                       cmds->val = parse_switch(optarg, _("argument error"), "on", "off", NULL);
+                       cmds->val = parse_switch(optarg, "on", "off", NULL);
                        cmds->next = xmalloc(sizeof(struct command));
                        cmds = cmds->next;
                        cmds->next = NULL;
index 801095c8751607d042c8be178a2ceb58905cc5f5..886ff78fc628f0fe4bacf5a68e876e13c1ea541f 100644 (file)
@@ -559,23 +559,19 @@ static void parse_option(struct setterm_control *ctl, int ac, char **av)
                        break;
                case OPT_CURSOR:
                        ctl->opt_cursor = set_opt_flag(ctl->opt_cursor);
-                       ctl->opt_cu_on = parse_switch(optarg, _("argument error"),
-                                               "on", "off", NULL);
+                       ctl->opt_cu_on = parse_switch(optarg,"on", "off", NULL);
                        break;
                case OPT_REPEAT:
                        ctl->opt_repeat = set_opt_flag(ctl->opt_repeat);
-                       ctl->opt_rep_on = parse_switch(optarg, _("argument error"),
-                                               "on", "off", NULL);
+                       ctl->opt_rep_on = parse_switch(optarg, "on", "off", NULL);
                        break;
                case OPT_APPCURSORKEYS:
                        ctl->opt_appcursorkeys = set_opt_flag(ctl->opt_appcursorkeys);
-                       ctl->opt_appck_on = parse_switch(optarg, _("argument error"),
-                                               "on", "off", NULL);
+                       ctl->opt_appck_on = parse_switch(optarg, "on", "off", NULL);
                        break;
                case OPT_LINEWRAP:
                        ctl->opt_linewrap = set_opt_flag(ctl->opt_linewrap);
-                       ctl->opt_li_on = parse_switch(optarg, _("argument error"),
-                                               "on", "off", NULL);
+                       ctl->opt_li_on = parse_switch(optarg, "on", "off", NULL);
                        break;
                case OPT_DEFAULT:
                        ctl->opt_default = set_opt_flag(ctl->opt_default);
@@ -598,33 +594,27 @@ static void parse_option(struct setterm_control *ctl, int ac, char **av)
                        break;
                case OPT_INVERSESCREEN:
                        ctl->opt_inversescreen = set_opt_flag(ctl->opt_inversescreen);
-                       ctl->opt_invsc_on = parse_switch(optarg, _("argument error"),
-                                               "on", "off", NULL);
+                       ctl->opt_invsc_on = parse_switch(optarg, "on", "off", NULL);
                        break;
                case OPT_BOLD:
                        ctl->opt_bold = set_opt_flag(ctl->opt_bold);
-                       ctl->opt_bo_on = parse_switch(optarg, _("argument error"),
-                                               "on", "off", NULL);
+                       ctl->opt_bo_on = parse_switch(optarg, "on", "off", NULL);
                        break;
                case OPT_HALF_BRIGHT:
                        ctl->opt_halfbright = set_opt_flag(ctl->opt_halfbright);
-                       ctl->opt_hb_on = parse_switch(optarg, _("argument error"),
-                                               "on", "off", NULL);
+                       ctl->opt_hb_on = parse_switch(optarg, "on", "off", NULL);
                        break;
                case OPT_BLINK:
                        ctl->opt_blink = set_opt_flag(ctl->opt_blink);
-                       ctl->opt_bl_on = parse_switch(optarg, _("argument error"),
-                                               "on", "off", NULL);
+                       ctl->opt_bl_on = parse_switch(optarg, "on", "off", NULL);
                        break;
                case OPT_REVERSE:
                        ctl->opt_reverse = set_opt_flag(ctl->opt_reverse);
-                       ctl->opt_re_on = parse_switch(optarg, _("argument error"),
-                                               "on", "off", NULL);
+                       ctl->opt_re_on = parse_switch(optarg, "on", "off", NULL);
                        break;
                case OPT_UNDERLINE:
                        ctl->opt_underline = set_opt_flag(ctl->opt_underline);
-                       ctl->opt_un_on = parse_switch(optarg, _("argument error"),
-                                               "on", "off", NULL);
+                       ctl->opt_un_on = parse_switch(optarg, "on", "off", NULL);
                        break;
                case OPT_STORE:
                        ctl->opt_store = set_opt_flag(ctl->opt_store);
@@ -632,8 +622,7 @@ static void parse_option(struct setterm_control *ctl, int ac, char **av)
                case OPT_CLEAR:
                        ctl->opt_clear = set_opt_flag(ctl->opt_clear);
                        if (optarg)
-                               ctl->opt_cl_all = parse_switch(optarg, _("argument error"),
-                                               "all", "rest", NULL);
+                               ctl->opt_cl_all = parse_switch(optarg, "all", "rest", NULL);
                        else
                                ctl->opt_cl_all = 1;
                        break;
@@ -667,8 +656,7 @@ static void parse_option(struct setterm_control *ctl, int ac, char **av)
                        break;
                case OPT_MSG:
                        ctl->opt_msg = set_opt_flag(ctl->opt_msg);
-                       ctl->opt_msg_on = parse_switch(optarg, _("argument error"),
-                                               "on", "off", NULL);
+                       ctl->opt_msg_on = parse_switch(optarg, "on", "off", NULL);
                        break;
                case OPT_MSGLEVEL:
                        ctl->opt_msglevel = set_opt_flag(ctl->opt_msglevel);