aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--object-file.c8
-rw-r--r--odb.c29
-rw-r--r--packfile.c3
3 files changed, 18 insertions, 22 deletions
diff --git a/object-file.c b/object-file.c
index af1c3f972d..6280e42f34 100644
--- a/object-file.c
+++ b/object-file.c
@@ -426,7 +426,7 @@ int odb_source_loose_read_object_info(struct odb_source *source,
unsigned long size_scratch;
enum object_type type_scratch;
- if (oi->delta_base_oid)
+ if (oi && oi->delta_base_oid)
oidclr(oi->delta_base_oid, source->odb->repo->hash_algo);
/*
@@ -437,13 +437,13 @@ int odb_source_loose_read_object_info(struct odb_source *source,
* return value implicitly indicates whether the
* object even exists.
*/
- if (!oi->typep && !oi->sizep && !oi->contentp) {
+ if (!oi || (!oi->typep && !oi->sizep && !oi->contentp)) {
struct stat st;
- if (!oi->disk_sizep && (flags & OBJECT_INFO_QUICK))
+ if ((!oi || !oi->disk_sizep) && (flags & OBJECT_INFO_QUICK))
return quick_has_loose(source->loose, oid) ? 0 : -1;
if (stat_loose_object(source->loose, oid, &st, &path) < 0)
return -1;
- if (oi->disk_sizep)
+ if (oi && oi->disk_sizep)
*oi->disk_sizep = st.st_size;
return 0;
}
diff --git a/odb.c b/odb.c
index 7b5da2de32..ffd78e1c46 100644
--- a/odb.c
+++ b/odb.c
@@ -677,34 +677,31 @@ static int do_oid_object_info_extended(struct object_database *odb,
const struct object_id *oid,
struct object_info *oi, unsigned flags)
{
- static struct object_info blank_oi = OBJECT_INFO_INIT;
const struct cached_object *co;
const struct object_id *real = oid;
int already_retried = 0;
-
if (flags & OBJECT_INFO_LOOKUP_REPLACE)
real = lookup_replace_object(odb->repo, oid);
if (is_null_oid(real))
return -1;
- if (!oi)
- oi = &blank_oi;
-
co = find_cached_object(odb, real);
if (co) {
- if (oi->typep)
- *(oi->typep) = co->type;
- if (oi->sizep)
- *(oi->sizep) = co->size;
- if (oi->disk_sizep)
- *(oi->disk_sizep) = 0;
- if (oi->delta_base_oid)
- oidclr(oi->delta_base_oid, odb->repo->hash_algo);
- if (oi->contentp)
- *oi->contentp = xmemdupz(co->buf, co->size);
- oi->whence = OI_CACHED;
+ if (oi) {
+ if (oi->typep)
+ *(oi->typep) = co->type;
+ if (oi->sizep)
+ *(oi->sizep) = co->size;
+ if (oi->disk_sizep)
+ *(oi->disk_sizep) = 0;
+ if (oi->delta_base_oid)
+ oidclr(oi->delta_base_oid, odb->repo->hash_algo);
+ if (oi->contentp)
+ *oi->contentp = xmemdupz(co->buf, co->size);
+ oi->whence = OI_CACHED;
+ }
return 0;
}
diff --git a/packfile.c b/packfile.c
index c7438c5b09..23a7f8a191 100644
--- a/packfile.c
+++ b/packfile.c
@@ -2138,7 +2138,6 @@ int packfile_store_read_object_info(struct packfile_store *store,
struct object_info *oi,
unsigned flags UNUSED)
{
- static struct object_info blank_oi = OBJECT_INFO_INIT;
struct pack_entry e;
int rtype;
@@ -2149,7 +2148,7 @@ int packfile_store_read_object_info(struct packfile_store *store,
* We know that the caller doesn't actually need the
* information below, so return early.
*/
- if (oi == &blank_oi)
+ if (!oi)
return 0;
rtype = packed_object_info(store->odb->repo, e.p, e.offset, oi);