Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.5:Update
s390-tools.29120
s390-tools-sles15sp4-03-libutil-Introduce-util_...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File s390-tools-sles15sp4-03-libutil-Introduce-util_udev.patch of Package s390-tools.29120
Subject: [PATCH] [FEAT VS1822] libutil: Introduce util_udev From: Matthew Rosato <mjrosato@linux.ibm.com> Summary: ap_tools: add ap-check and the ap device type to zdev Description: This feature adds multiple components in support of persistent configuration of vfio-ap mediated devices. The ap-check utility is added as a callout function for the mdevctl utility. This allows for meaningful error messages to be presented to end-users when vfio-ap configuration errors are detected while using mdevctl to create/modify vfio-ap mediated devices. Additionally, the 'ap' device type is added to zdev, providing a command-line interface for managing the apmask and aqmask, which determine what AP resources are available for vfio-ap usage. 'chzdev' is updated to allow for modifying the active masks as well as to specify persistent mask values via a udev rule. 'lszdev' is updated to allow for querying of the active and persistent mask values. Upstream-ID: 6f7982dae5499e9bf90ad80479f8303d85a6f157 Problem-ID: VS1822 Upstream-Description: libutil: Introduce util_udev Move code to read udev files from zdev into a utility library for use by other tools. Acked-by: Jan Hoeppner <hoeppner@linux.ibm.com> Reviewed-by: Peter Oberparleiter <oberpar@linux.ibm.com> Reviewed-by: Tony Krowiak <akrowiak@linux.ibm.com> Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com> Signed-off-by: Jan Hoeppner <hoeppner@linux.ibm.com> Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com> --- include/lib/util_udev.h | 44 +++++ libutil/util_udev.c | 362 +++++++++++++++++++++++++++++++++++++++++++++++ zdev/include/udev.h | 29 --- zdev/src/udev.c | 327 ------------------------------------------ zdev/src/udev_ccw.c | 15 + zdev/src/udev_ccwgroup.c | 21 +- zdev/src/udev_zfcp_lun.c | 21 +- 7 files changed, 443 insertions(+), 376 deletions(-) --- /dev/null +++ b/include/lib/util_udev.h @@ -0,0 +1,44 @@ +/* + * @defgroup util_udev_h util_udev: UDEV interface + * @{ + * @brief Work with UDEV files + * + * Copyright IBM Corp. 2022 + * + * s390-tools is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See LICENSE for details. + */ + +#ifndef LIB_UTIL_UDEV_H +#define LIB_UTIL_UDEV_H + +#include <stdbool.h> +#include "lib/util_exit_code.h" +#include "lib/util_list.h" + +/* Single key-operator-value entry in a udev rule line.*/ +struct util_udev_entry_node { + struct util_list_node node; + char *key; + char *op; + char *value; +}; + +/* Single udev line in a udev rule file. */ +struct util_udev_line_node { + struct util_list_node node; + struct util_list entries; + char *line; +}; + +/* Udev rule file. */ +struct util_udev_file { + struct util_list lines; +}; + +util_exit_code_t util_udev_read_file(const char *path, + struct util_udev_file **file_ptr); +void util_udev_free_file(struct util_udev_file *file); +void util_udev_file_print(struct util_udev_file *file); + +#endif /** LIB_UTIL_UDEV_H @} */ --- /dev/null +++ b/libutil/util_udev.c @@ -0,0 +1,362 @@ +/* + * util - Utility function library + * + * UDEV helper functions + * + * Copyright IBM Corp. 2022 + * + * s390-tools is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See LICENSE for details. + */ + +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "lib/util_exit_code.h" +#include "lib/util_file.h" +#include "lib/util_libc.h" +#include "lib/util_list.h" +#include "lib/util_path.h" +#include "lib/util_udev.h" + +/* Create a newly allocated udev entry. */ +static struct util_udev_entry_node *util_udev_entry_node_new(const char *key, + const char *op, + const char *value) +{ + struct util_udev_entry_node *entry; + + entry = util_zalloc(sizeof(struct util_udev_entry_node)); + entry->key = util_strdup(key); + entry->op = util_strdup(op); + entry->value = util_strdup(value); + + return entry; +} + +/* Release resources associated with udev entry. */ +static void util_udev_entry_node_free(struct util_udev_entry_node *entry) +{ + if (!entry) + return; + free(entry->key); + free(entry->op); + free(entry->value); + free(entry); +} + +/* Create a newly allocated udev line. */ +static struct util_udev_line_node *util_udev_line_node_new(void) +{ + struct util_udev_line_node *line; + + line = util_zalloc(sizeof(struct util_udev_line_node)); + util_list_init(&line->entries, struct util_udev_entry_node, node); + + return line; +} + +/* Release resources associated with udev line. */ +static void util_udev_line_node_free(struct util_udev_line_node *line) +{ + struct util_udev_entry_node *e, *n; + + if (!line) + return; + util_list_iterate_safe(&line->entries, e, n) { + util_list_remove(&line->entries, e); + util_udev_entry_node_free(e); + } + free(line->line); + free(line); +} + +/* Create a newly allocated udev file. */ +static struct util_udev_file *util_udev_file_new(void) +{ + struct util_udev_file *file; + + file = util_zalloc(sizeof(struct util_udev_file)); + util_list_init(&file->lines, struct util_udev_line_node, node); + + return file; +} + +/** + * Release resources associated with udev file. + * + * @param[in, out] file Udev file structure to be freed + */ +void util_udev_free_file(struct util_udev_file *file) +{ + struct util_udev_line_node *l, *n; + + if (!file) + return; + util_list_iterate_safe(&file->lines, l, n) { + util_list_remove(&file->lines, l); + util_udev_line_node_free(l); + } + free(file); +} + +/** + * Print the contents of a udev file to stdout. Used for debugging. + * + * @param[in] file Udev file structure to print + */ +void util_udev_file_print(struct util_udev_file *file) +{ + struct util_udev_line_node *l; + struct util_udev_entry_node *e; + + printf("util_udev_file at %p\n", (void *) file); + if (!file) + return; + util_list_iterate(&file->lines, l) { + printf(" util_udev_line_node at %p\n", (void *) l); + printf(" line='%s'\n", l->line); + util_list_iterate(&l->entries, e) { + printf(" util_udev_entry at %p\n", (void *) e); + printf(" '%s' '%s' '%s'\n", e->key, e->op, + e->value); + } + } +} + +static void skip_whitespace(const char **s_ptr) +{ + const char *s = *s_ptr; + + while (*s && isspace(*s)) + s++; + + *s_ptr = s; +} + +static char *parse_key(const char **s_ptr) +{ + const char *s, *e; + char *key; + + s = *s_ptr; + /* Parse \w+(\{[^\}]*\})? */ + e = s; + while (*e && (isalnum(*e) || *e == '_')) + e++; + if (*e == '{') { + while (*e && *e != '}') + e++; + if (*e == '}') + e++; + } + + if (e == s) + return NULL; + + /* s points to key start, e to character after key end. */ + key = util_zalloc(e - s + 1); + memcpy(key, s, e - s); + + *s_ptr = e; + + return key; +} + +static char *parse_op(const char **s_ptr) +{ + const char *ops[] = { "==", "!=", "=", "+=", ":=", NULL }; + const char *entry; + size_t len; + int i; + + entry = *s_ptr; + for (i = 0; ops[i]; i++) { + len = strlen(ops[i]); + if (strncmp(entry, ops[i], len) == 0) { + *s_ptr += len; + return util_strdup(ops[i]); + } + } + + return NULL; +} + +static char *parse_value(const char **s_ptr) +{ + const char *s, *e; + char *value; + + /* Parse: ^\s*(.*)\s*$ */ + s = *s_ptr; + skip_whitespace(&s); + e = s; + while (*e) + e++; + e--; + while (e > s && isspace(*e)) + e--; + e++; + + *s_ptr = e; + + /* Remove quotes. */ + if ((*s == '"' && *(e - 1) == '"') || + (*s == '\'' && *(e - 1) == '\'')) { + s++; + e--; + } + + /* s points to value start, e to character after value end. */ + value = util_zalloc(e - s + 1); + memcpy(value, s, e - s); + + return value; +} + +static bool parse_util_udev_entry(struct util_udev_line_node *line, + const char *entry) +{ + char *key = NULL, *op = NULL, *value = NULL; + struct util_udev_entry_node *e; + bool rc = false; + + /* Parse: ^\s*(\w+)\s*(==|!=|=|\+=|:=)\s*"?([^"]*)"\s*$ */ + + /* Parse key. */ + skip_whitespace(&entry); + key = parse_key(&entry); + if (!key) + goto out; + + /* Parse operator. */ + skip_whitespace(&entry); + op = parse_op(&entry); + if (!op) + goto out; + + /* Parse value. */ + skip_whitespace(&entry); + value = parse_value(&entry); + if (!value) + goto out; + skip_whitespace(&entry); + + /* Check for unrecognized characters at end of entry. */ + if (*entry != 0) + goto out; + + /* Add entry to list. */ + e = util_udev_entry_node_new(key, op, value); + util_list_add_tail(&line->entries, e); + rc = true; + +out: + free(key); + free(op); + free(value); + + return rc; +} + +static void replace_unquoted(char *s, char from, char to) +{ + char quoted = 0; + + for (; *s; s++) { + if (quoted) { + /* Skip until quote end is found. */ + if (*s == quoted) + quoted = 0; + continue; + } + if (*s == '"' || *s == '\'') { + quoted = *s; + continue; + } + if (*s == from) + *s = to; + } +} + +static bool parse_util_udev_line(struct util_udev_file *file, const char *line) +{ + char *copy, *curr, *next; + struct util_udev_line_node *l; + int i; + bool result = true; + + l = util_udev_line_node_new(); + l->line = util_strdup(line); + + /* Check for empty lines and comment lines. */ + for (i = 0; line[i] && isspace(line[i]); i++); + if (line[i] == 0 || line[i] == '#') + goto ok; + + /* Parse each comma-separated entry. */ + copy = util_strdup(line); + + /* A hack to differentiate between quoted and unquoted commas. */ + replace_unquoted(copy, ',', 1); + + next = copy; + while ((curr = strsep(&next, "\1"))) { + if (!parse_util_udev_entry(l, curr)) { + result = false; + break; + } + } + free(copy); + +ok: + if (result) + util_list_add_tail(&file->lines, l); + else + util_udev_line_node_free(l); + + return result; +} + +/** + * Create a new util_udev_file structure and read the contents of a specified + * udev file into that structure. + * + * @param[in] path Path to the udev file that will be read in + * @param[in, out] file_ptr A buffer to store resulting udev file structure + * + * @retval 0 Udev file read successfully + * @retval UTIL_EXIT_RUNTIME_ERROR Error reading the udev file + */ +util_exit_code_t util_udev_read_file(const char *path, + struct util_udev_file **file_ptr) +{ + char *text, *curr, *next; + struct util_udev_file *file; + int once = 0; + + text = util_file_read_text_file(path, 0); + if (!text) + return UTIL_EXIT_RUNTIME_ERROR; + file = util_udev_file_new(); + + /* Iterate over each line. */ + next = text; + while ((curr = strsep(&next, "\n"))) { + if (parse_util_udev_line(file, curr)) + continue; + if (!once) { + once = 1; + fprintf(stderr, "Unrecognized udev rule in %s:\n", + path); + } + fprintf(stderr, "%s\n", curr); + } + + free(text); + *file_ptr = file; + + return UTIL_EXIT_OK; +} --- a/zdev/include/udev.h +++ b/zdev/include/udev.h @@ -11,7 +11,7 @@ #define UDEV_H #include "lib/util_list.h" -#include "exit_code.h" +#include "lib/util_udev.h" struct attrib; struct setting_list; @@ -19,30 +19,7 @@ struct setting_list; extern int udev_need_settle; extern int udev_no_settle; -/* Single key-operator-value entry in a udev rule line.*/ -struct udev_entry_node { - struct util_list_node node; - char *key; - char *op; - char *value; -}; - -/* Single udev line in a udev rule file. */ -struct udev_line_node { - struct util_list_node node; - struct util_list entries; - char *line; -}; - -/* Udev rule file. */ -struct udev_file { - struct util_list lines; -}; - -exit_code_t udev_read_file(const char *, struct udev_file **); -bool udev_file_is_empty(struct udev_file *file); -void udev_free_file(struct udev_file *); -void udev_file_print(struct udev_file *); +bool udev_file_is_empty(struct util_udev_file *file); void udev_get_device_ids(const char *type, struct util_list *list, bool autoconf); @@ -51,7 +28,7 @@ exit_code_t udev_remove_rule(const char void udev_settle(void); void udev_add_internal_from_entry(struct setting_list *list, - struct udev_entry_node *entry, + struct util_udev_entry_node *entry, struct attrib **attribs); #endif /* UDEV_H */ --- a/zdev/src/udev.c +++ b/zdev/src/udev.c @@ -14,6 +14,7 @@ #include <string.h> #include "lib/util_path.h" +#include "lib/util_udev.h" #include "attrib.h" #include "ccw.h" @@ -26,330 +27,10 @@ int udev_need_settle = 0; int udev_no_settle; -/* Create a newly allocated udev entry. */ -static struct udev_entry_node *udev_entry_node_new(const char *key, - const char *op, - const char *value) -{ - struct udev_entry_node *entry; - - entry = misc_malloc(sizeof(struct udev_entry_node)); - entry->key = misc_strdup(key); - entry->op = misc_strdup(op); - entry->value = misc_strdup(value); - - return entry; -} - -/* Release resources associated with udev entry. */ -static void udev_entry_node_free(struct udev_entry_node *entry) -{ - if (!entry) - return; - free(entry->key); - free(entry->op); - free(entry->value); - free(entry); -} - -/* Create a newly allocated udev line. */ -static struct udev_line_node *udev_line_node_new(void) -{ - struct udev_line_node *line; - - line = misc_malloc(sizeof(struct udev_line_node)); - util_list_init(&line->entries, struct udev_entry_node, node); - - return line; -} - -/* Release resources associated with udev line. */ -static void udev_line_node_free(struct udev_line_node *line) -{ - struct udev_entry_node *e, *n; - - if (!line) - return; - util_list_iterate_safe(&line->entries, e, n) { - util_list_remove(&line->entries, e); - udev_entry_node_free(e); - } - free(line->line); - free(line); -} - -/* Create a newly allocated udev file. */ -static struct udev_file *udev_file_new(void) -{ - struct udev_file *file; - - file = misc_malloc(sizeof(struct udev_file)); - util_list_init(&file->lines, struct udev_line_node, node); - - return file; -} - -/* Release resources associated with udev file. */ -void udev_free_file(struct udev_file *file) -{ - struct udev_line_node *l, *n; - - if (!file) - return; - util_list_iterate_safe(&file->lines, l, n) { - util_list_remove(&file->lines, l); - udev_line_node_free(l); - } - free(file); -} - -/* Used for debugging. */ -void udev_file_print(struct udev_file *file) -{ - struct udev_line_node *l; - struct udev_entry_node *e; - - printf("udev_file at %p\n", (void *) file); - if (!file) - return; - util_list_iterate(&file->lines, l) { - printf(" udev_line_node at %p\n", (void *) l); - printf(" line='%s'\n", l->line); - util_list_iterate(&l->entries, e) { - printf(" udev_entry at %p\n", (void *) e); - printf(" '%s' '%s' '%s'\n", e->key, e->op, - e->value); - } - } -} - -static void skip_whitespace(const char **s_ptr) -{ - const char *s = *s_ptr; - - while (*s && isspace(*s)) - s++; - - *s_ptr = s; -} - -static char *parse_key(const char **s_ptr) -{ - const char *s, *e; - char *key; - - s = *s_ptr; - /* Parse \w+(\{[^\}]*\})? */ - e = s; - while (*e && (isalnum(*e) || *e == '_')) - e++; - if (*e == '{') { - while (*e && *e != '}') - e++; - if (*e == '}') - e++; - } - - if (e == s) - return NULL; - - /* s points to key start, e to character after key end. */ - key = misc_malloc(e - s + 1); - memcpy(key, s, e - s); - - *s_ptr = e; - - return key; -} - -static char *parse_op(const char **s_ptr) -{ - const char *ops[] = { "==", "!=", "=", "+=", ":=", NULL }; - const char *entry; - size_t len; - int i; - - entry = *s_ptr; - for (i = 0; ops[i]; i++) { - len = strlen(ops[i]); - if (strncmp(entry, ops[i], len) == 0) { - *s_ptr += len; - return misc_strdup(ops[i]); - } - } - - return NULL; -} - -static char *parse_value(const char **s_ptr) -{ - const char *s, *e; - char *value; - - /* Parse: ^\s*(.*)\s*$ */ - s = *s_ptr; - skip_whitespace(&s); - e = s; - while (*e) - e++; - e--; - while (e > s && isspace(*e)) - e--; - e++; - - *s_ptr = e; - - /* Remove quotes. */ - if ((*s == '"' && *(e - 1) == '"') || - (*s == '\'' && *(e - 1) == '\'')) { - s++; - e--; - } - - /* s points to value start, e to character after value end. */ - value = misc_malloc(e - s + 1); - memcpy(value, s, e - s); - - return value; -} - -static bool parse_udev_entry(struct udev_line_node *line, const char *entry) -{ - char *key = NULL, *op = NULL, *value = NULL; - struct udev_entry_node *e; - bool rc = false; - - /* Parse: ^\s*(\w+)\s*(==|!=|=|\+=|:=)\s*"?([^"]*)"\s*$ */ - - /* Parse key. */ - skip_whitespace(&entry); - key = parse_key(&entry); - if (!key) - goto out; - - /* Parse operator. */ - skip_whitespace(&entry); - op = parse_op(&entry); - if (!op) - goto out; - - /* Parse value. */ - skip_whitespace(&entry); - value = parse_value(&entry); - if (!value) - goto out; - skip_whitespace(&entry); - - /* Check for unrecognized characters at end of entry. */ - if (*entry != 0) - goto out; - - /* Add entry to list. */ - e = udev_entry_node_new(key, op, value); - util_list_add_tail(&line->entries, e); - rc = true; - -out: - free(key); - free(op); - free(value); - - return rc; -} - -static void replace_unquoted(char *s, char from, char to) -{ - char quoted = 0; - - for (; *s; s++) { - if (quoted) { - /* Skip until quote end is found. */ - if (*s == quoted) - quoted = 0; - continue; - } - if (*s == '"' || *s == '\'') { - quoted = *s; - continue; - } - if (*s == from) - *s = to; - } -} - -static bool parse_udev_line(struct udev_file *file, const char *line) -{ - char *copy, *curr, *next; - struct udev_line_node *l; - int i; - bool result = true; - - l = udev_line_node_new(); - l->line = misc_strdup(line); - - /* Check for empty lines and comment lines. */ - for (i = 0; line[i] && isspace(line[i]); i++); - if (line[i] == 0 || line[i] == '#') - goto ok; - - /* Parse each comma-separated entry. */ - copy = misc_strdup(line); - - /* A hack to differentiate between quoted and unquoted commas. */ - replace_unquoted(copy, ',', 1); - - next = copy; - while ((curr = strsep(&next, "\1"))) { - if (!parse_udev_entry(l, curr)) { - result = false; - break; - } - } - free(copy); - -ok: - if (result) - util_list_add_tail(&file->lines, l); - else - udev_line_node_free(l); - - return result; -} - -/* Read the contents of a udev rule file. */ -exit_code_t udev_read_file(const char *path, struct udev_file **file_ptr) -{ - char *text, *curr, *next; - struct udev_file *file; - int once = 0; - - text = misc_read_text_file(path, 0, err_print); - if (!text) - return EXIT_RUNTIME_ERROR; - file = udev_file_new(); - - /* Iterate over each line. */ - next = text; - while ((curr = strsep(&next, "\n"))) { - if (parse_udev_line(file, curr)) - continue; - if (!once) { - once = 1; - verb("Unrecognized udev rule format in %s:\n", path); - } - verb("%s\n", curr); - } - - free(text); - *file_ptr = file; - - return EXIT_OK; -} - /* Check if a udev file does not contain any statements. */ -bool udev_file_is_empty(struct udev_file *file) +bool udev_file_is_empty(struct util_udev_file *file) { - struct udev_line_node *l; + struct util_udev_line_node *l; if (!file) return true; @@ -428,7 +109,7 @@ void udev_settle(void) /* Extract internal attribute settings from @entry and add to @list. * Associate corresponding attribute if found in @attribs. */ void udev_add_internal_from_entry(struct setting_list *list, - struct udev_entry_node *entry, + struct util_udev_entry_node *entry, struct attrib **attribs) { char *copy, *name, *end, *u; --- a/zdev/src/udev_ccw.c +++ b/zdev/src/udev_ccw.c @@ -14,6 +14,7 @@ #include <string.h> #include "lib/util_path.h" +#include "lib/util_udev.h" #include "attrib.h" #include "ccw.h" @@ -44,7 +45,7 @@ bool udev_ccw_exists(const char *type, c } static void add_setting_from_entry(struct setting_list *list, - struct udev_entry_node *entry, + struct util_udev_entry_node *entry, struct attrib **attribs) { char *copy, *name, *end; @@ -79,12 +80,12 @@ out: } /* Extract CCW device settings from a CCW device udev rule file. */ -static void udev_file_get_settings(struct udev_file *file, +static void udev_file_get_settings(struct util_udev_file *file, struct attrib **attribs, struct setting_list *list) { - struct udev_line_node *line; - struct udev_entry_node *entry; + struct util_udev_line_node *line; + struct util_udev_entry_node *entry; util_list_iterate(&file->lines, line) { entry = util_list_start(&line->entries); @@ -100,12 +101,12 @@ exit_code_t udev_ccw_read_device(struct struct subtype *st = dev->subtype; struct device_state *state = autoconf ? &dev->autoconf : &dev->persistent; - struct udev_file *file = NULL; + struct util_udev_file *file = NULL; exit_code_t rc; char *path; path = path_get_udev_rule(st->name, dev->id, autoconf); - rc = udev_read_file(path, &file); + rc = (exit_code_t) util_udev_read_file(path, &file); if (rc) goto out; if (udev_file_is_empty(file)) { @@ -115,7 +116,7 @@ exit_code_t udev_ccw_read_device(struct udev_file_get_settings(file, st->dev_attribs, state->settings); state->exists = 1; } - udev_free_file(file); + util_udev_free_file(file); out: free(path); --- a/zdev/src/udev_ccwgroup.c +++ b/zdev/src/udev_ccwgroup.c @@ -14,6 +14,7 @@ #include <string.h> #include "lib/util_path.h" +#include "lib/util_udev.h" #include "attrib.h" #include "ccwgroup.h" @@ -63,7 +64,7 @@ bool udev_ccwgroup_exists(const char *ty } static void add_setting_from_entry(struct setting_list *list, - struct udev_entry_node *entry, + struct util_udev_entry_node *entry, struct attrib **attribs) { char *copy, *name, *end; @@ -98,12 +99,12 @@ out: } /* Extract CCWGROUP device settings from a CCWGROUP device udev rule file. */ -static void udev_file_get_settings(struct udev_file *file, +static void udev_file_get_settings(struct util_udev_file *file, struct attrib **attribs, struct setting_list *list) { - struct udev_line_node *line; - struct udev_entry_node *entry; + struct util_udev_line_node *line; + struct util_udev_entry_node *entry; util_list_iterate(&file->lines, line) { entry = util_list_start(&line->entries); @@ -114,12 +115,12 @@ static void udev_file_get_settings(struc } /* Determine full CCWGROUP from data in udev rule file. */ -static void expand_id(struct device *dev, struct udev_file *file) +static void expand_id(struct device *dev, struct util_udev_file *file) { struct ccwgroup_devid devid; struct ccwgroup_devid *devid_ptr = dev->devid; - struct udev_line_node *line; - struct udev_entry_node *entry; + struct util_udev_line_node *line; + struct util_udev_entry_node *entry; char *id; int i; @@ -155,12 +156,12 @@ exit_code_t udev_ccwgroup_read_device(st struct subtype *st = dev->subtype; struct device_state *state = autoconf ? &dev->autoconf : &dev->persistent; - struct udev_file *file = NULL; + struct util_udev_file *file = NULL; exit_code_t rc; char *path; path = get_rule_path_by_devid(st->name, dev->devid, autoconf); - rc = udev_read_file(path, &file); + rc = (exit_code_t) util_udev_read_file(path, &file); if (rc) goto out; if (udev_file_is_empty(file)) { @@ -171,7 +172,7 @@ exit_code_t udev_ccwgroup_read_device(st expand_id(dev, file); state->exists = 1; } - udev_free_file(file); + util_udev_free_file(file); out: free(path); --- a/zdev/src/udev_zfcp_lun.c +++ b/zdev/src/udev_zfcp_lun.c @@ -15,6 +15,7 @@ #include <string.h> #include "lib/util_path.h" +#include "lib/util_udev.h" #include "attrib.h" #include "device.h" @@ -126,7 +127,7 @@ void zfcp_lun_node_list_print(struct uti } static bool zfcp_lun_devid_from_entry(struct zfcp_lun_devid *id_ptr, - struct udev_entry_node *entry) + struct util_udev_entry_node *entry) { struct zfcp_lun_devid id; char *copy = NULL, *s, *e, *u; @@ -214,7 +215,7 @@ out: } static struct zfcp_lun_node *zfcp_lun_node_from_entry( - struct udev_entry_node *entry, + struct util_udev_entry_node *entry, struct zfcp_lun_node *old, struct util_list *list) { @@ -234,7 +235,7 @@ static struct zfcp_lun_node *zfcp_lun_no return node; } -static void add_internal_setting_from_entry(struct udev_entry_node *entry, +static void add_internal_setting_from_entry(struct util_udev_entry_node *entry, struct zfcp_lun_node *node) { char *copy, *name, *end, *u; @@ -263,7 +264,7 @@ out: free(copy); } -static void add_fc_setting_from_entry(struct udev_entry_node *entry, +static void add_fc_setting_from_entry(struct util_udev_entry_node *entry, struct zfcp_lun_node *node) { char *copy, *s, *e; @@ -294,7 +295,7 @@ out: free(copy); } -static void add_scsi_setting_from_entry(struct udev_entry_node *entry, +static void add_scsi_setting_from_entry(struct util_udev_entry_node *entry, struct zfcp_lun_node *node) { char *copy, *s, *e; @@ -336,9 +337,9 @@ static exit_code_t udev_read_zfcp_lun_ru struct util_list *list) { exit_code_t rc; - struct udev_file *file = NULL; - struct udev_line_node *line; - struct udev_entry_node *entry; + struct util_udev_file *file = NULL; + struct util_udev_line_node *line; + struct util_udev_entry_node *entry; struct zfcp_lun_node *node = NULL; enum { none, @@ -347,7 +348,7 @@ static exit_code_t udev_read_zfcp_lun_ru } state = none; bool empty_rule = true; - rc = udev_read_file(filename, &file); + rc = (exit_code_t) util_udev_read_file(filename, &file); if (rc) goto out; @@ -398,7 +399,7 @@ static exit_code_t udev_read_zfcp_lun_ru sort_zfcp_lun_list(list); out: - udev_free_file(file); + util_udev_free_file(file); if (empty_rule) warn_once("Warning: Invalid udev rule: %s\n", filename);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor