From: Junio C Hamano Date: Wed, 20 Apr 2016 00:17:20 GMT Subject: Re: [PATCH 4/6] Convert struct name_entry to use struct object_id. Message-ID: In-Reply-To: <20160419231617.GA572694@vauxhall.crustytoothpaste.net> "brian m. carlson" writes: > On Tue, Apr 19, 2016 at 04:02:22PM -0700, Junio C Hamano wrote: >> "brian m. carlson" writes: >> >> > @@ -314,7 +314,7 @@ static int threeway_callback(int n, unsigned long mask, unsigned long dirmask, s >> > } >> > >> > if (same_entry(entry+0, entry+1)) { >> > - if (entry[2].sha1 && !S_ISDIR(entry[2].mode)) { >> > + if (entry[2].oid->hash && !S_ISDIR(entry[2].mode)) { >> >> Thanks for a warning in the cover letter. >> >> "if (entry[2].oid && !S_ISDIR(entry[2].mode)" would be a faithful >> conversion, wouldn't it? > > Yes, I think that would be a better conversion. I'll reroll after > waiting for further comments. Thanks. A simple general rule to follow is that anything that assumed entry.sha1 is non-NULL should become entry.oid->hash, while anyting that checked if entry.sha1 is NULL or not should become a check on entry.oid, I think. Even though offsetof(oid.hash) might happen to be zero, compiler writers are crazy and "optimize" the above entry[2].oid->hash saying "you are dereerencing into the hash field without first checking if oid pointer is NULL, so we'd assume that you know oid is not NULL here--which makes this always true so we won't even do any check and only check entry[2].mode"..