- if (s->alloc <= c->index) {
- int new_alloc = alloc_nr(s->alloc);
- if (new_alloc <= c->index)
- new_alloc = c->index + 1;
-
- s->buf = xrealloc(s->buf, new_alloc * sizeof(*s->buf));
- memset(s->buf + s->alloc, 0, new_alloc - s->alloc);
- s->alloc = new_alloc;
+ int nth_piece, nth_slot;
+
+ nth_piece = c->index / s->piece_size;
+ nth_slot = c->index % s->piece_size;
+
+ if (s->piece_count <= nth_piece) {
+ int i;
+
+ s->piece = xrealloc(s->piece, (nth_piece + 1) * sizeof(s->piece));
+ for (i = s->piece_count; i <= nth_piece; i++)
+ s->piece[i] = NULL;
+ s->piece_count = nth_piece + 1;