+ return ret;
+}
+
+static ZEBRA_RES rec_write_multiple(Records p, int saveCount)
+{
+ int i;
+ short ref_count = 0;
+ Record last_rec = 0;
+ int out_size = 1000;
+ int out_offset = 0;
+ char *out_buf = (char *) xmalloc(out_size);
+ zint *sysnos = (zint *) xmalloc(sizeof(*sysnos) * (p->cache_cur + 1));
+ zint *sysnop = sysnos;
+ ZEBRA_RES ret = ZEBRA_OK;
+
+ for (i = 0; i<p->cache_cur - saveCount; i++)
+ {
+ struct record_cache_entry *e = p->record_cache + i;
+ switch (e->flag)
+ {
+ case recordFlagNew:
+ rec_cache_flush_block1(p, e->rec, last_rec, &out_buf,
+ &out_size, &out_offset);
+ *sysnop++ = rec_sysno_to_int(e->rec->sysno);
+ ref_count++;
+ e->flag = recordFlagNop;
+ last_rec = e->rec;
+ break;
+ case recordFlagWrite:
+ if (rec_release_blocks(p, rec_sysno_to_int(e->rec->sysno))
+ != ZEBRA_OK)
+ ret = ZEBRA_FAIL;
+
+ rec_cache_flush_block1(p, e->rec, last_rec, &out_buf,
+ &out_size, &out_offset);
+ *sysnop++ = rec_sysno_to_int(e->rec->sysno);
+ ref_count++;
+ e->flag = recordFlagNop;
+ last_rec = e->rec;
+ break;
+ case recordFlagDelete:
+ if (rec_delete_single(p, e->rec) != ZEBRA_OK)
+ ret = ZEBRA_FAIL;
+
+ e->flag = recordFlagNop;
+ break;
+ case recordFlagNop:
+ break;
+ default:
+ break;
+ }
+ }
+
+ *sysnop = -1;
+ rec_flush_shared(p, ref_count, sysnos, out_buf, out_offset);