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);