]> git.saurik.com Git - apple/security.git/blobdiff - cdsa/cdsa_utilities/cssmlist.cpp
Security-177.tar.gz
[apple/security.git] / cdsa / cdsa_utilities / cssmlist.cpp
index 6c01777e695da76b776aebe9768212952551a06a..4e3648f89670e38d44605dfa6057fbba9bea30cf 100644 (file)
@@ -24,6 +24,7 @@
 #endif
 
 #include <Security/cssmlist.h>
 #endif
 
 #include <Security/cssmlist.h>
+#include <Security/cssmdata.h>
 
 
 //
 
 
 //
@@ -51,12 +52,18 @@ ListElement::ListElement(const CssmData &data)
        Element.Word = data;
 }
 
        Element.Word = data;
 }
 
-ListElement::ListElement(CssmAllocator &alloc, string s)
+ListElement::ListElement(CssmAllocator &alloc, const CssmData &data)
+{
+       ElementType = CSSM_LIST_ELEMENT_DATUM;
+       WordID = 0;
+       Element.Word = CssmAutoData(alloc, data).release();
+}
+
+ListElement::ListElement(CssmAllocator &alloc, const string &s)
 {
     ElementType = CSSM_LIST_ELEMENT_DATUM;
     WordID = 0;
 {
     ElementType = CSSM_LIST_ELEMENT_DATUM;
     WordID = 0;
-    size_t length = s.size();
-    Element.Word = CssmData(memcpy(alloc.alloc<char>(length), s.data(), length), length);
+       Element.Word = CssmAutoData(alloc, s.data(), s.size()).release();
 }
 
 ListElement::ListElement(const CssmList &list)
 }
 
 ListElement::ListElement(const CssmList &list)
@@ -91,6 +98,16 @@ const CssmList &ListElement::list() const
        return CssmList::overlay(Element.Sublist);
 }
 
        return CssmList::overlay(Element.Sublist);
 }
 
+TypedList &ListElement::typedList()
+{
+       return static_cast<TypedList &>(list());
+}
+
+const TypedList &ListElement::typedList() const
+{
+       return static_cast<const TypedList &>(list());
+}
+
 CSSM_WORDID_TYPE ListElement::word() const
 {
        assert(type() == CSSM_LIST_ELEMENT_WORDID);
 CSSM_WORDID_TYPE ListElement::word() const
 {
        assert(type() == CSSM_LIST_ELEMENT_WORDID);
@@ -238,6 +255,23 @@ TypedList::TypedList(CssmAllocator &alloc, CSSM_WORDID_TYPE type, ListElement *e
        append(elem2);
 }
 
        append(elem2);
 }
 
+TypedList::TypedList(CssmAllocator &alloc, CSSM_WORDID_TYPE type, ListElement *elem1, ListElement *elem2, ListElement *elem3)
+{
+       append(new(alloc) ListElement(type));
+       append(elem1);
+       append(elem2);
+       append(elem3);
+}
+
+TypedList::TypedList(CssmAllocator &alloc, CSSM_WORDID_TYPE type, ListElement *elem1, ListElement *elem2, ListElement *elem3, ListElement *elem4)
+{
+       append(new(alloc) ListElement(type));
+       append(elem1);
+       append(elem2);
+       append(elem3);
+       append(elem4);
+}
+
 
 //
 // Verify that a TypedList is "proper", i.e. has a first element of WORDID form
 
 //
 // Verify that a TypedList is "proper", i.e. has a first element of WORDID form
@@ -246,3 +280,9 @@ bool TypedList::isProper() const
 {
        return first() && first()->type() == CSSM_LIST_ELEMENT_WORDID;
 }
 {
        return first() && first()->type() == CSSM_LIST_ELEMENT_WORDID;
 }
+
+void TypedList::checkProper(CSSM_RETURN error) const
+{
+       if (!isProper())
+               CssmError::throwMe(error);
+}