"ZheNing Hu via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > /* See grab_values */ > -static void grab_sub_body_contents(struct atom_value *val, int deref, void *buf) > +static void grab_sub_body_contents(struct atom_value *val, int deref, void *buf, > + struct object *obj) Neither this step or the next change needs anything but type member of the 'obj' (and 'buf' is coming from oi.content of the result of asking about that same 'obj'). I wonder if we should do one of the following: (1) stop passing "void *buf" and instead "struct expand_data *data", and use "data->content" to access "buf", which would allow you to access "data->type" to perform the added check. (2) instead of adding "struct obj *obj" to the parameters, just add "enum object_type type", as that is the only thing you need. Obviously (2) is with lessor impact, but if it can be done safely without breaking the code [*], (1) would probably be a much more preferrable direction to go in the longer term. Side note [*]. A caller is allowed to choose to feed "buf" that is different from "oi.content" (perhaps buf may sometimes want to be a utf-8 recoded version of oi.content for certain types of objects) with the current system, but if we pass expand_data throughout the callchain, such a caller is broken, for example.