bool CssmDbAttributeInfo::operator <(const CssmDbAttributeInfo& other) const { if (nameFormat() < other.nameFormat()) return true; if (other.nameFormat() < nameFormat()) return false; // nameFormat's are equal. switch (nameFormat()) { case CSSM_DB_ATTRIBUTE_NAME_AS_STRING: { int res = strcmp(static_cast<const char *>(*this), static_cast<const char *>(other)); if (res < 0) return true; if (res > 0) return false; break; } case CSSM_DB_ATTRIBUTE_NAME_AS_OID: if (static_cast<const CssmOid &>(*this) < static_cast<const CssmOid &>(other)) return true; if (static_cast<const CssmOid &>(other) < static_cast<const CssmOid &>(*this)) return false; break; case CSSM_DB_ATTRIBUTE_NAME_AS_INTEGER: if (static_cast<uint32>(*this) < static_cast<uint32>(other)) return true; if (static_cast<uint32>(other) < static_cast<uint32>(*this)) return false; break; default: CssmError::throwMe(CSSMERR_DL_INVALID_FIELD_NAME); } return format() < other.format(); }
void ItemImpl::setAttribute(const CssmDbAttributeInfo &info, const CssmPolyData &data) { StLock<Mutex>_(mMutex); if (!mDbAttributes.get()) { mDbAttributes.reset(new DbAttributes()); mDbAttributes->recordType(mPrimaryKey->recordType()); } size_t length = data.Length; const void *buf = reinterpret_cast<const void *>(data.Data); uint8 timeString[16]; // XXX This code is duplicated in KCCursorImpl::KCCursorImpl() // Convert a 4 or 8 byte TIME_DATE to a CSSM_DB_ATTRIBUTE_FORMAT_TIME_DATE // style attribute value. if (info.format() == CSSM_DB_ATTRIBUTE_FORMAT_TIME_DATE) { if (length == sizeof(UInt32)) { MacSecondsToTimeString(*reinterpret_cast<const UInt32 *>(buf), 16, &timeString); buf = &timeString; length = 16; } else if (length == sizeof(SInt64)) { MacLongDateTimeToTimeString(*reinterpret_cast<const SInt64 *>(buf), 16, &timeString); buf = &timeString; length = 16; } } mDbAttributes->add(info, CssmData(const_cast<void*>(buf), length)); }
bool CssmDbAttributeInfo::operator ==(const CssmDbAttributeInfo& other) const { if (nameFormat() != other.nameFormat()) return false; if (format() != other.format()) return false; switch (nameFormat()) { case CSSM_DB_ATTRIBUTE_NAME_AS_STRING: return !strcmp(static_cast<const char *>(*this), static_cast<const char *>(other)); case CSSM_DB_ATTRIBUTE_NAME_AS_OID: return static_cast<const CssmOid &>(*this) == static_cast<const CssmOid &>(other); case CSSM_DB_ATTRIBUTE_NAME_AS_INTEGER: return static_cast<uint32>(*this) == static_cast<uint32>(other); default: CssmError::throwMe(CSSMERR_DL_INVALID_FIELD_NAME); } }