- assert (mb[i+1].offset > mb[i].offset);
- isc_write_dblock (is, cat, mb[i].block, r_buf + mb[i].offset,
- mb[i+1].block, mb[i+1].offset - mb[i].offset);
+ ssize = mb[i+1].offset - mb[i].offset;
+ assert (ssize);
+
+ if (!*firstpos)
+ {
+ *firstpos = mb[i].block;
+ src = r_buf + mb[i].offset - ISAMC_BLOCK_OFFSET_1;
+ ssize += ISAMC_BLOCK_OFFSET_1;
+
+ memcpy (src+sizeof(int)+sizeof(ssize), numkeys,
+ sizeof(*numkeys));
+ if (is->method->debug > 2)
+ logf (LOG_LOG, "isc: flush numk=%d size=%d nextpos=%d",
+ *numkeys, (int) ssize, mb[i+1].block);
+ }
+ else
+ {
+ src = r_buf + mb[i].offset - ISAMC_BLOCK_OFFSET_N;
+ ssize += ISAMC_BLOCK_OFFSET_N;
+ if (is->method->debug > 2)
+ logf (LOG_LOG, "isc: flush size=%d nextpos=%d",
+ (int) ssize, mb[i+1].block);
+ }
+ memcpy (src, &mb[i+1].block, sizeof(int));
+ memcpy (src+sizeof(int), &ssize, sizeof(ssize));
+ isc_write_block (is, cat, mb[i].block, src);