Matthew DeVore <matvore@xxxxxxxxxx> writes: > +struct filter_data { > + /* Used by all filter types. */ > struct oidset *omits; > + > + enum list_objects_filter_result (*filter_object_fn)( > + struct repository *r, > + enum list_objects_filter_situation filter_situation, > + struct object *obj, > + const char *pathname, > + const char *filename, > + struct filter_data *filter_data); > + > + void (*filter_clear_fn)(struct filter_data *filter_data); > + > + union { > + struct { > + /* > + * Maps trees to the minimum depth at which they were > + * seen. It is not necessary to re-traverse a tree at > + * deeper or equal depths than it has already been > + * traversed. > + * > + * We can't use LOFR_MARK_SEEN for tree objects since > + * this will prevent it from being traversed at > + * shallower depths. > + */ > + struct oidmap seen_at_depth; > + > + unsigned long exclude_depth; > + unsigned long current_depth; > + }; Name this, and the ohter two union members, and the union itself as one member inside the outer struct; some compilers would be unhappy with the GCC extension that allows you to refer to the member in this struct as ((struct filter_data *)p)->seen_at_depth, no? > + struct { > + unsigned long max_bytes; > + }; > + > + struct { > + struct exclude_list el; > + > + size_t nr, alloc; > + struct frame *array_frame; > + }; > + }; > };