From e742d1c9ae5103c9f88d3fde085e0694efaeeb5a Mon Sep 17 00:00:00 2001 From: Stefan Haberland Date: Thu, 11 Aug 2022 13:52:30 +0200 Subject: [PATCH] zdev: correctly handle multiple values for CCW devices MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Correctly create multiple lines in the udev rule for CCW device attributes with multi bit set that contain multiple values. Suggested-by: Peter Oberparleiter Signed-off-by: Stefan Haberland Reviewed-by: Jan Hoeppner Reviewed-by: Peter Oberparleiter Signed-off-by: Jan Höppner --- zdev/src/udev_ccw.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/zdev/src/udev_ccw.c b/zdev/src/udev_ccw.c index 7c0a7030..3375a5e5 100644 --- a/zdev/src/udev_ccw.c +++ b/zdev/src/udev_ccw.c @@ -221,6 +221,7 @@ static void write_attr_to_file(FILE *fd, struct device_state *state, const char struct ptrlist_node *p; struct setting *s; struct util_list *list = NULL; + struct strlist_node *str; /* Apply attributes in correct order. */ list = setting_list_get_sorted(state->settings); @@ -229,8 +230,13 @@ static void write_attr_to_file(FILE *fd, struct device_state *state, const char s = p->ptr; if (s->removed) continue; - if ((s->attrib && s->attrib->internal) || - internal_by_name(s->name)) { + if (s->values) { + util_list_iterate(s->values, str) { + fprintf(fd, "ATTR{[ccw/%s]%s}=\"%s\"\n", + id, s->name, str->str); + } + } else if ((s->attrib && s->attrib->internal) || + internal_by_name(s->name)) { fprintf(fd, "ENV{zdev_%s}=\"%s\"\n", internal_get_name(s->name), s->value); } else {