Exemple #1
0
static int
_gdbm_fetch (mu_dbm_file_t db, struct mu_dbm_datum const *key,
	     struct mu_dbm_datum *ret)
{
  struct gdbm_descr *gd = db->db_descr;
  int rc;
  datum keydat, content;

  keydat.dptr = key->mu_dptr;
  keydat.dsize = key->mu_dsize;
  gdbm_errno = 0;
  content = gdbm_fetch (gd->file, keydat);
  if (content.dptr == NULL)
    {
      if (gdbm_errno == GDBM_ITEM_NOT_FOUND)
	return MU_ERR_NOENT;
      else
	{
	  db->db_errno.n = gdbm_errno;
	  return MU_ERR_FAILURE;
	}
    }
  mu_dbm_datum_free (ret);
  rc = _gdbm_conv_datum (db, ret, content, 1);
  if (rc)
    {
      free (content.dptr);
      return rc;
    }
  return 0;
}
Exemple #2
0
static int
_gdbm_nextkey (mu_dbm_file_t db, struct mu_dbm_datum *ret)
{
  struct gdbm_descr *gd = db->db_descr;
  int rc;
  datum key;

  if (!gd->prev.dptr)
    return MU_ERR_NOENT;
  key = gdbm_nextkey (gd->file, gd->prev);
  if (key.dptr == NULL)
    {
      if (gdbm_errno == GDBM_ITEM_NOT_FOUND)
	return MU_ERR_NOENT;
      else
	{
	  db->db_errno.n = gdbm_errno;
	  return MU_ERR_FAILURE;
	}
    }
  mu_dbm_datum_free (ret);
  rc = _gdbm_conv_datum (db, ret, key, 0);
  if (rc)
    {
      free (key.dptr);
      return rc;
    }
  free (gd->prev.dptr);
  gd->prev = key;
  return 0;
}
Exemple #3
0
static int
_ndbm_fetch (mu_dbm_file_t db, struct mu_dbm_datum const *key,
	     struct mu_dbm_datum *ret)
{
  datum keydat, content;

  keydat.dptr = key->mu_dptr;
  keydat.dsize = key->mu_dsize;
  errno = 0;
  content = dbm_fetch (db->db_descr, keydat);
  mu_dbm_datum_free (ret);
  if (content.dptr == NULL)
    return MU_ERR_NOENT;
  return _ndbm_conv_datum (db, ret, content);
}
Exemple #4
0
static int
_tc_nextkey (mu_dbm_file_t db, struct mu_dbm_datum *ret)
{
  TCHDB *hdb = db->db_descr;
  void *ptr;
  int retsize;

  ptr = tchdbiternext (hdb, &retsize);
  if (ptr)
    {
      mu_dbm_datum_free (ret);
      ret->mu_dptr = ptr;
      ret->mu_dsize = retsize;
      return 0;
    }
  else if ((db->db_errno.n = tchdbecode (hdb)) == TCENOREC)
    return MU_ERR_NOENT;
  return MU_ERR_FAILURE;
}