summaryrefslogtreecommitdiff
path: root/revision.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2016-03-16 17:41:43 (GMT)
committerJunio C Hamano <gitster@pobox.com>2016-03-16 17:41:43 (GMT)
commit253ce7a15c251057464b130016c74cbe10fe9e57 (patch)
treea9a5b9cef3509f2d2dd4a60c8eb3f9e3819a3a56 /revision.c
parent24358560c3c0ab51c9ef8178d99f46711716f6c0 (diff)
parent2824e1841b99393d2469c495253d547c643bd8f1 (diff)
downloadgit-253ce7a15c251057464b130016c74cbe10fe9e57.zip
git-253ce7a15c251057464b130016c74cbe10fe9e57.tar.gz
git-253ce7a15c251057464b130016c74cbe10fe9e57.tar.bz2
Merge branch 'jk/path-name-safety-2.4' into jk/path-name-safety-2.5
* jk/path-name-safety-2.4: list-objects: pass full pathname to callbacks list-objects: drop name_path entirely list-objects: convert name_path to a strbuf show_object_with_name: simplify by using path_name() http-push: stop using name_path tree-diff: catch integer overflow in combine_diff_path allocation add helpers for detecting size_t overflow
Diffstat (limited to 'revision.c')
-rw-r--r--revision.c64
1 files changed, 4 insertions, 60 deletions
diff --git a/revision.c b/revision.c
index 9b9d77d..8f30ab1 100644
--- a/revision.c
+++ b/revision.c
@@ -21,69 +21,13 @@
volatile show_early_output_fn_t show_early_output;
-char *path_name(const struct name_path *path, const char *name)
-{
- const struct name_path *p;
- char *n, *m;
- int nlen = strlen(name);
- int len = nlen + 1;
-
- for (p = path; p; p = p->up) {
- if (p->elem_len)
- len += p->elem_len + 1;
- }
- n = xmalloc(len);
- m = n + len - (nlen + 1);
- strcpy(m, name);
- for (p = path; p; p = p->up) {
- if (p->elem_len) {
- m -= p->elem_len + 1;
- memcpy(m, p->elem, p->elem_len);
- m[p->elem_len] = '/';
- }
- }
- return n;
-}
-
-static int show_path_component_truncated(FILE *out, const char *name, int len)
-{
- int cnt;
- for (cnt = 0; cnt < len; cnt++) {
- int ch = name[cnt];
- if (!ch || ch == '\n')
- return -1;
- fputc(ch, out);
- }
- return len;
-}
-
-static int show_path_truncated(FILE *out, const struct name_path *path)
-{
- int emitted, ours;
-
- if (!path)
- return 0;
- emitted = show_path_truncated(out, path->up);
- if (emitted < 0)
- return emitted;
- if (emitted)
- fputc('/', out);
- ours = show_path_component_truncated(out, path->elem, path->elem_len);
- if (ours < 0)
- return ours;
- return ours || emitted;
-}
-
-void show_object_with_name(FILE *out, struct object *obj,
- const struct name_path *path, const char *component)
+void show_object_with_name(FILE *out, struct object *obj, const char *name)
{
- struct name_path leaf;
- leaf.up = (struct name_path *)path;
- leaf.elem = component;
- leaf.elem_len = strlen(component);
+ const char *p;
fprintf(out, "%s ", sha1_to_hex(obj->sha1));
- show_path_truncated(out, &leaf);
+ for (p = name; *p && *p != '\n'; p++)
+ fputc(*p, out);
fputc('\n', out);
}