Messages in this thread | | | Subject | Re: [RFC/PATCH 1/8] lib: string: Introduce strreplace | From | Joe Perches <> | Date | Thu, 04 Jun 2015 03:56:07 -0700 |
| |
On Thu, 2015-06-04 at 11:37 +0200, Rasmus Villemoes wrote: > Strings are sometimes sanitized by replacing a certain character > (often '/') by another (often '!'). In a few places, this is done the > same way Schlemiel the Painter would do it.
:)
> Others are slightly > smarter but still do multiple strchr() calls. Introduce strreplace() > to do this using a single function call and a single pass over the > string. > > One would expect the return value to be one of three things: void, s, > or the number of replacements made. I chose the fourth, returning a > pointer to the end of the string. This is more likely to be useful > (for example allowing the caller to avoid a strlen call).
You used in one of the follow-on patches too.
> diff --git a/lib/string.c b/lib/string.c [] > @@ -849,3 +849,20 @@ void *memchr_inv(const void *start, int c, size_t bytes) > return check_bytes8(start, value, bytes % 8); > } > EXPORT_SYMBOL(memchr_inv); > + > +/** > + * strreplace - Replace all occurences of character in string
occurrences
> + * @s: The string to operate on > + * @bad: The character being replaced > + * @good: The character @bad is replaced with. > + * > + * Returns pointer to the nul byte at the end of @s. > + */ > +char *strreplace(char *s, char bad, char good) > +{ > + for (; *s; ++s) > + if (*s == bad) > + *s = good; > + return s; > +} > +EXPORT_SYMBOL(strreplace);
Seems sensible, but the name maybe could be be more explicit as strreplace seems like it should more like a string substitution rather than a char substitution.
Maybe strsubstchr or something like it (strtranschr?)
Because it's so tiny, perhaps this could be inline instead of EXPORT_SYMBOL.
Maybe from and to instead of good and bad arguments.
| |