strbuf: introduce strbuf_strip_file_from_path()
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. Signed-off-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Derrick Stolee committed
Dec 22, 2022 at 15:14 UTC
9ea57964953dec11dcbbd5d4bf44a5e3781f5880
2 files changed
+17
strbuf.c
+6
@@ -1200,3 +1200,9 @@ int strbuf_edit_interactively(struct strbuf *buffer, const char *path,
1200
free(path2);
1201
return res;
1202
}
1203
+
1204
+void strbuf_strip_file_from_path(struct strbuf *sb)
1205
+{
1206
+ char *path_sep = find_last_dir_sep(sb->buf);
1207
+ strbuf_setlen(sb, path_sep ? path_sep - sb->buf + 1 : 0);
1208
+}
strbuf.h
+11
@@ -664,6 +664,17 @@ int launch_sequence_editor(const char *path, struct strbuf *buffer,
664
int strbuf_edit_interactively(struct strbuf *buffer, const char *path,
665
const char *const *env);
666
667
+/*
668
+ * Remove the filename from the provided path string. If the path
669
+ * contains a trailing separator, then the path is considered a directory
670
+ * and nothing is modified.
671
+ *
672
+ * Examples:
673
+ * - "/path/to/file" -> "/path/to/"
674
+ * - "/path/to/dir/" -> "/path/to/dir/"
675
+ */
676
+void strbuf_strip_file_from_path(struct strbuf *sb);
677
+
678
void strbuf_add_lines(struct strbuf *sb,
679
const char *prefix,
680
const char *buf,