Lines Matching refs:root

44 static int	ber_dump_element(struct ber *ber, struct ber_element *root);
45 static void ber_dump_header(struct ber *ber, struct ber_element *root);
755 * root fully populated element tree
762 ber_write_elements(struct ber *ber, struct ber_element *root)
767 len = ber_calc_len(root);
783 if (ber_dump_element(ber, root) == -1)
798 * root if NULL, build up an element tree from what we receive on
809 struct ber_element *root = elm;
811 if (root == NULL) {
812 if ((root = ber_get_element(0)) == NULL)
816 DPRINTF("read ber elements, root %p\n", root);
818 if (ber_read_element(ber, root) == -1) {
819 /* Cleanup if root was allocated by us */
821 ber_free_elements(root);
825 return root;
829 ber_free_elements(struct ber_element *root)
831 if (root->be_sub && (root->be_encoding == BER_TYPE_SEQUENCE ||
832 root->be_encoding == BER_TYPE_SET))
833 ber_free_elements(root->be_sub);
834 if (root->be_next)
835 ber_free_elements(root->be_next);
836 if (root->be_free && (root->be_encoding == BER_TYPE_OCTETSTRING ||
837 root->be_encoding == BER_TYPE_BITSTRING ||
838 root->be_encoding == BER_TYPE_OBJECT))
839 free(root->be_val);
840 free(root);
844 ber_calc_len(struct ber_element *root)
851 if (root->be_sub && (root->be_encoding == BER_TYPE_SEQUENCE ||
852 root->be_encoding == BER_TYPE_SET))
853 root->be_len = ber_calc_len(root->be_sub);
856 if (root->be_type > BER_TYPE_SINGLE_MAX)
857 for (t = root->be_type; t > 0; t >>= 7)
859 if (root->be_len >= BER_TAG_MORE)
860 for (s = root->be_len; s > 0; s >>= 8)
864 if (root->be_next)
865 size += ber_calc_len(root->be_next);
868 if (root->be_type == BER_TYPE_EOC && root->be_len == 0)
871 return (root->be_len + size);
879 ber_dump_element(struct ber *ber, struct ber_element *root)
885 ber_dump_header(ber, root);
887 switch (root->be_encoding) {
891 l = (unsigned long long)root->be_numeric;
892 for (i = root->be_len; i > 0; i--) {
901 ber_write(ber, root->be_val, root->be_len);
908 if (root->be_sub && ber_dump_element(ber, root->be_sub) == -1)
913 if (root->be_next == NULL)
915 return ber_dump_element(ber, root->be_next);
919 ber_dump_header(struct ber *ber, struct ber_element *root)
927 if (root->be_type <= BER_TYPE_SINGLE_MAX) {
928 id = root->be_type | (root->be_class << BER_CLASS_SHIFT);
929 if (root->be_encoding == BER_TYPE_SEQUENCE ||
930 root->be_encoding == BER_TYPE_SET)
935 id = BER_TAG_MASK | (root->be_class << BER_CLASS_SHIFT);
936 if (root->be_encoding == BER_TYPE_SEQUENCE ||
937 root->be_encoding == BER_TYPE_SET)
942 for (t = 0, type = root->be_type; type > 0; type >>= 7)
952 if (root->be_len < BER_TAG_MORE) {
954 ber_putc(ber, root->be_len);
956 for (t = 0, size = root->be_len; size > 0; size >>= 8)