Re: search.c clean-up

Elliott Hughes <enh@xxxxxxxxxxx> wrote:
>> The problem with the 4-parameter approach
>> static void
>> wrap_pattern (char *pattern, size_t *pattern_len,
>> char const *prefix, char const *suffix)
>> {
>> ...
>> }
>> is that it works fine when we don't have to free the PATTERN,
>> but if anyone ever calls it with a malloc'd PATTERN, it will leak.
> return char*, and -- at the risk of more nitpickery -- expect the user
> to call strlen if they need to know how long the pattern is?

I disagree.
A factorization change should avoid changing semantics.
If you want to declare that patterns do not contain NUL bytes
and adjust all of the corresponding interfaces, then belongs
in a separate change.

With that in mind, you might even argue that my change
should have preserved the pattern's unused trailing NUL byte.

> "static char* wrap_pattern(const char* pattern, const char* prefix,
> const char* suffix)" seems reasonable to me.
> or rename search.c as search.cpp and use std::string. all this
> pretending a char* is a string is *so* 1970s. (see also the comment
> starting "The PCRE interface doesn't allow NUL bytes in the pattern..."
> in the same file.)

Being limited by C is indeed frustrating.