Johannes Schindelin <Johannes.Schindelin@xxxxxx> writes: > I believe that that is exactly the reason why we want this: > > - same_contents = oideq(&one->oid, &two->oid); > + same_contents = one->oid_valid && two->oid_valid ? > oideq(&one->oid, &two->oid) : !strcmp(one->data, two->data); Not quite. The other side should either be one->size == two->size && !memcmp(...) or just left to false, as the downstream code must be prepared for same_contents being false even when one and two turns out to be not-byte-for-byte-same but equivalent anyway.