Re: [PATCH 1/4] version: refactor strbuf_sanitize()
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jul 31, 2024, 17:18 UTC
- Message-ID
- <xmqqzfpx5vk5.fsf@gitster.g>
- In-Reply-To
- <20240731134014.2299361-2-christian.couder@gmail.com>
Christian Couder <christian.couder@gmail.com> writes:
Show 17 quoted lines
> diff --git a/strbuf.c b/strbuf.c
> index 3d2189a7f6..cccfdec0e3 100644
> --- a/strbuf.c
> +++ b/strbuf.c
> @@ -1082,3 +1082,12 @@ void strbuf_strip_file_from_path(struct strbuf *sb)
> char *path_sep = find_last_dir_sep(sb->buf);
> strbuf_setlen(sb, path_sep ? path_sep - sb->buf + 1 : 0);
> }
> +
> +void strbuf_sanitize(struct strbuf *sb)
> +{
> + strbuf_trim(sb);
> + for (size_t i = 0; i < sb->len; i++) {
> + if (sb->buf[i] <= 32 || sb->buf[i] >= 127)
> + sb->buf[i] = '.';
> + }
> +}This looked a bit _too_ specific for the use of the transport layer (which raises the question if it should even live in strbuf.[ch]). It also made me wonder if different callers likely want to have different variants (e.g., do not trim, only trim at the tail, squash a run of unprintables into a single '.', use '?' instead of '.', etc., etc.).
It turns out that there is only *one* existing caller that gets replaced with this "common" version, which made it a Meh to me.
Let's hope that there will be many new callers to make this step worthwhile.
Show 25 quoted lines
> __attribute__((format (printf,1,2)))
> int printf_ln(const char *fmt, ...);
> __attribute__((format (printf,2,3)))
> diff --git a/version.c b/version.c
> index 41b718c29e..951e6dca74 100644
> --- a/version.c
> +++ b/version.c
> @@ -24,15 +24,10 @@ const char *git_user_agent_sanitized(void)
>
> if (!agent) {
> struct strbuf buf = STRBUF_INIT;
> - int i;
>
> strbuf_addstr(&buf, git_user_agent());
> - strbuf_trim(&buf);
> - for (i = 0; i < buf.len; i++) {
> - if (buf.buf[i] <= 32 || buf.buf[i] >= 127)
> - buf.buf[i] = '.';
> - }
> - agent = buf.buf;
> + strbuf_sanitize(&buf);
> + agent = strbuf_detach(&buf, NULL);
> }
>
> return agent;