File: cdb_seq.c

package info (click to toggle)
tinycdb 0.76
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny
  • size: 208 kB
  • ctags: 216
  • sloc: ansic: 1,697; makefile: 233; sh: 113
file content (29 lines) | stat: -rw-r--r-- 744 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* $Id: cdb_seq.c,v 1.8 2003/11/03 20:10:17 mjt Exp $
 * sequential record retrieval routines
 *
 * This file is a part of tinycdb package by Michael Tokarev, mjt@corpit.ru.
 * Public domain.
 */

#include "cdb_int.h"

int
cdb_seqnext(unsigned *cptr, struct cdb *cdbp) {
  unsigned klen, vlen;
  unsigned pos = *cptr;
  unsigned dend = cdbp->cdb_dend;
  const unsigned char *mem = cdbp->cdb_mem;
  if (pos > dend - 8)
    return 0;
  klen = cdb_unpack(mem + pos);
  vlen = cdb_unpack(mem + pos + 4);
  pos += 8;
  if (dend - klen < pos || dend - vlen < pos + klen)
    return errno = EPROTO, -1;
  cdbp->cdb_kpos = pos;
  cdbp->cdb_klen = klen;
  cdbp->cdb_vpos = pos + klen;
  cdbp->cdb_vlen = vlen;
  *cptr = pos + klen + vlen;
  return 1;
}