From: Derrick Stolee <derrickstolee@xxxxxxxxxx> The strbuf_parent_directory() method was added as a static method in contrib/scalar by d0feac4e8c0 (scalar: 'register' sets recommended config and starts maintenance, 2021-12-03) and then removed in 65f6a9eb0b9 (scalar: constrain enlistment search, 2022-08-18), but now there is a need for a similar method in the bundle URI feature. Re-add the method, this time in strbuf.c, but with a new name: strbuf_strip_file_from_path(). The method requirements are slightly modified to allow a trailing slash, in which case nothing is done, which makes the name change valuable. The return value is the number of bytes removed. Signed-off-by: Derrick Stolee <derrickstolee@xxxxxxxxxx> --- strbuf.c | 9 +++++++++ strbuf.h | 12 ++++++++++++ 2 files changed, 21 insertions(+) diff --git a/strbuf.c b/strbuf.c index 0890b1405c5..8d1e2e8bb61 100644 --- a/strbuf.c +++ b/strbuf.c @@ -1200,3 +1200,12 @@ int strbuf_edit_interactively(struct strbuf *buffer, const char *path, free(path2); return res; } + +size_t strbuf_strip_file_from_path(struct strbuf *buf) +{ + size_t len = buf->len; + size_t offset = offset_1st_component(buf->buf); + char *path_sep = find_last_dir_sep(buf->buf + offset); + strbuf_setlen(buf, path_sep ? path_sep - buf->buf + 1 : offset); + return len - buf->len; +} diff --git a/strbuf.h b/strbuf.h index 76965a17d44..4822b713786 100644 --- a/strbuf.h +++ b/strbuf.h @@ -664,6 +664,18 @@ int launch_sequence_editor(const char *path, struct strbuf *buffer, int strbuf_edit_interactively(struct strbuf *buffer, const char *path, const char *const *env); +/* + * Remove the filename from the provided path string. If the path + * contains a trailing separator, then the path is considered a directory + * and nothing is modified. Returns the number of characters removed from + * the path. + * + * Examples: + * - "/path/to/file" -> "/path/to/" (returns: 4) + * - "/path/to/dir/" -> "/path/to/dir/" (returns: 0) + */ +size_t strbuf_strip_file_from_path(struct strbuf *buf); + void strbuf_add_lines(struct strbuf *sb, const char *prefix, const char *buf, -- gitgitgadget