Re: [PATCH] usdt; perform __ to - conversion for usdt and prov notes
Kris Van Hees <[email protected]>
| Newsgroups | dev.linux.lists.dtrace |
|---|---|
| Message-ID | <[email protected]> |
Nevermind - patch withdrawn On Fri, Oct 10, 2025 at 11:35:30PM -0400, Kris Van Hees wrote: > The __ to - conversion was only done for usdt notes. It needs to be > done for both usdt and prov notes because they both contain probe > names that may need converting. > > Reported-by: Ruud van der Pas <[email protected]> > Signed-off-by: Kris Van Hees <[email protected]> > --- > libcommon/usdt_parser_notes.c | 40 +++++++++++++++++++++-------------- > 1 file changed, 24 insertions(+), 16 deletions(-) > > diff --git a/libcommon/usdt_parser_notes.c b/libcommon/usdt_parser_notes.c > index c98c9fb0..a8b46e65 100644 > --- a/libcommon/usdt_parser_notes.c > +++ b/libcommon/usdt_parser_notes.c > @@ -293,6 +293,27 @@ strarray_size(uint8_t cnt, const char *str, const char *end, size_t skip) > return p - str; > } > > +/* > + * If the probe name has encoded hyphens, perform in-place changing from "__" > + * into "-". > + */ > +static void > +fix_probe_name(const char *prb, const char *end) > +{ > + if (strstr(prb, "__") != NULL) { > + char *q; > + const char *s = prb; > + > + for (q = (char *)s; s < end; s++, q++) { > + if (s[0] == '_' && s[1] == '_') { > + *q = '-'; > + s++; > + } else if (s > q) > + *q = *s; > + } > + } > +} > + > static int > parse_prov_note(int out, dof_helper_t *dhp, usdt_data_t *data, > usdt_note_t *note) > @@ -353,6 +374,8 @@ parse_prov_note(int out, dof_helper_t *dhp, usdt_data_t *data, > return -1; > } > > + fix_probe_name(prbt.prb, p); > + > if ((prp = dt_htab_lookup(pvp->pmap, &prbt)) == NULL) { > if ((prp = malloc(sizeof(dt_probe_t))) == NULL) { > usdt_error(out, ENOMEM, "Failed to allocate probe"); > @@ -471,22 +494,7 @@ parse_usdt_note(int out, dof_helper_t *dhp, usdt_data_t *data, > } > prbt.off = off; > > - /* > - * If the probe name has encoded hyphens, perform in-place changing > - * from "__" into "-". > - */ > - if (strstr(prbt.prb, "__") != NULL) { > - char *q; > - const char *s = prbt.prb, *e = p; > - > - for (q = (char *)s; s < e; s++, q++) { > - if (s[0] == '_' && s[1] == '_') { > - *q = '-'; > - s++; > - } else if (s > q) > - *q = *s; > - } > - } > + fix_probe_name(prbt.prb, p); > > if ((prp = dt_htab_lookup(prbmap, &prbt)) == NULL) { > if ((prp = malloc(sizeof(dt_probe_t))) == NULL) { > -- > 2.43.5 >