ref-filter: drop sprintf and strcpy calls
[gitweb.git] / notes.c
diff --git a/notes.c b/notes.c
index baa1c4152d19c374a1b3bae908fb4069e2797198..eacd2a61daf9b4133e81a936340abc63c1078a48 100644 (file)
--- a/notes.c
+++ b/notes.c
@@ -362,13 +362,14 @@ static int non_note_cmp(const struct non_note *a, const struct non_note *b)
        return strcmp(a->path, b->path);
 }
 
-static void add_non_note(struct notes_tree *t, const char *path,
+/* note: takes ownership of path string */
+static void add_non_note(struct notes_tree *t, char *path,
                unsigned int mode, const unsigned char *sha1)
 {
        struct non_note *p = t->prev_non_note, *n;
        n = (struct non_note *) xmalloc(sizeof(struct non_note));
        n->next = NULL;
-       n->path = xstrdup(path);
+       n->path = path;
        n->mode = mode;
        hashcpy(n->sha1, sha1);
        t->prev_non_note = n;
@@ -482,17 +483,17 @@ static void load_subtree(struct notes_tree *t, struct leaf_node *subtree,
                 * component.
                 */
                {
-                       char non_note_path[PATH_MAX];
-                       char *p = non_note_path;
+                       struct strbuf non_note_path = STRBUF_INIT;
                        const char *q = sha1_to_hex(subtree->key_sha1);
                        int i;
                        for (i = 0; i < prefix_len; i++) {
-                               *p++ = *q++;
-                               *p++ = *q++;
-                               *p++ = '/';
+                               strbuf_addch(&non_note_path, *q++);
+                               strbuf_addch(&non_note_path, *q++);
+                               strbuf_addch(&non_note_path, '/');
                        }
-                       strcpy(p, entry.path);
-                       add_non_note(t, non_note_path, entry.mode, entry.sha1);
+                       strbuf_addstr(&non_note_path, entry.path);
+                       add_non_note(t, strbuf_detach(&non_note_path, NULL),
+                                    entry.mode, entry.sha1);
                }
        }
        free(buf);
@@ -918,7 +919,7 @@ int combine_notes_cat_sort_uniq(unsigned char *cur_sha1,
        return ret;
 }
 
-static int string_list_add_one_ref(const char *refname, const unsigned char *sha1,
+static int string_list_add_one_ref(const char *refname, const struct object_id *oid,
                                   int flag, void *cb)
 {
        struct string_list *refs = cb;
@@ -932,12 +933,9 @@ static int string_list_add_one_ref(const char *refname, const unsigned char *sha
  */
 void string_list_add_refs_by_glob(struct string_list *list, const char *glob)
 {
-       struct each_ref_fn_sha1_adapter wrapped_string_list_add_one_ref =
-               {string_list_add_one_ref, list};
-
        assert(list->strdup_strings);
        if (has_glob_specials(glob)) {
-               for_each_glob_ref(each_ref_fn_adapter, glob, &wrapped_string_list_add_one_ref);
+               for_each_glob_ref(string_list_add_one_ref, glob, list);
        } else {
                unsigned char sha1[20];
                if (get_sha1(glob, sha1))