All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Achu Luma <ach.lumap@gmail.com>
Cc: git@vger.kernel.org,  christian.couder@gmail.com,
	 Christian Couder <chriscool@tuxfamily.org>
Subject: Re: [Outreachy][PATCH 1/2] strbuf: introduce strbuf_addstrings() to repeatedly add a string
Date: Mon, 26 Feb 2024 08:39:25 -0800	[thread overview]
Message-ID: <xmqqil2bdvsy.fsf@gitster.g> (raw)
In-Reply-To: <20240226143350.3596-1-ach.lumap@gmail.com> (Achu Luma's message of "Mon, 26 Feb 2024 15:33:49 +0100")

Achu Luma <ach.lumap@gmail.com> writes:

> In a following commit we are going to port code from
> "t/helper/test-sha256.c", t/helper/test-hash.c and "t/t0015-hash.sh" to
> a new "t/unit-tests/t-hash.c" file using the recently added unit test
> framework.
>
> To port code like: perl -e "$| = 1; print q{aaaaaaaaaa} for 1..100000;"
> we are going to need a new strbuf_addstrings() function that repeatedly
> adds the same string a number of times to a buffer.

We do not need to call such a function "addstrings", though.  The
name on the subject line made me expect a varargs function:

 (bad)	strbuf_addstrings(&sb, "foo", "bar", "baz", NULL);

It would have been clearer if the name hinted what it does, clearer
than just a single "s" that says it is talking about plural.  What
would be a good name that hints "n times add a single same string"?
I dunno.

I also would have expected that the order of parameters are
repeat-count followed by what gets repeated.

Having said all of the above, we already have "addchars" that is
equally strange, so let's let it pass ;-).

> diff --git a/strbuf.c b/strbuf.c
> index 7827178d8e..eb2b3299ce 100644
> --- a/strbuf.c
> +++ b/strbuf.c
> @@ -302,6 +302,17 @@ void strbuf_add(struct strbuf *sb, const void *data, size_t len)
>  	strbuf_setlen(sb, sb->len + len);
>  }
>
> +void strbuf_addstrings(struct strbuf *sb, const char *s, size_t n)
> +{
> +	size_t len = strlen(s);

Let's have a blank line here to separate decls from the first
statement.

> +	if (unsigned_mult_overflows(len, n))
> +		die("you want to use way too much memory");
> +	strbuf_grow(sb, len * n);

The error message given by

	strbuf_grow(sb, st_mult(len, n));

would be equally informative and takes only a single line.

> +	for (size_t i = 0; i < n; i++)
> +		memcpy(sb->buf + sb->len + len * i, s, len);

Wouldn't it be sufficient to run strbuf_add() n times at this point,
as we have already called strbuf_grow() to avoid repeated
reallocation?  Repeated manual memcpy() that involves manual offset
computation makes me nervous.

> +	strbuf_setlen(sb, sb->len + len * n);
> +}
> +
>  void strbuf_addbuf(struct strbuf *sb, const struct strbuf *sb2)
>  {
>  	strbuf_grow(sb, sb2->len);
> diff --git a/strbuf.h b/strbuf.h
> index e959caca87..0fb1b5e81e 100644
> --- a/strbuf.h
> +++ b/strbuf.h
> @@ -310,6 +310,11 @@ static inline void strbuf_addstr(struct strbuf *sb, const char *s)
>  	strbuf_add(sb, s, strlen(s));
>  }
>
> +/**
> + * Add a NUL-terminated string the specified number of times to the buffer.
> + */
> +void strbuf_addstrings(struct strbuf *sb, const char *s, size_t n);
> +
>  /**
>   * Copy the contents of another buffer at the end of the current one.
>   */
> --
> 2.43.0.windows.1

  parent reply	other threads:[~2024-02-26 16:39 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-26 14:33 [Outreachy][PATCH 1/2] strbuf: introduce strbuf_addstrings() to repeatedly add a string Achu Luma
2024-02-26 14:33 ` [Outreachy][PATCH 2/2] Port helper/test-sha256.c and helper/test-sha1.c to unit-tests/t-hash.c Achu Luma
2024-02-26 16:39 ` Junio C Hamano [this message]
2024-02-26 17:15   ` [Outreachy][PATCH 1/2] strbuf: introduce strbuf_addstrings() to repeatedly add a string Christian Couder
2024-02-26 18:10     ` Junio C Hamano
2024-02-27 10:07       ` Christian Couder
2024-02-29  5:40 ` [Outreachy][PATCH v2 " Achu Luma
2024-02-29  5:40   ` [Outreachy][PATCH v2 2/2] Port helper/test-sha256.c and helper/test-sha1.c to unit-tests/t-hash.c Achu Luma
2024-03-06 14:25     ` Christian Couder
2024-03-26 11:39     ` Patrick Steinhardt
2024-03-26 11:51       ` Christian Couder
2024-05-16 19:30     ` Ghanshyam Thakkar
2024-05-23 23:59   ` [PATCH v3 0/3] Port t0015-hash to the unit testing framework Ghanshyam Thakkar
2024-05-23 23:59     ` [PATCH v3 1/3] strbuf: introduce strbuf_addstrings() to repeatedly add a string Ghanshyam Thakkar
2024-05-23 23:59     ` [PATCH v3 2/3] t/: port helper/test-sha1.c to unit-tests/t-hash.c Ghanshyam Thakkar
2024-05-24 13:30       ` Patrick Steinhardt
2024-05-24 14:08         ` Christian Couder
2024-05-24 15:49           ` Junio C Hamano
2024-06-15 20:14             ` Ghanshyam Thakkar
2024-06-16  4:52               ` Jeff King
2024-06-17 17:44                 ` Junio C Hamano
2024-06-21 18:37                 ` Ghanshyam Thakkar
2024-05-23 23:59     ` [PATCH v3 3/3] t/: port helper/test-sha256.c " Ghanshyam Thakkar
2024-05-24 13:30       ` Patrick Steinhardt
2024-05-25  1:15         ` Ghanshyam Thakkar
2024-05-26  8:43     ` [PATCH v4 0/2] t/: port helper/test-{sha1, sha256} to unit-tests/t-hash Ghanshyam Thakkar
2024-05-26  8:43       ` [PATCH v4 1/2] strbuf: introduce strbuf_addstrings() to repeatedly add a string Ghanshyam Thakkar
2024-05-26  8:43       ` [PATCH v4 2/2] t/: migrate helper/test-{sha1, sha256} to unit-tests/t-hash Ghanshyam Thakkar
2024-05-29  6:26         ` Patrick Steinhardt
2024-05-29 14:54           ` Junio C Hamano
2024-05-29  8:00       ` [GSoC][PATCH v5 0/2] " Ghanshyam Thakkar
2024-05-29  8:00         ` [PATCH v5 1/2] strbuf: introduce strbuf_addstrings() to repeatedly add a string Ghanshyam Thakkar
2024-05-29  8:00         ` [PATCH v5 2/2] t/: migrate helper/test-{sha1, sha256} to unit-tests/t-hash Ghanshyam Thakkar
2024-05-29  9:19         ` [GSoC][PATCH v5 0/2] " Patrick Steinhardt
2024-05-29 16:09           ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqqil2bdvsy.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=ach.lumap@gmail.com \
    --cc=chriscool@tuxfamily.org \
    --cc=christian.couder@gmail.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.