- if (!(p = malloc (sizeof(*p))))
- {
- logf (LOG_FATAL|LOG_ERRNO, "malloc");
- exit (1);
- }
- p->rw = rw;
- p->tmp_buf = NULL;
- p->tmp_size = 0;
- p->data_fname = "recdata";
- p->data_fd = -1;
- p->index_fname = "recindex";
- p->index_fd = open (p->index_fname,
- rw ? (O_RDWR|O_CREAT) : O_RDONLY, 0666);
- if (p->index_fd == -1)
- {
- logf (LOG_FATAL|LOG_ERRNO, "open %s", p->index_fname);
- exit (1);
- }
- r = read (p->index_fd, &p->head, sizeof(p->head));
- switch (r)
- {
- case -1:
- logf (LOG_FATAL|LOG_ERRNO, "read %s", p->index_fname);
- exit (1);
- case 0:
- memcpy (p->head.magic, REC_HEAD_MAGIC, sizeof(p->head.magic));
- p->head.index_free = 0;
- p->head.index_last = 1;
- p->head.no_records = 0;
- p->head.data_size = 0;
- p->head.data_slack = 0;
- p->head.data_used = 0;
- if (rw)
- rec_write_head (p);
- break;
- case sizeof(p->head):
- if (memcmp (p->head.magic, REC_HEAD_MAGIC, sizeof(p->head.magic)))
- {
- logf (LOG_FATAL, "read %s. bad header", p->index_fname);
- exit (1);
- }
- break;
- default:
- logf (LOG_FATAL, "read head of %s. expected %d. got %d",
- p->index_fname, sizeof(p->head), r);
- exit (1);
- }
- p->data_fd = open (p->data_fname,
- rw ? (O_RDWR|O_CREAT) : O_RDONLY, 0666);
- if (p->data_fd == -1)
- {
- logf (LOG_FATAL|LOG_ERRNO, "open %s", p->data_fname);
- exit (1);
- }
- p->cache_max = 10;
- p->cache_cur = 0;
- if (!(p->record_cache = malloc (sizeof(*p->record_cache)*p->cache_max)))
- {
- logf (LOG_FATAL|LOG_ERRNO, "malloc");
- exit (1);
- }
- return p;
+void rect_encode(void *p, char **dst, const char **src)
+{
+ zint sys;
+ int len;
+
+ memcpy(&sys, *src, sizeof(sys));
+ zebra_zint_encode(dst, sys);
+ (*src) += sizeof(sys);
+
+ len = **src;
+ **dst = len;
+ (*src)++;
+ (*dst)++;
+
+ memcpy(*dst, *src, len);
+ *dst += len;
+ *src += len;