CSSM_WORDID_TYPE AclSubject::Maker::getWord(const ListElement &elem, int min /*= 0*/, int max /*= INT_MAX*/) { if (elem.type() != CSSM_LIST_ELEMENT_WORDID) CssmError::throwMe(CSSM_ERRCODE_INVALID_ACL_SUBJECT_VALUE); CSSM_WORDID_TYPE value = elem; if (value < min || value > max) CssmError::throwMe(CSSM_ERRCODE_INVALID_ACL_SUBJECT_VALUE); return value; }
// // Parsing helper for subject makers. // Note that count/array exclude the first element of list, which is the subject type wordid. // void AclSubject::Maker::crack(const CssmList &list, uint32 count, ListElement **array, ...) { if (count != list.length() - 1) CssmError::throwMe(CSSM_ERRCODE_INVALID_ACL_SUBJECT_VALUE); if (count > 0) { va_list args; va_start(args, array); ListElement *elem = list.first()->next(); for (uint32 n = 0; n < count; n++, elem = elem->next()) { CSSM_LIST_ELEMENT_TYPE expectedType = va_arg(args, CSSM_LIST_ELEMENT_TYPE); if (elem->type() != expectedType) CssmError::throwMe(CSSM_ERRCODE_INVALID_ACL_SUBJECT_VALUE); array[n] = elem; } va_end(args); } }