From: "John Cai via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: John Cai <johncai86@gmail.com>, John Cai <johncai86@gmail.com>
Subject: [PATCH 1/2] strvec.c: add a strvec_split_delim()
Date: Wed, 19 Jan 2022 17:58:41 +0000 [thread overview]
Message-ID: <ea7408c36e515440771851c3581d7a9e3c6e4c8f.1642615122.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1191.git.git.1642615122.gitgitgadget@gmail.com>
From: John Cai <johncai86@gmail.com>
This is just string_list_split() copy/pasted with the "push" part
adjusted. The next commit will call this function to parse a line of
command arguments.
Helped-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: John Cai <johncai86@gmail.com>
---
strvec.c | 23 +++++++++++++++++++++++
strvec.h | 8 ++++++++
2 files changed, 31 insertions(+)
diff --git a/strvec.c b/strvec.c
index 61a76ce6cb9..7dca04bf7a5 100644
--- a/strvec.c
+++ b/strvec.c
@@ -85,6 +85,29 @@ void strvec_split(struct strvec *array, const char *to_split)
}
}
+size_t strvec_split_delim(struct strvec *array, const char *string,
+ int delim, int maxsplit)
+{
+ size_t count = 0;
+ const char *p = string, *end;
+
+ for (;;) {
+ count++;
+ if (maxsplit >= 0 && count > maxsplit) {
+ strvec_push(array, p);
+ return count;
+ }
+ end = strchr(p, delim);
+ if (end) {
+ strvec_push_nodup(array, xmemdupz(p, end - p));
+ p = end + 1;
+ } else {
+ strvec_push(array, p);
+ return count;
+ }
+ }
+}
+
void strvec_clear(struct strvec *array)
{
if (array->v != empty_strvec) {
diff --git a/strvec.h b/strvec.h
index 9f55c8766ba..c474918b91a 100644
--- a/strvec.h
+++ b/strvec.h
@@ -73,6 +73,14 @@ void strvec_pop(struct strvec *);
/* Splits by whitespace; does not handle quoted arguments! */
void strvec_split(struct strvec *, const char *);
+/**
+ * strvec_split_delim() is a split function that behaves more like its
+ * string_list_split() cousin than the whitespace-splitting
+ * strvec_split().
+ */
+size_t strvec_split_delim(struct strvec *array, const char *string,
+ int delim, int maxsplit);
+
/**
* Free all memory associated with the array and return it to the
* initial, empty state.
--
gitgitgadget
next prev parent reply other threads:[~2022-01-19 17:58 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-19 17:58 [PATCH 0/2] cat-file: add a --stdin-cmd mode John Cai via GitGitGadget
2022-01-19 17:58 ` John Cai via GitGitGadget [this message]
2022-01-19 17:58 ` [PATCH 2/2] " John Cai via GitGitGadget
2022-01-19 19:38 ` [PATCH 0/2] " Taylor Blau
2022-01-21 17:46 ` John Cai
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=ea7408c36e515440771851c3581d7a9e3c6e4c8f.1642615122.git.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=johncai86@gmail.com \
/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.