Re: [PATCH] chrt: Allow optional priority for non‑ prio policies without --pid
Karel Zak <[email protected]> Mon, 21 Jul 2025 09:01:42 +0200
| Newsgroups | org.kernel.vger.util-linux |
|---|---|
| Message-ID | <eu5csrk3f4jmwf7olhle3ukcxvdcofhgk7etss6dko3h364qhn@bxaakyetv7uk> |
On Sat, Jul 19, 2025 at 12:34:39AM +0530, Madadi Vineeth Reddy wrote:
> diff --git a/schedutils/chrt.c b/schedutils/chrt.c
> index 10ba7fbf6..44b9b9e20 100644
> --- a/schedutils/chrt.c
> +++ b/schedutils/chrt.c
> @@ -395,6 +395,18 @@ static void set_sched(struct chrt_ctl *ctl)
> ctl->altered = 1;
> }
>
> +static bool is_number(const char *s)
> +{
> + if (!s || *s == '\0')
> + return false;
> +
> + for (const char *p = s; *p; p++) {
> + if (!isdigit((unsigned char)*p))
> + return false;
> + }
> + return true;
> +}
It seems you can replace this function with isdigit_string() from
include/strutils.h.
> +
> int main(int argc, char **argv)
> {
> struct chrt_ctl _ctl = { .pid = -1, .policy = SCHED_RR }, *ctl = &_ctl;
> @@ -503,7 +515,7 @@ int main(int argc, char **argv)
> }
> }
>
> - if (argc - optind < (ctl->pid == 0 ? 1 : 2)) {
> + if (argc - optind < 1) {
> warnx(_("too few arguments"));
> errtryhelp(EXIT_FAILURE);
> }
> @@ -527,7 +539,10 @@ int main(int argc, char **argv)
> if (ctl->verbose)
> show_sched_info(ctl);
>
> - if (argc - optind > 1) {
> + bool have_prio = need_prio ||
> + (ctl->pid == -1 ? (optind < argc && is_number(argv[optind])) : (argc - optind > 1));
> +
> + if (have_prio) {
> errno = 0;
> ctl->priority = strtos32_or_err(argv[optind], _("invalid priority argument"));
> } else
> @@ -568,9 +583,19 @@ int main(int argc, char **argv)
> show_sched_info(ctl);
>
> if (!ctl->pid) {
> - argv += optind + 1;
> - if (strcmp(argv[0], "--") == 0)
> + argv += optind;
> +
> + if (need_prio)
> + argv++;
> + else if (argv[0] && is_number(argv[0]))
> + argv++;
> +
> + if (argv[0] && strcmp(argv[0], "--") == 0)
> argv++;
> +
> + if (!argv[0])
> + errx(EXIT_FAILURE, "Missing command to execute");
You need to use _() for translation, ideally with string already used in
other tools. For example, _("no command specified").
Thanks!
Karel
--
Karel Zak <[email protected]>
http://karelzak.blogspot.com