+
+ if (!c->n_cats)
+ {
+ if (c->n_cats >= allocated_cats)
+ c->cats = x2nrealloc (c->cats, &allocated_cats,
+ sizeof *c->cats);
+ c->cats[c->n_cats++] = cat;
+ }
+
+ if (show_totals)
+ {
+ if (c->n_cats >= allocated_cats)
+ c->cats = x2nrealloc (c->cats, &allocated_cats, sizeof *c->cats);
+
+ struct ctables_category *totals;
+ if (totals_before)
+ {
+ insert_element (c->cats, c->n_cats, sizeof *c->cats, 0);
+ totals = &c->cats[0];
+ }
+ else
+ totals = &c->cats[c->n_cats];
+ c->n_cats++;
+
+ *totals = (struct ctables_category) {
+ .type = CCT_TOTAL,
+ .total_label = total_label ? total_label : xstrdup (_("Total")),
+ };
+ }
+