From: Martin Wilck <mwilck@xxxxxxxx> This will allow us to remove the mutable width field from path_data. Signed-off-by: Martin Wilck <mwilck@xxxxxxxx> --- libmultipath/print.c | 64 ++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 26 deletions(-) diff --git a/libmultipath/print.c b/libmultipath/print.c index 4992cc8..37222bf 100644 --- a/libmultipath/print.c +++ b/libmultipath/print.c @@ -976,73 +976,70 @@ _get_multipath_layout (const struct _vector *gmvec, } } -static struct multipath_data * -mpd_lookup(char wildcard) +static int mpd_lookup(char wildcard) { int i; for (i = 0; mpd[i].header; i++) if (mpd[i].wildcard == wildcard) - return &mpd[i]; + return i; - return NULL; + return -1; } int snprint_multipath_attr(const struct gen_multipath* gm, struct strbuf *buf, char wildcard) { const struct multipath *mpp = gen_multipath_to_dm(gm); - struct multipath_data *mpd = mpd_lookup(wildcard); + int i = mpd_lookup(wildcard); - if (mpd == NULL) + if (i == -1) return 0; - return mpd->snprint(buf, mpp); + return mpd[i].snprint(buf, mpp); } -static struct path_data * -pd_lookup(char wildcard) +static int pd_lookup(char wildcard) { int i; for (i = 0; pd[i].header; i++) if (pd[i].wildcard == wildcard) - return &pd[i]; + return i; - return NULL; + return -1; } int snprint_path_attr(const struct gen_path* gp, struct strbuf *buf, char wildcard) { const struct path *pp = gen_path_to_dm(gp); - struct path_data *pd = pd_lookup(wildcard); + int i = pd_lookup(wildcard); - if (pd == NULL) + if (i == -1) return 0; - return pd->snprint(buf, pp); + return pd[i].snprint(buf, pp); } -static struct pathgroup_data * -pgd_lookup(char wildcard) +static int pgd_lookup(char wildcard) { int i; for (i = 0; pgd[i].header; i++) if (pgd[i].wildcard == wildcard) - return &pgd[i]; + return i; - return NULL; + return -1; } int snprint_pathgroup_attr(const struct gen_pathgroup* gpg, struct strbuf *buf, char wildcard) { const struct pathgroup *pg = gen_pathgroup_to_dm(gpg); - struct pathgroup_data *pdg = pgd_lookup(wildcard); + int i = pgd_lookup(wildcard); - if (pdg == NULL) + if (i == -1) return 0; - return pdg->snprint(buf, pg); + return pgd[i].snprint(buf, pg); } int snprint_multipath_header(struct strbuf *line, const char *format) @@ -1053,12 +1050,15 @@ int snprint_multipath_header(struct strbuf *line, const char *format) int rc; for (f = strchr(format, '%'); f; f = strchr(++format, '%')) { + int iwc; + if ((rc = __append_strbuf_str(line, format, f - format)) < 0) return rc; format = f + 1; - if (!(data = mpd_lookup(*format))) + if ((iwc = mpd_lookup(*format)) == -1) continue; /* unknown wildcard */ + data = &mpd[iwc]; if ((rc = append_strbuf_str(line, data->header)) < 0) return rc; @@ -1081,12 +1081,15 @@ int _snprint_multipath(const struct gen_multipath *gmp, int rc; for (f = strchr(format, '%'); f; f = strchr(++format, '%')) { + int iwc; + if ((rc = __append_strbuf_str(line, format, f - format)) < 0) return rc; format = f + 1; - if (!(data = mpd_lookup(*format))) + if ((iwc = mpd_lookup(*format)) == -1) continue; /* unknown wildcard */ + data = &mpd[iwc]; if ((rc = gmp->ops->snprint(gmp, line, *format)) < 0) return rc; @@ -1108,12 +1111,15 @@ int snprint_path_header(struct strbuf *line, const char *format) int rc; for (f = strchr(format, '%'); f; f = strchr(++format, '%')) { + int iwc; + if ((rc = __append_strbuf_str(line, format, f - format)) < 0) return rc; format = f + 1; - if (!(data = pd_lookup(*format))) + if ((iwc = pd_lookup(*format)) == -1) continue; /* unknown wildcard */ + data = &pd[iwc]; if ((rc = append_strbuf_str(line, data->header)) < 0) return rc; @@ -1136,12 +1142,15 @@ int _snprint_path(const struct gen_path *gp, struct strbuf *line, int rc; for (f = strchr(format, '%'); f; f = strchr(++format, '%')) { + int iwc; + if ((rc = __append_strbuf_str(line, format, f - format)) < 0) return rc; format = f + 1; - if (!(data = pd_lookup(*format))) + if ((iwc = pd_lookup(*format)) == -1) continue; /* unknown wildcard */ + data = &pd[iwc]; if ((rc = gp->ops->snprint(gp, line, *format)) < 0) return rc; @@ -1164,12 +1173,15 @@ int _snprint_pathgroup(const struct gen_pathgroup *ggp, struct strbuf *line, int rc; for (f = strchr(format, '%'); f; f = strchr(++format, '%')) { + int iwc; + if ((rc = __append_strbuf_str(line, format, f - format)) < 0) return rc; format = f + 1; - if (!(data = pgd_lookup(*format))) + if ((iwc = pgd_lookup(*format)) == -1) continue; /* unknown wildcard */ + data = &pgd[iwc]; if ((rc = ggp->ops->snprint(ggp, line, *format)) < 0) return rc; -- 2.33.1 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/dm-devel