void Freeze::handleDbException(const DbException& dx, Key& key, Dbt& dbKey, const char* file, int line) { bool bufferSmallException = #if (DB_VERSION_MAJOR == 4) && (DB_VERSION_MINOR == 2) (dx.get_errno() == ENOMEM); #else (dx.get_errno() == DB_BUFFER_SMALL || dx.get_errno() == ENOMEM); #endif if(bufferSmallException && (dbKey.get_size() > dbKey.get_ulen())) { // // Keep the old key size in case it's used as input // size_t oldKeySize = key.size(); key.resize(dbKey.get_size()); initializeOutDbt(key, dbKey); dbKey.set_size(static_cast<u_int32_t>(oldKeySize)); } else { handleDbException(dx, file, line); } }
void Freeze::handleDbException(const DbException& dx, Key& key, Dbt& dbKey, Value& value, Dbt& dbValue, const char* file, int line) { bool bufferSmallException = #if (DB_VERSION_MAJOR == 4) && (DB_VERSION_MINOR == 2) (dx.get_errno() == ENOMEM); #else (dx.get_errno() == DB_BUFFER_SMALL || dx.get_errno() == ENOMEM); #endif bool resized = false; if(bufferSmallException) { if(dbKey.get_size() > dbKey.get_ulen()) { size_t oldKeySize = key.size(); key.resize(dbKey.get_size()); initializeOutDbt(key, dbKey); dbKey.set_size(static_cast<u_int32_t>(oldKeySize)); resized = true; } if(dbValue.get_size() > dbValue.get_ulen()) { value.resize(dbValue.get_size()); initializeOutDbt(value, dbValue); resized = true; } } if(!resized) { handleDbException(dx, file, line); } }
void test_dbt(void) { u_int32_t size = 3; u_int32_t flags = 5; u_int32_t ulen = 7; void* data = &size; Dbt dbt; dbt.set_size(size); dbt.set_flags(flags); dbt.set_data(data); dbt.set_ulen(ulen); assert(dbt.get_size() == size); assert(dbt.get_flags() == flags); assert(dbt.get_data() == data); assert(dbt.get_ulen() == ulen); }
DbMultipleIterator::DbMultipleIterator(const Dbt &dbt) : data_((u_int8_t*)dbt.get_data()), p_((u_int32_t*)(data_ + dbt.get_ulen() - sizeof(u_int32_t))) { }