@matheusbsbs / matheus-bagliano / commits / 737922aa64
Fork 0

alloc_ref_from_str(): factor out a common pattern of alloc_ref from string

Also fix an underallocation in walker.c::interpret_target(). Signed-off-by: Krzysztof Kowalczyk <kkowalczyk@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Krzysztof Kowalczyk committed May 10, 2008 at 16:26 UTC 737922aa648c43bc6a61170bee5bfd46ff953f32
6 files changed +19 -27
builtin-fetch.c
+2 -4
@@ -508,10 +508,8 @@ static void find_non_local_tags(struct transport *transport,
508 will_fetch(head, ref->old_sha1))) {
509 path_list_insert(ref_name, &new_refs);
510
511 - rm = alloc_ref(strlen(ref_name) + 1);
512 - strcpy(rm->name, ref_name);
513 - rm->peer_ref = alloc_ref(strlen(ref_name) + 1);
514 - strcpy(rm->peer_ref->name, ref_name);
511 + rm = alloc_ref_from_str(ref_name);
512 + rm->peer_ref = alloc_ref_from_str(ref_name);
513 hashcpy(rm->old_sha1, ref_sha1);
514
515 **tail = rm;
http-push.c
+2 -4
@@ -1761,8 +1761,7 @@ static void one_remote_ref(char *refname)
1761 struct ref *ref;
1762 struct object *obj;
1763
1764 - ref = alloc_ref(strlen(refname) + 1);
1765 - strcpy(ref->name, refname);
1764 + ref = alloc_ref_from_str(refname);
1765
1766 if (http_fetch_ref(remote->url, ref) != 0) {
1767 fprintf(stderr,
@@ -1894,8 +1893,7 @@ static void add_remote_info_ref(struct remote_ls_ctx *ls)
1893 char *ref_info;
1894 struct ref *ref;
1895
1897 - ref = alloc_ref(strlen(ls->dentry_name) + 1);
1898 - strcpy(ref->name, ls->dentry_name);
1896 + ref = alloc_ref_from_str(ls->dentry_name);
1897
1898 if (http_fetch_ref(remote->url, ref) != 0) {
1899 fprintf(stderr,
remote.c
+10 -13
@@ -691,6 +691,13 @@ struct ref *alloc_ref(unsigned namelen)
691 return ret;
692 }
693
694 +struct ref *alloc_ref_from_str(const char* str)
695 +{
696 + struct ref *ret = alloc_ref(strlen(str) + 1);
697 + strcpy(ret->name, str);
698 + return ret;
699 +}
700 +
701 static struct ref *copy_ref(const struct ref *ref)
702 {
703 struct ref *ret = xmalloc(sizeof(struct ref) + strlen(ref->name) + 1);
@@ -797,7 +804,6 @@ static struct ref *try_explicit_object_name(const char *name)
804 {
805 unsigned char sha1[20];
806 struct ref *ref;
800 - int len;
807
808 if (!*name) {
809 ref = alloc_ref(20);
@@ -807,21 +813,14 @@ static struct ref *try_explicit_object_name(const char *name)
813 }
814 if (get_sha1(name, sha1))
815 return NULL;
810 - len = strlen(name) + 1;
811 - ref = alloc_ref(len);
812 - memcpy(ref->name, name, len);
816 + ref = alloc_ref_from_str(name);
817 hashcpy(ref->new_sha1, sha1);
818 return ref;
819 }
820
821 static struct ref *make_linked_ref(const char *name, struct ref ***tail)
822 {
819 - struct ref *ret;
820 - size_t len;
821 -
822 - len = strlen(name) + 1;
823 - ret = alloc_ref(len);
824 - memcpy(ret->name, name, len);
823 + struct ref *ret = alloc_ref_from_str(name);
824 tail_link_ref(ret, tail);
825 return ret;
826 }
@@ -1125,9 +1124,7 @@ static struct ref *get_local_ref(const char *name)
1124 return NULL;
1125
1126 if (!prefixcmp(name, "refs/")) {
1128 - ret = alloc_ref(strlen(name) + 1);
1129 - strcpy(ret->name, name);
1130 - return ret;
1127 + return alloc_ref_from_str(name);
1128 }
1129
1130 if (!prefixcmp(name, "heads/") ||
remote.h
+2
@@ -54,6 +54,8 @@ struct refspec {
54
55 struct ref *alloc_ref(unsigned namelen);
56
57 +struct ref *alloc_ref_from_str(const char* str);
58 +
59 struct ref *copy_ref_list(const struct ref *ref);
60
61 int check_ref_type(const struct ref *ref, int flags);
transport.c
+2 -4
@@ -504,8 +504,7 @@ static struct ref *get_refs_via_curl(struct transport *transport)
504
505 strbuf_release(&buffer);
506
507 - ref = alloc_ref(strlen("HEAD") + 1);
508 - strcpy(ref->name, "HEAD");
507 + ref = alloc_ref_from_str("HEAD");
508 if (!walker->fetch_ref(walker, ref) &&
509 !resolve_remote_symref(ref, refs)) {
510 ref->next = refs;
@@ -546,9 +545,8 @@ static struct ref *get_refs_from_bundle(struct transport *transport)
545 die ("Could not read bundle '%s'.", transport->url);
546 for (i = 0; i < data->header.references.nr; i++) {
547 struct ref_list_entry *e = data->header.references.list + i;
549 - struct ref *ref = alloc_ref(strlen(e->name) + 1);
548 + struct ref *ref = alloc_ref_from_str(e->name);
549 hashcpy(ref->old_sha1, e->sha1);
551 - strcpy(ref->name, e->name);
550 ref->next = result;
551 result = ref;
552 }
walker.c
+1 -2
@@ -190,8 +190,7 @@ static int interpret_target(struct walker *walker, char *target, unsigned char *
190 if (!get_sha1_hex(target, sha1))
191 return 0;
192 if (!check_ref_format(target)) {
193 - struct ref *ref = alloc_ref(strlen(target));
194 - strcpy(ref->name, target);
193 + struct ref *ref = alloc_ref_from_str(target);
194 if (!walker->fetch_ref(walker, ref)) {
195 hashcpy(sha1, ref->old_sha1);
196 free(ref);