[systemd-devel] [PATCH] udev: Remove hard-coded string offsets when parsing kernel command line.

David Herrmann dh.herrmann at gmail.com
Wed Nov 5 03:54:21 PST 2014


Hi

On Wed, Nov 5, 2014 at 10:16 AM, Richard W.M. Jones <rjones at redhat.com> wrote:
> ---
>  src/udev/udevd.c | 23 ++++++++++++-----------
>  1 file changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/src/udev/udevd.c b/src/udev/udevd.c
> index 193702c..340812b 100644
> --- a/src/udev/udevd.c
> +++ b/src/udev/udevd.c
> @@ -968,6 +968,7 @@ static void kernel_cmdline_options(struct udev *udev) {
>
>          FOREACH_WORD_QUOTED(word, l, line, state) {
>                  char *s, *opt;
> +                const char *name;
>
>                  s = strndup(word, l);
>                  if (!s)
> @@ -979,24 +980,24 @@ static void kernel_cmdline_options(struct udev *udev) {
>                  else
>                          opt = s;
>
> -                if (startswith(opt, "udev.log-priority=")) {
> +                if (startswith(opt, name = "udev.log-priority=")) {

This looks weird. Note that "startswith()" returns a pointer to the
offset, so maybe we should restructure like this:

if ((value = startswith(opt, "udev.log-priority))) {
        prio = util_log_priority(value);
        ....
}


I will try to fix this up myself. Lets see..

Thanks
David

>                          int prio;
>
> -                        prio = util_log_priority(opt + 18);
> +                        prio = util_log_priority(opt + strlen(name));
>                          log_set_max_level(prio);
>                          udev_set_log_priority(udev, prio);
> -                } else if (startswith(opt, "udev.children-max=")) {
> -                        r = safe_atoi(opt + 18, &arg_children_max);
> +                } else if (startswith(opt, name = "udev.children-max=")) {
> +                        r = safe_atoi(opt + strlen(name), &arg_children_max);
>                          if (r < 0)
> -                                log_warning("Invalid udev.children-max ignored: %s", opt + 18);
> -                } else if (startswith(opt, "udev.exec-delay=")) {
> -                        r = safe_atoi(opt + 16, &arg_exec_delay);
> +                                log_warning("Invalid udev.children-max ignored: %s", opt + strlen(name));
> +                } else if (startswith(opt, name = "udev.exec-delay=")) {
> +                        r = safe_atoi(opt + strlen(name), &arg_exec_delay);
>                          if (r < 0)
> -                                log_warning("Invalid udev.exec-delay ignored: %s", opt + 16);
> -                } else if (startswith(opt, "udev.event-timeout=")) {
> -                        r = safe_atou64(opt + 19, &arg_event_timeout_usec);
> +                                log_warning("Invalid udev.exec-delay ignored: %s", opt + strlen(name));
> +                } else if (startswith(opt, name = "udev.event-timeout=")) {
> +                        r = safe_atou64(opt + strlen(name), &arg_event_timeout_usec);
>                          if (r < 0) {
> -                                log_warning("Invalid udev.event-timeout ignored: %s", opt + 19);
> +                                log_warning("Invalid udev.event-timeout ignored: %s", opt + strlen(name));
>                                  break;
>                          }
>                          arg_event_timeout_usec *= USEC_PER_SEC;
> --
> 2.1.0
>
> _______________________________________________
> systemd-devel mailing list
> systemd-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/systemd-devel


More information about the systemd-devel mailing list