bdbobj2.c
上传用户:s81996212
上传日期:2007-01-04
资源大小:722k
文件大小:2k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /*
  2. ** Copyright 1998 - 1999 Double Precision, Inc.  See COPYING for
  3. ** distribution information.
  4. */
  5. #include "bdbobj.h"
  6. #include <string.h>
  7. #include <stdlib.h>
  8. char *bdbobj_firstkey(struct bdbobj *obj, size_t *keylen, char **val,
  9. size_t *vallen)
  10. {
  11. DBT key, value;
  12. if (!obj->has_dbf) return (0);
  13. memset(&key, 0, sizeof(key));
  14. memset(&value, 0, sizeof(value));
  15. #if DB_VERSION_MAJOR < 2
  16. if ((*obj->dbf->seq)(obj->dbf, &key, &value, R_FIRST)) return (0);
  17. #else
  18. if (obj->has_dbc)
  19. {
  20. (*obj->dbc->c_close)(obj->dbc);
  21. obj->has_dbc=0;
  22. }
  23. #if DB_VERSION_MAJOR > 2
  24. if ((*obj->dbf->cursor)(obj->dbf, 0, &obj->dbc, 0)) return (0);
  25. #else
  26. #if DB_VERSION_MINOR >= 5
  27. if ((*obj->dbf->cursor)(obj->dbf, 0, &obj->dbc, 0)) return (0);
  28. #else
  29. if ((*obj->dbf->cursor)(obj->dbf, 0, &obj->dbc)) return (0);
  30. #endif
  31. #endif
  32. obj->has_dbc=1;
  33. if ((*obj->dbc->c_get)(obj->dbc, &key, &value, DB_FIRST)) return (0);
  34. #endif
  35. *keylen=key.size;
  36. *vallen=value.size;
  37. if ((*val=(char *)malloc(*vallen)) == 0) return (0);
  38. memcpy(*val, value.data, *vallen);
  39. return ((char *)key.data);
  40. }
  41. char *bdbobj_nextkey(struct bdbobj *obj, size_t *keylen, char **val,
  42. size_t *vallen)
  43. {
  44. DBT key, value;
  45. if (!obj->has_dbf) return (0);
  46. memset(&key, 0, sizeof(key));
  47. memset(&value, 0, sizeof(value));
  48. #if DB_VERSION_MAJOR < 2
  49. if ((*obj->dbf->seq)(obj->dbf, &key, &value, R_NEXT)) return (0);
  50. #else
  51. if (!obj->has_dbc) return (0);
  52. if ((*obj->dbc->c_get)(obj->dbc, &key, &value, DB_NEXT))
  53. {
  54. (*obj->dbc->c_close)(obj->dbc);
  55. obj->has_dbc=0;
  56. }
  57. #endif
  58. *keylen=key.size;
  59. *vallen=value.size;
  60. if ((*val=(char *)malloc(*vallen)) == 0) return (0);
  61. memcpy(*val, value.data, *vallen);
  62. return ((char *)key.data);
  63. }