From 100c5f3b0b27ec6617de1a785c4ff481e92636c1 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Mon, 16 Apr 2007 22:11:43 -0700 Subject: Clean up object creation to use more common code This replaces the fairly odd "created_object()" function that did _most_ of the object setup with a more complete "create_object()" function that also has a more natural calling convention. Signed-off-by: Linus Torvalds Signed-off-by: Junio C Hamano diff --git a/alloc.c b/alloc.c index 53eba37..216c23a 100644 --- a/alloc.c +++ b/alloc.c @@ -20,7 +20,7 @@ #define DEFINE_ALLOCATOR(name, type) \ static unsigned int name##_allocs; \ -struct name *alloc_##name##_node(void) \ +void *alloc_##name##_node(void) \ { \ static int nr; \ static type *block; \ diff --git a/blob.c b/blob.c index 0a9ea41..bd7d078 100644 --- a/blob.c +++ b/blob.c @@ -6,12 +6,8 @@ const char *blob_type = "blob"; struct blob *lookup_blob(const unsigned char *sha1) { struct object *obj = lookup_object(sha1); - if (!obj) { - struct blob *ret = alloc_blob_node(); - created_object(sha1, &ret->object); - ret->object.type = OBJ_BLOB; - return ret; - } + if (!obj) + return create_object(sha1, OBJ_BLOB, alloc_blob_node()); if (!obj->type) obj->type = OBJ_BLOB; if (obj->type != OBJ_BLOB) { diff --git a/cache.h b/cache.h index aa72791..4de25cc 100644 --- a/cache.h +++ b/cache.h @@ -476,15 +476,11 @@ int decode_85(char *dst, const char *line, int linelen); void encode_85(char *buf, const unsigned char *data, int bytes); /* alloc.c */ -struct blob; -struct tree; -struct commit; -struct tag; -extern struct blob *alloc_blob_node(void); -extern struct tree *alloc_tree_node(void); -extern struct commit *alloc_commit_node(void); -extern struct tag *alloc_tag_node(void); -extern struct object *alloc_object_node(void); +extern void *alloc_blob_node(void); +extern void *alloc_tree_node(void); +extern void *alloc_commit_node(void); +extern void *alloc_tag_node(void); +extern void *alloc_object_node(void); extern void alloc_report(void); /* trace.c */ diff --git a/commit.c b/commit.c index 952095f..10466c4 100644 --- a/commit.c +++ b/commit.c @@ -98,12 +98,8 @@ struct commit *lookup_commit_reference(const unsigned char *sha1) struct commit *lookup_commit(const unsigned char *sha1) { struct object *obj = lookup_object(sha1); - if (!obj) { - struct commit *ret = alloc_commit_node(); - created_object(sha1, &ret->object); - ret->object.type = OBJ_COMMIT; - return ret; - } + if (!obj) + return create_object(sha1, OBJ_COMMIT, alloc_commit_node()); if (!obj->type) obj->type = OBJ_COMMIT; return check_commit(obj, sha1, 0); diff --git a/object.c b/object.c index 153ebac..7bd3fec 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,16 +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; } struct object *lookup_unknown_object(const unsigned char *sha1) { struct object *obj = lookup_object(sha1); - if (!obj) { - obj = alloc_object_node(); - created_object(sha1, obj); - obj->type = OBJ_NONE; - } + if (!obj) + obj = create_object(sha1, OBJ_NONE, alloc_object_node()); return obj; } diff --git a/object.h b/object.h index bdbbc18..3e26a0e 100644 --- a/object.h +++ b/object.h @@ -46,7 +46,7 @@ extern struct object_refs *lookup_object_refs(struct object *); /** Internal only **/ struct object *lookup_object(const unsigned char *sha1); -void created_object(const unsigned char *sha1, struct object *obj); +extern void *create_object(const unsigned char *sha1, int type, void *obj); /** Returns the object, having parsed it to find out what it is. **/ struct object *parse_object(const unsigned char *sha1); diff --git a/tag.c b/tag.c index 56a49f4..330d287 100644 --- a/tag.c +++ b/tag.c @@ -20,13 +20,9 @@ struct object *deref_tag(struct object *o, const char *warn, int warnlen) struct tag *lookup_tag(const unsigned char *sha1) { - struct object *obj = lookup_object(sha1); - if (!obj) { - struct tag *ret = alloc_tag_node(); - created_object(sha1, &ret->object); - ret->object.type = OBJ_TAG; - return ret; - } + struct object *obj = lookup_object(sha1); + if (!obj) + return create_object(sha1, OBJ_TAG, alloc_tag_node()); if (!obj->type) obj->type = OBJ_TAG; if (obj->type != OBJ_TAG) { diff --git a/tree.c b/tree.c index d188c0f..e5bfbce 100644 --- a/tree.c +++ b/tree.c @@ -127,12 +127,8 @@ int read_tree(struct tree *tree, int stage, const char **match) struct tree *lookup_tree(const unsigned char *sha1) { struct object *obj = lookup_object(sha1); - if (!obj) { - struct tree *ret = alloc_tree_node(); - created_object(sha1, &ret->object); - ret->object.type = OBJ_TREE; - return ret; - } + if (!obj) + return create_object(sha1, OBJ_TREE, alloc_tree_node()); if (!obj->type) obj->type = OBJ_TREE; if (obj->type != OBJ_TREE) { -- cgit v0.10.2-6-g49f6