| #include "cache.h" | 
 | #include "blob.h" | 
 |  | 
 | const char *blob_type = "blob"; | 
 |  | 
 | struct blob *lookup_blob(const unsigned char *sha1) | 
 | { | 
 | 	struct object *obj = lookup_object(sha1); | 
 | 	if (!obj) | 
 | 		return create_object(sha1, OBJ_BLOB, alloc_blob_node()); | 
 | 	if (!obj->type) | 
 | 		obj->type = OBJ_BLOB; | 
 | 	if (obj->type != OBJ_BLOB) { | 
 | 		error("Object %s is a %s, not a blob", | 
 | 		      sha1_to_hex(sha1), typename(obj->type)); | 
 | 		return NULL; | 
 | 	} | 
 | 	return (struct blob *) obj; | 
 | } | 
 |  | 
 | int parse_blob_buffer(struct blob *item, void *buffer, unsigned long size) | 
 | { | 
 | 	item->object.parsed = 1; | 
 | 	return 0; | 
 | } | 
 |  | 
 | int parse_blob(struct blob *item) | 
 | { | 
 |         enum object_type type; | 
 |         void *buffer; | 
 |         unsigned long size; | 
 | 	int ret; | 
 |  | 
 |         if (item->object.parsed) | 
 |                 return 0; | 
 |         buffer = read_sha1_file(item->object.sha1, &type, &size); | 
 |         if (!buffer) | 
 |                 return error("Could not read %s", | 
 |                              sha1_to_hex(item->object.sha1)); | 
 |         if (type != OBJ_BLOB) | 
 |                 return error("Object %s not a blob", | 
 |                              sha1_to_hex(item->object.sha1)); | 
 | 	ret = parse_blob_buffer(item, buffer, size); | 
 | 	free(buffer); | 
 | 	return ret; | 
 | } |