aboutsummaryrefslogtreecommitdiff
path: root/object.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2007-04-21 17:41:40 -0700
committerJunio C Hamano <junkio@cox.net>2007-04-21 17:42:02 -0700
commit42c4b58059fa9af65e90f2c418bb551e30d1d32f (patch)
treec6aa1b75909009b249ceb768717c27011b73adb4 /object.c
parent520635fa3a7781cce412f6b02e165b5d897a99d1 (diff)
parent100c5f3b0b27ec6617de1a785c4ff481e92636c1 (diff)
downloadgit-42c4b58059fa9af65e90f2c418bb551e30d1d32f.tar.xz
Merge branch 'lt/objalloc'
* 'lt/objalloc': Clean up object creation to use more common code Use proper object allocators for unknown object nodes too
Diffstat (limited to 'object.c')
-rw-r--r--object.c23
1 files changed, 7 insertions, 16 deletions
diff --git a/object.c b/object.c
index 78a44a6ef4..7bd3fec556 100644
--- a/object.c
+++ b/object.c
@@ -105,11 +105,13 @@ static void grow_object_hash(void)
obj_hash_size = new_hash_size;
}
-void created_object(const unsigned char *sha1, struct object *obj)
+void *create_object(const unsigned char *sha1, int type, void *o)
{
+ struct object *obj = o;
+
obj->parsed = 0;
obj->used = 0;
- obj->type = OBJ_NONE;
+ obj->type = type;
obj->flags = 0;
hashcpy(obj->sha1, sha1);
@@ -118,25 +120,14 @@ void created_object(const unsigned char *sha1, struct object *obj)
insert_obj_hash(obj, obj_hash, obj_hash_size);
nr_objs++;
+ return obj;
}
-union any_object {
- struct object object;
- struct commit commit;
- struct tree tree;
- struct blob blob;
- struct tag tag;
-};
-
struct object *lookup_unknown_object(const unsigned char *sha1)
{
struct object *obj = lookup_object(sha1);
- if (!obj) {
- union any_object *ret = xcalloc(1, sizeof(*ret));
- created_object(sha1, &ret->object);
- ret->object.type = OBJ_NONE;
- return &ret->object;
- }
+ if (!obj)
+ obj = create_object(sha1, OBJ_NONE, alloc_object_node());
return obj;
}