cdb_seq.c
上传用户:tany51
上传日期:2013-06-12
资源大小:1397k
文件大小:1k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* sequential record retrieval routines
  2.  *
  3.  * This file is a part of tinycdb package by Michael Tokarev, mjt@corpit.ru.
  4.  * Public domain.
  5.  */
  6. #include "common/setup_before.h"
  7. #include "cdb_int.h"
  8. #include "common/setup_after.h"
  9. int
  10. cdb_seqnext(unsigned *cptr, struct cdb *cdbp) {
  11.   unsigned klen, vlen;
  12.   unsigned pos = *cptr;
  13.   unsigned dend = cdbp->cdb_dend;
  14.   const unsigned char *mem = cdbp->cdb_mem;
  15.   if (pos > dend - 8)
  16.     return 0;
  17.   klen = cdb_unpack(mem + pos);
  18.   vlen = cdb_unpack(mem + pos + 4);
  19.   pos += 8;
  20.   if (dend - klen < pos || dend - vlen < pos + klen)
  21.     return errno = EPROTO, -1;
  22.   cdbp->cdb_kpos = pos;
  23.   cdbp->cdb_klen = klen;
  24.   cdbp->cdb_vpos = pos + klen;
  25.   cdbp->cdb_vlen = vlen;
  26.   *cptr = pos + klen + vlen;
  27.   return 1;
  28. }