Add sk_FOO_sort_and_dedup Change-Id: I5021af1485faebbe664841a2927bf178c8a9cafd Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/94028 Commit-Queue: David Benjamin <davidben@google.com> Presubmit-BoringSSL-Verified: boringssl-scoped@luci-project-accounts.iam.gserviceaccount.com <boringssl-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: David Benjamin <davidben@google.com> Reviewed-by: Rudolf Polzer <rpolzer@google.com>
diff --git a/crypto/stack/stack.cc b/crypto/stack/stack.cc index 67c7162..391f473 100644 --- a/crypto/stack/stack.cc +++ b/crypto/stack/stack.cc
@@ -365,6 +365,26 @@ sk->sorted = 1; } +void OPENSSL_sk_sort_and_dedup( + OPENSSL_STACK *sk, OPENSSL_sk_call_cmp_func call_cmp_func, + OPENSSL_sk_call_free_func call_free_func, OPENSSL_sk_free_func free_func) { + OPENSSL_sk_sort(sk, call_cmp_func); + if (sk == nullptr || sk->comp == nullptr || sk->num <= 1) { + return; + } + + size_t new_num = 1; + for (size_t i = 1; i < sk->num; i++) { + if (call_cmp_func(sk->comp, sk->data[i], sk->data[new_num - 1]) != 0) { + sk->data[new_num] = sk->data[i]; + new_num++; + } else if (free_func != nullptr) { + call_free_func(free_func, sk->data[i]); + } + } + sk->num = new_num; +} + int OPENSSL_sk_is_sorted(const OPENSSL_STACK *sk) { if (!sk) { return 1;
diff --git a/crypto/stack/stack_test.cc b/crypto/stack/stack_test.cc index 7da842d..80aeb5e 100644 --- a/crypto/stack/stack_test.cc +++ b/crypto/stack/stack_test.cc
@@ -486,6 +486,43 @@ EXPECT_TRUE(sk_TEST_INT_is_sorted(sk.get())); } +TEST(StackTest, SortAndDedup) { + UniquePtr<STACK_OF(TEST_INT)> sk(sk_TEST_INT_new(compare)); + ASSERT_TRUE(sk); + sk_TEST_INT_sort_and_dedup(sk.get(), TEST_INT_free); + ExpectStackEquals(sk.get(), std::vector<int>{}); + + for (int v : {1, 2, 3, 4, 5, 2, 2, 2, 2, 3}) { + auto obj = TEST_INT_new(v); + ASSERT_TRUE(obj); + ASSERT_TRUE(PushToStack(sk.get(), std::move(obj))); + } + + sk_TEST_INT_sort_and_dedup(sk.get(), TEST_INT_free); + ExpectStackEquals(sk.get(), {1, 2, 3, 4, 5}); + + sk_TEST_INT_sort_and_dedup(sk.get(), TEST_INT_free); + ExpectStackEquals(sk.get(), {1, 2, 3, 4, 5}); + + // Repeat with non-owning pointers. + sk.reset(sk_TEST_INT_new(compare)); + ASSERT_TRUE(sk); + for (int v : {1, 2, 3, 4, 5, 2, 2, 2, 2, 3}) { + auto obj = TEST_INT_new(v); + ASSERT_TRUE(obj); + ASSERT_TRUE(PushToStack(sk.get(), std::move(obj))); + } + + // |not_owned| does not own its contents, so we cannot use bssl::UniquePtr. + STACK_OF(TEST_INT) *not_owned = sk_TEST_INT_dup(sk.get()); + ASSERT_TRUE(not_owned); + sk_TEST_INT_sort_and_dedup(not_owned, nullptr); + ExpectStackEquals(not_owned, {1, 2, 3, 4, 5}); + sk_TEST_INT_sort_and_dedup(not_owned, nullptr); + ExpectStackEquals(not_owned, {1, 2, 3, 4, 5}); + sk_TEST_INT_free(not_owned); +} + TEST(StackTest, IsSorted) { UniquePtr<STACK_OF(TEST_INT)> sk(sk_TEST_INT_new_null()); ASSERT_TRUE(sk);
diff --git a/include/openssl/prefix_symbols.h b/include/openssl/prefix_symbols.h index 12588ab..c2bbbe6 100644 --- a/include/openssl/prefix_symbols.h +++ b/include/openssl/prefix_symbols.h
@@ -1536,6 +1536,7 @@ #pragma redefine_extname OPENSSL_sk_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(OPENSSL_sk_set_cmp_func) #pragma redefine_extname OPENSSL_sk_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(OPENSSL_sk_shift) #pragma redefine_extname OPENSSL_sk_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(OPENSSL_sk_sort) +#pragma redefine_extname OPENSSL_sk_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(OPENSSL_sk_sort_and_dedup) #pragma redefine_extname OPENSSL_sk_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(OPENSSL_sk_value) #pragma redefine_extname OPENSSL_sk_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(OPENSSL_sk_zero) #pragma redefine_extname OPENSSL_strcasecmp BORINGSSL_ADD_USER_LABEL_AND_PREFIX(OPENSSL_strcasecmp) @@ -4632,6 +4633,7 @@ #define OPENSSL_sk_set_cmp_func BORINGSSL_ADD_PREFIX(OPENSSL_sk_set_cmp_func) #define OPENSSL_sk_shift BORINGSSL_ADD_PREFIX(OPENSSL_sk_shift) #define OPENSSL_sk_sort BORINGSSL_ADD_PREFIX(OPENSSL_sk_sort) +#define OPENSSL_sk_sort_and_dedup BORINGSSL_ADD_PREFIX(OPENSSL_sk_sort_and_dedup) #define OPENSSL_sk_value BORINGSSL_ADD_PREFIX(OPENSSL_sk_value) #define OPENSSL_sk_zero BORINGSSL_ADD_PREFIX(OPENSSL_sk_zero) #define OPENSSL_strcasecmp BORINGSSL_ADD_PREFIX(OPENSSL_strcasecmp) @@ -6263,6 +6265,7 @@ #pragma redefine_extname sk_ACCESS_DESCRIPTION_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ACCESS_DESCRIPTION_set_cmp_func) #pragma redefine_extname sk_ACCESS_DESCRIPTION_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ACCESS_DESCRIPTION_shift) #pragma redefine_extname sk_ACCESS_DESCRIPTION_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ACCESS_DESCRIPTION_sort) +#pragma redefine_extname sk_ACCESS_DESCRIPTION_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ACCESS_DESCRIPTION_sort_and_dedup) #pragma redefine_extname sk_ACCESS_DESCRIPTION_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ACCESS_DESCRIPTION_value) #pragma redefine_extname sk_ACCESS_DESCRIPTION_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ACCESS_DESCRIPTION_zero) #pragma redefine_extname sk_ASN1_INTEGER_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_INTEGER_call_cmp_func) @@ -6288,6 +6291,7 @@ #pragma redefine_extname sk_ASN1_INTEGER_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_INTEGER_set_cmp_func) #pragma redefine_extname sk_ASN1_INTEGER_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_INTEGER_shift) #pragma redefine_extname sk_ASN1_INTEGER_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_INTEGER_sort) +#pragma redefine_extname sk_ASN1_INTEGER_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_INTEGER_sort_and_dedup) #pragma redefine_extname sk_ASN1_INTEGER_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_INTEGER_value) #pragma redefine_extname sk_ASN1_INTEGER_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_INTEGER_zero) #pragma redefine_extname sk_ASN1_OBJECT_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_OBJECT_call_cmp_func) @@ -6313,6 +6317,7 @@ #pragma redefine_extname sk_ASN1_OBJECT_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_OBJECT_set_cmp_func) #pragma redefine_extname sk_ASN1_OBJECT_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_OBJECT_shift) #pragma redefine_extname sk_ASN1_OBJECT_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_OBJECT_sort) +#pragma redefine_extname sk_ASN1_OBJECT_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_OBJECT_sort_and_dedup) #pragma redefine_extname sk_ASN1_OBJECT_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_OBJECT_value) #pragma redefine_extname sk_ASN1_OBJECT_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_OBJECT_zero) #pragma redefine_extname sk_ASN1_TYPE_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_TYPE_call_cmp_func) @@ -6338,6 +6343,7 @@ #pragma redefine_extname sk_ASN1_TYPE_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_TYPE_set_cmp_func) #pragma redefine_extname sk_ASN1_TYPE_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_TYPE_shift) #pragma redefine_extname sk_ASN1_TYPE_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_TYPE_sort) +#pragma redefine_extname sk_ASN1_TYPE_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_TYPE_sort_and_dedup) #pragma redefine_extname sk_ASN1_TYPE_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_TYPE_value) #pragma redefine_extname sk_ASN1_TYPE_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_TYPE_zero) #pragma redefine_extname sk_ASN1_VALUE_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_VALUE_call_cmp_func) @@ -6363,6 +6369,7 @@ #pragma redefine_extname sk_ASN1_VALUE_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_VALUE_set_cmp_func) #pragma redefine_extname sk_ASN1_VALUE_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_VALUE_shift) #pragma redefine_extname sk_ASN1_VALUE_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_VALUE_sort) +#pragma redefine_extname sk_ASN1_VALUE_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_VALUE_sort_and_dedup) #pragma redefine_extname sk_ASN1_VALUE_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_VALUE_value) #pragma redefine_extname sk_ASN1_VALUE_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_ASN1_VALUE_zero) #pragma redefine_extname sk_BIO_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_BIO_call_cmp_func) @@ -6388,6 +6395,7 @@ #pragma redefine_extname sk_BIO_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_BIO_set_cmp_func) #pragma redefine_extname sk_BIO_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_BIO_shift) #pragma redefine_extname sk_BIO_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_BIO_sort) +#pragma redefine_extname sk_BIO_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_BIO_sort_and_dedup) #pragma redefine_extname sk_BIO_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_BIO_value) #pragma redefine_extname sk_BIO_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_BIO_zero) #pragma redefine_extname sk_CONF_VALUE_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_CONF_VALUE_call_cmp_func) @@ -6413,6 +6421,7 @@ #pragma redefine_extname sk_CONF_VALUE_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_CONF_VALUE_set_cmp_func) #pragma redefine_extname sk_CONF_VALUE_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_CONF_VALUE_shift) #pragma redefine_extname sk_CONF_VALUE_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_CONF_VALUE_sort) +#pragma redefine_extname sk_CONF_VALUE_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_CONF_VALUE_sort_and_dedup) #pragma redefine_extname sk_CONF_VALUE_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_CONF_VALUE_value) #pragma redefine_extname sk_CONF_VALUE_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_CONF_VALUE_zero) #pragma redefine_extname sk_CRYPTO_BUFFER_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_CRYPTO_BUFFER_call_cmp_func) @@ -6438,6 +6447,7 @@ #pragma redefine_extname sk_CRYPTO_BUFFER_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_CRYPTO_BUFFER_set_cmp_func) #pragma redefine_extname sk_CRYPTO_BUFFER_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_CRYPTO_BUFFER_shift) #pragma redefine_extname sk_CRYPTO_BUFFER_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_CRYPTO_BUFFER_sort) +#pragma redefine_extname sk_CRYPTO_BUFFER_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_CRYPTO_BUFFER_sort_and_dedup) #pragma redefine_extname sk_CRYPTO_BUFFER_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_CRYPTO_BUFFER_value) #pragma redefine_extname sk_CRYPTO_BUFFER_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_CRYPTO_BUFFER_zero) #pragma redefine_extname sk_DIST_POINT_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_DIST_POINT_call_cmp_func) @@ -6463,6 +6473,7 @@ #pragma redefine_extname sk_DIST_POINT_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_DIST_POINT_set_cmp_func) #pragma redefine_extname sk_DIST_POINT_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_DIST_POINT_shift) #pragma redefine_extname sk_DIST_POINT_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_DIST_POINT_sort) +#pragma redefine_extname sk_DIST_POINT_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_DIST_POINT_sort_and_dedup) #pragma redefine_extname sk_DIST_POINT_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_DIST_POINT_value) #pragma redefine_extname sk_DIST_POINT_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_DIST_POINT_zero) #pragma redefine_extname sk_GENERAL_NAME_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_GENERAL_NAME_call_cmp_func) @@ -6488,6 +6499,7 @@ #pragma redefine_extname sk_GENERAL_NAME_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_GENERAL_NAME_set_cmp_func) #pragma redefine_extname sk_GENERAL_NAME_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_GENERAL_NAME_shift) #pragma redefine_extname sk_GENERAL_NAME_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_GENERAL_NAME_sort) +#pragma redefine_extname sk_GENERAL_NAME_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_GENERAL_NAME_sort_and_dedup) #pragma redefine_extname sk_GENERAL_NAME_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_GENERAL_NAME_value) #pragma redefine_extname sk_GENERAL_NAME_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_GENERAL_NAME_zero) #pragma redefine_extname sk_GENERAL_SUBTREE_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_GENERAL_SUBTREE_call_cmp_func) @@ -6513,6 +6525,7 @@ #pragma redefine_extname sk_GENERAL_SUBTREE_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_GENERAL_SUBTREE_set_cmp_func) #pragma redefine_extname sk_GENERAL_SUBTREE_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_GENERAL_SUBTREE_shift) #pragma redefine_extname sk_GENERAL_SUBTREE_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_GENERAL_SUBTREE_sort) +#pragma redefine_extname sk_GENERAL_SUBTREE_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_GENERAL_SUBTREE_sort_and_dedup) #pragma redefine_extname sk_GENERAL_SUBTREE_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_GENERAL_SUBTREE_value) #pragma redefine_extname sk_GENERAL_SUBTREE_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_GENERAL_SUBTREE_zero) #pragma redefine_extname sk_OPENSSL_STRING_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_OPENSSL_STRING_call_cmp_func) @@ -6538,6 +6551,7 @@ #pragma redefine_extname sk_OPENSSL_STRING_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_OPENSSL_STRING_set_cmp_func) #pragma redefine_extname sk_OPENSSL_STRING_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_OPENSSL_STRING_shift) #pragma redefine_extname sk_OPENSSL_STRING_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_OPENSSL_STRING_sort) +#pragma redefine_extname sk_OPENSSL_STRING_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_OPENSSL_STRING_sort_and_dedup) #pragma redefine_extname sk_OPENSSL_STRING_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_OPENSSL_STRING_value) #pragma redefine_extname sk_OPENSSL_STRING_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_OPENSSL_STRING_zero) #pragma redefine_extname sk_POLICYINFO_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICYINFO_call_cmp_func) @@ -6563,6 +6577,7 @@ #pragma redefine_extname sk_POLICYINFO_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICYINFO_set_cmp_func) #pragma redefine_extname sk_POLICYINFO_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICYINFO_shift) #pragma redefine_extname sk_POLICYINFO_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICYINFO_sort) +#pragma redefine_extname sk_POLICYINFO_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICYINFO_sort_and_dedup) #pragma redefine_extname sk_POLICYINFO_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICYINFO_value) #pragma redefine_extname sk_POLICYINFO_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICYINFO_zero) #pragma redefine_extname sk_POLICYQUALINFO_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICYQUALINFO_call_cmp_func) @@ -6588,6 +6603,7 @@ #pragma redefine_extname sk_POLICYQUALINFO_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICYQUALINFO_set_cmp_func) #pragma redefine_extname sk_POLICYQUALINFO_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICYQUALINFO_shift) #pragma redefine_extname sk_POLICYQUALINFO_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICYQUALINFO_sort) +#pragma redefine_extname sk_POLICYQUALINFO_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICYQUALINFO_sort_and_dedup) #pragma redefine_extname sk_POLICYQUALINFO_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICYQUALINFO_value) #pragma redefine_extname sk_POLICYQUALINFO_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICYQUALINFO_zero) #pragma redefine_extname sk_POLICY_MAPPING_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICY_MAPPING_call_cmp_func) @@ -6613,6 +6629,7 @@ #pragma redefine_extname sk_POLICY_MAPPING_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICY_MAPPING_set_cmp_func) #pragma redefine_extname sk_POLICY_MAPPING_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICY_MAPPING_shift) #pragma redefine_extname sk_POLICY_MAPPING_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICY_MAPPING_sort) +#pragma redefine_extname sk_POLICY_MAPPING_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICY_MAPPING_sort_and_dedup) #pragma redefine_extname sk_POLICY_MAPPING_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICY_MAPPING_value) #pragma redefine_extname sk_POLICY_MAPPING_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_POLICY_MAPPING_zero) #pragma redefine_extname sk_SRTP_PROTECTION_PROFILE_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SRTP_PROTECTION_PROFILE_call_cmp_func) @@ -6638,6 +6655,7 @@ #pragma redefine_extname sk_SRTP_PROTECTION_PROFILE_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SRTP_PROTECTION_PROFILE_set_cmp_func) #pragma redefine_extname sk_SRTP_PROTECTION_PROFILE_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SRTP_PROTECTION_PROFILE_shift) #pragma redefine_extname sk_SRTP_PROTECTION_PROFILE_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SRTP_PROTECTION_PROFILE_sort) +#pragma redefine_extname sk_SRTP_PROTECTION_PROFILE_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SRTP_PROTECTION_PROFILE_sort_and_dedup) #pragma redefine_extname sk_SRTP_PROTECTION_PROFILE_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SRTP_PROTECTION_PROFILE_value) #pragma redefine_extname sk_SRTP_PROTECTION_PROFILE_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SRTP_PROTECTION_PROFILE_zero) #pragma redefine_extname sk_SSL_CIPHER_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SSL_CIPHER_call_cmp_func) @@ -6663,6 +6681,7 @@ #pragma redefine_extname sk_SSL_CIPHER_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SSL_CIPHER_set_cmp_func) #pragma redefine_extname sk_SSL_CIPHER_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SSL_CIPHER_shift) #pragma redefine_extname sk_SSL_CIPHER_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SSL_CIPHER_sort) +#pragma redefine_extname sk_SSL_CIPHER_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SSL_CIPHER_sort_and_dedup) #pragma redefine_extname sk_SSL_CIPHER_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SSL_CIPHER_value) #pragma redefine_extname sk_SSL_CIPHER_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SSL_CIPHER_zero) #pragma redefine_extname sk_SSL_COMP_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SSL_COMP_call_cmp_func) @@ -6688,6 +6707,7 @@ #pragma redefine_extname sk_SSL_COMP_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SSL_COMP_set_cmp_func) #pragma redefine_extname sk_SSL_COMP_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SSL_COMP_shift) #pragma redefine_extname sk_SSL_COMP_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SSL_COMP_sort) +#pragma redefine_extname sk_SSL_COMP_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SSL_COMP_sort_and_dedup) #pragma redefine_extname sk_SSL_COMP_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SSL_COMP_value) #pragma redefine_extname sk_SSL_COMP_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_SSL_COMP_zero) #pragma redefine_extname sk_TRUST_TOKEN_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_TRUST_TOKEN_call_cmp_func) @@ -6713,6 +6733,7 @@ #pragma redefine_extname sk_TRUST_TOKEN_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_TRUST_TOKEN_set_cmp_func) #pragma redefine_extname sk_TRUST_TOKEN_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_TRUST_TOKEN_shift) #pragma redefine_extname sk_TRUST_TOKEN_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_TRUST_TOKEN_sort) +#pragma redefine_extname sk_TRUST_TOKEN_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_TRUST_TOKEN_sort_and_dedup) #pragma redefine_extname sk_TRUST_TOKEN_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_TRUST_TOKEN_value) #pragma redefine_extname sk_TRUST_TOKEN_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_TRUST_TOKEN_zero) #pragma redefine_extname sk_X509_ALGOR_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_ALGOR_call_cmp_func) @@ -6738,6 +6759,7 @@ #pragma redefine_extname sk_X509_ALGOR_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_ALGOR_set_cmp_func) #pragma redefine_extname sk_X509_ALGOR_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_ALGOR_shift) #pragma redefine_extname sk_X509_ALGOR_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_ALGOR_sort) +#pragma redefine_extname sk_X509_ALGOR_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_ALGOR_sort_and_dedup) #pragma redefine_extname sk_X509_ALGOR_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_ALGOR_value) #pragma redefine_extname sk_X509_ALGOR_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_ALGOR_zero) #pragma redefine_extname sk_X509_ATTRIBUTE_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_ATTRIBUTE_call_cmp_func) @@ -6763,6 +6785,7 @@ #pragma redefine_extname sk_X509_ATTRIBUTE_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_ATTRIBUTE_set_cmp_func) #pragma redefine_extname sk_X509_ATTRIBUTE_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_ATTRIBUTE_shift) #pragma redefine_extname sk_X509_ATTRIBUTE_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_ATTRIBUTE_sort) +#pragma redefine_extname sk_X509_ATTRIBUTE_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_ATTRIBUTE_sort_and_dedup) #pragma redefine_extname sk_X509_ATTRIBUTE_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_ATTRIBUTE_value) #pragma redefine_extname sk_X509_ATTRIBUTE_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_ATTRIBUTE_zero) #pragma redefine_extname sk_X509_CRL_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_CRL_call_cmp_func) @@ -6788,6 +6811,7 @@ #pragma redefine_extname sk_X509_CRL_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_CRL_set_cmp_func) #pragma redefine_extname sk_X509_CRL_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_CRL_shift) #pragma redefine_extname sk_X509_CRL_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_CRL_sort) +#pragma redefine_extname sk_X509_CRL_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_CRL_sort_and_dedup) #pragma redefine_extname sk_X509_CRL_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_CRL_value) #pragma redefine_extname sk_X509_CRL_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_CRL_zero) #pragma redefine_extname sk_X509_EXTENSION_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_EXTENSION_call_cmp_func) @@ -6813,6 +6837,7 @@ #pragma redefine_extname sk_X509_EXTENSION_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_EXTENSION_set_cmp_func) #pragma redefine_extname sk_X509_EXTENSION_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_EXTENSION_shift) #pragma redefine_extname sk_X509_EXTENSION_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_EXTENSION_sort) +#pragma redefine_extname sk_X509_EXTENSION_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_EXTENSION_sort_and_dedup) #pragma redefine_extname sk_X509_EXTENSION_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_EXTENSION_value) #pragma redefine_extname sk_X509_EXTENSION_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_EXTENSION_zero) #pragma redefine_extname sk_X509_INFO_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_INFO_call_cmp_func) @@ -6838,6 +6863,7 @@ #pragma redefine_extname sk_X509_INFO_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_INFO_set_cmp_func) #pragma redefine_extname sk_X509_INFO_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_INFO_shift) #pragma redefine_extname sk_X509_INFO_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_INFO_sort) +#pragma redefine_extname sk_X509_INFO_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_INFO_sort_and_dedup) #pragma redefine_extname sk_X509_INFO_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_INFO_value) #pragma redefine_extname sk_X509_INFO_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_INFO_zero) #pragma redefine_extname sk_X509_NAME_ENTRY_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_NAME_ENTRY_call_cmp_func) @@ -6863,6 +6889,7 @@ #pragma redefine_extname sk_X509_NAME_ENTRY_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_NAME_ENTRY_set_cmp_func) #pragma redefine_extname sk_X509_NAME_ENTRY_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_NAME_ENTRY_shift) #pragma redefine_extname sk_X509_NAME_ENTRY_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_NAME_ENTRY_sort) +#pragma redefine_extname sk_X509_NAME_ENTRY_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_NAME_ENTRY_sort_and_dedup) #pragma redefine_extname sk_X509_NAME_ENTRY_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_NAME_ENTRY_value) #pragma redefine_extname sk_X509_NAME_ENTRY_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_NAME_ENTRY_zero) #pragma redefine_extname sk_X509_NAME_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_NAME_call_cmp_func) @@ -6888,6 +6915,7 @@ #pragma redefine_extname sk_X509_NAME_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_NAME_set_cmp_func) #pragma redefine_extname sk_X509_NAME_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_NAME_shift) #pragma redefine_extname sk_X509_NAME_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_NAME_sort) +#pragma redefine_extname sk_X509_NAME_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_NAME_sort_and_dedup) #pragma redefine_extname sk_X509_NAME_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_NAME_value) #pragma redefine_extname sk_X509_NAME_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_NAME_zero) #pragma redefine_extname sk_X509_OBJECT_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_OBJECT_call_cmp_func) @@ -6913,6 +6941,7 @@ #pragma redefine_extname sk_X509_OBJECT_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_OBJECT_set_cmp_func) #pragma redefine_extname sk_X509_OBJECT_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_OBJECT_shift) #pragma redefine_extname sk_X509_OBJECT_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_OBJECT_sort) +#pragma redefine_extname sk_X509_OBJECT_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_OBJECT_sort_and_dedup) #pragma redefine_extname sk_X509_OBJECT_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_OBJECT_value) #pragma redefine_extname sk_X509_OBJECT_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_OBJECT_zero) #pragma redefine_extname sk_X509_REVOKED_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_REVOKED_call_cmp_func) @@ -6938,6 +6967,7 @@ #pragma redefine_extname sk_X509_REVOKED_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_REVOKED_set_cmp_func) #pragma redefine_extname sk_X509_REVOKED_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_REVOKED_shift) #pragma redefine_extname sk_X509_REVOKED_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_REVOKED_sort) +#pragma redefine_extname sk_X509_REVOKED_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_REVOKED_sort_and_dedup) #pragma redefine_extname sk_X509_REVOKED_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_REVOKED_value) #pragma redefine_extname sk_X509_REVOKED_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_REVOKED_zero) #pragma redefine_extname sk_X509_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_call_cmp_func) @@ -6963,6 +6993,7 @@ #pragma redefine_extname sk_X509_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_set_cmp_func) #pragma redefine_extname sk_X509_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_shift) #pragma redefine_extname sk_X509_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_sort) +#pragma redefine_extname sk_X509_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_sort_and_dedup) #pragma redefine_extname sk_X509_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_value) #pragma redefine_extname sk_X509_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_X509_zero) #pragma redefine_extname sk_void_call_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_void_call_cmp_func) @@ -6988,6 +7019,7 @@ #pragma redefine_extname sk_void_set_cmp_func BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_void_set_cmp_func) #pragma redefine_extname sk_void_shift BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_void_shift) #pragma redefine_extname sk_void_sort BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_void_sort) +#pragma redefine_extname sk_void_sort_and_dedup BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_void_sort_and_dedup) #pragma redefine_extname sk_void_value BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_void_value) #pragma redefine_extname sk_void_zero BORINGSSL_ADD_USER_LABEL_AND_PREFIX(sk_void_zero) @@ -7023,6 +7055,7 @@ #define sk_ACCESS_DESCRIPTION_set_cmp_func BORINGSSL_ADD_PREFIX(sk_ACCESS_DESCRIPTION_set_cmp_func) #define sk_ACCESS_DESCRIPTION_shift BORINGSSL_ADD_PREFIX(sk_ACCESS_DESCRIPTION_shift) #define sk_ACCESS_DESCRIPTION_sort BORINGSSL_ADD_PREFIX(sk_ACCESS_DESCRIPTION_sort) +#define sk_ACCESS_DESCRIPTION_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_ACCESS_DESCRIPTION_sort_and_dedup) #define sk_ACCESS_DESCRIPTION_value BORINGSSL_ADD_PREFIX(sk_ACCESS_DESCRIPTION_value) #define sk_ACCESS_DESCRIPTION_zero BORINGSSL_ADD_PREFIX(sk_ACCESS_DESCRIPTION_zero) #define sk_ASN1_INTEGER_call_cmp_func BORINGSSL_ADD_PREFIX(sk_ASN1_INTEGER_call_cmp_func) @@ -7048,6 +7081,7 @@ #define sk_ASN1_INTEGER_set_cmp_func BORINGSSL_ADD_PREFIX(sk_ASN1_INTEGER_set_cmp_func) #define sk_ASN1_INTEGER_shift BORINGSSL_ADD_PREFIX(sk_ASN1_INTEGER_shift) #define sk_ASN1_INTEGER_sort BORINGSSL_ADD_PREFIX(sk_ASN1_INTEGER_sort) +#define sk_ASN1_INTEGER_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_ASN1_INTEGER_sort_and_dedup) #define sk_ASN1_INTEGER_value BORINGSSL_ADD_PREFIX(sk_ASN1_INTEGER_value) #define sk_ASN1_INTEGER_zero BORINGSSL_ADD_PREFIX(sk_ASN1_INTEGER_zero) #define sk_ASN1_OBJECT_call_cmp_func BORINGSSL_ADD_PREFIX(sk_ASN1_OBJECT_call_cmp_func) @@ -7073,6 +7107,7 @@ #define sk_ASN1_OBJECT_set_cmp_func BORINGSSL_ADD_PREFIX(sk_ASN1_OBJECT_set_cmp_func) #define sk_ASN1_OBJECT_shift BORINGSSL_ADD_PREFIX(sk_ASN1_OBJECT_shift) #define sk_ASN1_OBJECT_sort BORINGSSL_ADD_PREFIX(sk_ASN1_OBJECT_sort) +#define sk_ASN1_OBJECT_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_ASN1_OBJECT_sort_and_dedup) #define sk_ASN1_OBJECT_value BORINGSSL_ADD_PREFIX(sk_ASN1_OBJECT_value) #define sk_ASN1_OBJECT_zero BORINGSSL_ADD_PREFIX(sk_ASN1_OBJECT_zero) #define sk_ASN1_TYPE_call_cmp_func BORINGSSL_ADD_PREFIX(sk_ASN1_TYPE_call_cmp_func) @@ -7098,6 +7133,7 @@ #define sk_ASN1_TYPE_set_cmp_func BORINGSSL_ADD_PREFIX(sk_ASN1_TYPE_set_cmp_func) #define sk_ASN1_TYPE_shift BORINGSSL_ADD_PREFIX(sk_ASN1_TYPE_shift) #define sk_ASN1_TYPE_sort BORINGSSL_ADD_PREFIX(sk_ASN1_TYPE_sort) +#define sk_ASN1_TYPE_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_ASN1_TYPE_sort_and_dedup) #define sk_ASN1_TYPE_value BORINGSSL_ADD_PREFIX(sk_ASN1_TYPE_value) #define sk_ASN1_TYPE_zero BORINGSSL_ADD_PREFIX(sk_ASN1_TYPE_zero) #define sk_ASN1_VALUE_call_cmp_func BORINGSSL_ADD_PREFIX(sk_ASN1_VALUE_call_cmp_func) @@ -7123,6 +7159,7 @@ #define sk_ASN1_VALUE_set_cmp_func BORINGSSL_ADD_PREFIX(sk_ASN1_VALUE_set_cmp_func) #define sk_ASN1_VALUE_shift BORINGSSL_ADD_PREFIX(sk_ASN1_VALUE_shift) #define sk_ASN1_VALUE_sort BORINGSSL_ADD_PREFIX(sk_ASN1_VALUE_sort) +#define sk_ASN1_VALUE_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_ASN1_VALUE_sort_and_dedup) #define sk_ASN1_VALUE_value BORINGSSL_ADD_PREFIX(sk_ASN1_VALUE_value) #define sk_ASN1_VALUE_zero BORINGSSL_ADD_PREFIX(sk_ASN1_VALUE_zero) #define sk_BIO_call_cmp_func BORINGSSL_ADD_PREFIX(sk_BIO_call_cmp_func) @@ -7148,6 +7185,7 @@ #define sk_BIO_set_cmp_func BORINGSSL_ADD_PREFIX(sk_BIO_set_cmp_func) #define sk_BIO_shift BORINGSSL_ADD_PREFIX(sk_BIO_shift) #define sk_BIO_sort BORINGSSL_ADD_PREFIX(sk_BIO_sort) +#define sk_BIO_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_BIO_sort_and_dedup) #define sk_BIO_value BORINGSSL_ADD_PREFIX(sk_BIO_value) #define sk_BIO_zero BORINGSSL_ADD_PREFIX(sk_BIO_zero) #define sk_CONF_VALUE_call_cmp_func BORINGSSL_ADD_PREFIX(sk_CONF_VALUE_call_cmp_func) @@ -7173,6 +7211,7 @@ #define sk_CONF_VALUE_set_cmp_func BORINGSSL_ADD_PREFIX(sk_CONF_VALUE_set_cmp_func) #define sk_CONF_VALUE_shift BORINGSSL_ADD_PREFIX(sk_CONF_VALUE_shift) #define sk_CONF_VALUE_sort BORINGSSL_ADD_PREFIX(sk_CONF_VALUE_sort) +#define sk_CONF_VALUE_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_CONF_VALUE_sort_and_dedup) #define sk_CONF_VALUE_value BORINGSSL_ADD_PREFIX(sk_CONF_VALUE_value) #define sk_CONF_VALUE_zero BORINGSSL_ADD_PREFIX(sk_CONF_VALUE_zero) #define sk_CRYPTO_BUFFER_call_cmp_func BORINGSSL_ADD_PREFIX(sk_CRYPTO_BUFFER_call_cmp_func) @@ -7198,6 +7237,7 @@ #define sk_CRYPTO_BUFFER_set_cmp_func BORINGSSL_ADD_PREFIX(sk_CRYPTO_BUFFER_set_cmp_func) #define sk_CRYPTO_BUFFER_shift BORINGSSL_ADD_PREFIX(sk_CRYPTO_BUFFER_shift) #define sk_CRYPTO_BUFFER_sort BORINGSSL_ADD_PREFIX(sk_CRYPTO_BUFFER_sort) +#define sk_CRYPTO_BUFFER_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_CRYPTO_BUFFER_sort_and_dedup) #define sk_CRYPTO_BUFFER_value BORINGSSL_ADD_PREFIX(sk_CRYPTO_BUFFER_value) #define sk_CRYPTO_BUFFER_zero BORINGSSL_ADD_PREFIX(sk_CRYPTO_BUFFER_zero) #define sk_DIST_POINT_call_cmp_func BORINGSSL_ADD_PREFIX(sk_DIST_POINT_call_cmp_func) @@ -7223,6 +7263,7 @@ #define sk_DIST_POINT_set_cmp_func BORINGSSL_ADD_PREFIX(sk_DIST_POINT_set_cmp_func) #define sk_DIST_POINT_shift BORINGSSL_ADD_PREFIX(sk_DIST_POINT_shift) #define sk_DIST_POINT_sort BORINGSSL_ADD_PREFIX(sk_DIST_POINT_sort) +#define sk_DIST_POINT_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_DIST_POINT_sort_and_dedup) #define sk_DIST_POINT_value BORINGSSL_ADD_PREFIX(sk_DIST_POINT_value) #define sk_DIST_POINT_zero BORINGSSL_ADD_PREFIX(sk_DIST_POINT_zero) #define sk_GENERAL_NAME_call_cmp_func BORINGSSL_ADD_PREFIX(sk_GENERAL_NAME_call_cmp_func) @@ -7248,6 +7289,7 @@ #define sk_GENERAL_NAME_set_cmp_func BORINGSSL_ADD_PREFIX(sk_GENERAL_NAME_set_cmp_func) #define sk_GENERAL_NAME_shift BORINGSSL_ADD_PREFIX(sk_GENERAL_NAME_shift) #define sk_GENERAL_NAME_sort BORINGSSL_ADD_PREFIX(sk_GENERAL_NAME_sort) +#define sk_GENERAL_NAME_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_GENERAL_NAME_sort_and_dedup) #define sk_GENERAL_NAME_value BORINGSSL_ADD_PREFIX(sk_GENERAL_NAME_value) #define sk_GENERAL_NAME_zero BORINGSSL_ADD_PREFIX(sk_GENERAL_NAME_zero) #define sk_GENERAL_SUBTREE_call_cmp_func BORINGSSL_ADD_PREFIX(sk_GENERAL_SUBTREE_call_cmp_func) @@ -7273,6 +7315,7 @@ #define sk_GENERAL_SUBTREE_set_cmp_func BORINGSSL_ADD_PREFIX(sk_GENERAL_SUBTREE_set_cmp_func) #define sk_GENERAL_SUBTREE_shift BORINGSSL_ADD_PREFIX(sk_GENERAL_SUBTREE_shift) #define sk_GENERAL_SUBTREE_sort BORINGSSL_ADD_PREFIX(sk_GENERAL_SUBTREE_sort) +#define sk_GENERAL_SUBTREE_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_GENERAL_SUBTREE_sort_and_dedup) #define sk_GENERAL_SUBTREE_value BORINGSSL_ADD_PREFIX(sk_GENERAL_SUBTREE_value) #define sk_GENERAL_SUBTREE_zero BORINGSSL_ADD_PREFIX(sk_GENERAL_SUBTREE_zero) #define sk_OPENSSL_STRING_call_cmp_func BORINGSSL_ADD_PREFIX(sk_OPENSSL_STRING_call_cmp_func) @@ -7298,6 +7341,7 @@ #define sk_OPENSSL_STRING_set_cmp_func BORINGSSL_ADD_PREFIX(sk_OPENSSL_STRING_set_cmp_func) #define sk_OPENSSL_STRING_shift BORINGSSL_ADD_PREFIX(sk_OPENSSL_STRING_shift) #define sk_OPENSSL_STRING_sort BORINGSSL_ADD_PREFIX(sk_OPENSSL_STRING_sort) +#define sk_OPENSSL_STRING_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_OPENSSL_STRING_sort_and_dedup) #define sk_OPENSSL_STRING_value BORINGSSL_ADD_PREFIX(sk_OPENSSL_STRING_value) #define sk_OPENSSL_STRING_zero BORINGSSL_ADD_PREFIX(sk_OPENSSL_STRING_zero) #define sk_POLICYINFO_call_cmp_func BORINGSSL_ADD_PREFIX(sk_POLICYINFO_call_cmp_func) @@ -7323,6 +7367,7 @@ #define sk_POLICYINFO_set_cmp_func BORINGSSL_ADD_PREFIX(sk_POLICYINFO_set_cmp_func) #define sk_POLICYINFO_shift BORINGSSL_ADD_PREFIX(sk_POLICYINFO_shift) #define sk_POLICYINFO_sort BORINGSSL_ADD_PREFIX(sk_POLICYINFO_sort) +#define sk_POLICYINFO_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_POLICYINFO_sort_and_dedup) #define sk_POLICYINFO_value BORINGSSL_ADD_PREFIX(sk_POLICYINFO_value) #define sk_POLICYINFO_zero BORINGSSL_ADD_PREFIX(sk_POLICYINFO_zero) #define sk_POLICYQUALINFO_call_cmp_func BORINGSSL_ADD_PREFIX(sk_POLICYQUALINFO_call_cmp_func) @@ -7348,6 +7393,7 @@ #define sk_POLICYQUALINFO_set_cmp_func BORINGSSL_ADD_PREFIX(sk_POLICYQUALINFO_set_cmp_func) #define sk_POLICYQUALINFO_shift BORINGSSL_ADD_PREFIX(sk_POLICYQUALINFO_shift) #define sk_POLICYQUALINFO_sort BORINGSSL_ADD_PREFIX(sk_POLICYQUALINFO_sort) +#define sk_POLICYQUALINFO_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_POLICYQUALINFO_sort_and_dedup) #define sk_POLICYQUALINFO_value BORINGSSL_ADD_PREFIX(sk_POLICYQUALINFO_value) #define sk_POLICYQUALINFO_zero BORINGSSL_ADD_PREFIX(sk_POLICYQUALINFO_zero) #define sk_POLICY_MAPPING_call_cmp_func BORINGSSL_ADD_PREFIX(sk_POLICY_MAPPING_call_cmp_func) @@ -7373,6 +7419,7 @@ #define sk_POLICY_MAPPING_set_cmp_func BORINGSSL_ADD_PREFIX(sk_POLICY_MAPPING_set_cmp_func) #define sk_POLICY_MAPPING_shift BORINGSSL_ADD_PREFIX(sk_POLICY_MAPPING_shift) #define sk_POLICY_MAPPING_sort BORINGSSL_ADD_PREFIX(sk_POLICY_MAPPING_sort) +#define sk_POLICY_MAPPING_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_POLICY_MAPPING_sort_and_dedup) #define sk_POLICY_MAPPING_value BORINGSSL_ADD_PREFIX(sk_POLICY_MAPPING_value) #define sk_POLICY_MAPPING_zero BORINGSSL_ADD_PREFIX(sk_POLICY_MAPPING_zero) #define sk_SRTP_PROTECTION_PROFILE_call_cmp_func BORINGSSL_ADD_PREFIX(sk_SRTP_PROTECTION_PROFILE_call_cmp_func) @@ -7398,6 +7445,7 @@ #define sk_SRTP_PROTECTION_PROFILE_set_cmp_func BORINGSSL_ADD_PREFIX(sk_SRTP_PROTECTION_PROFILE_set_cmp_func) #define sk_SRTP_PROTECTION_PROFILE_shift BORINGSSL_ADD_PREFIX(sk_SRTP_PROTECTION_PROFILE_shift) #define sk_SRTP_PROTECTION_PROFILE_sort BORINGSSL_ADD_PREFIX(sk_SRTP_PROTECTION_PROFILE_sort) +#define sk_SRTP_PROTECTION_PROFILE_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_SRTP_PROTECTION_PROFILE_sort_and_dedup) #define sk_SRTP_PROTECTION_PROFILE_value BORINGSSL_ADD_PREFIX(sk_SRTP_PROTECTION_PROFILE_value) #define sk_SRTP_PROTECTION_PROFILE_zero BORINGSSL_ADD_PREFIX(sk_SRTP_PROTECTION_PROFILE_zero) #define sk_SSL_CIPHER_call_cmp_func BORINGSSL_ADD_PREFIX(sk_SSL_CIPHER_call_cmp_func) @@ -7423,6 +7471,7 @@ #define sk_SSL_CIPHER_set_cmp_func BORINGSSL_ADD_PREFIX(sk_SSL_CIPHER_set_cmp_func) #define sk_SSL_CIPHER_shift BORINGSSL_ADD_PREFIX(sk_SSL_CIPHER_shift) #define sk_SSL_CIPHER_sort BORINGSSL_ADD_PREFIX(sk_SSL_CIPHER_sort) +#define sk_SSL_CIPHER_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_SSL_CIPHER_sort_and_dedup) #define sk_SSL_CIPHER_value BORINGSSL_ADD_PREFIX(sk_SSL_CIPHER_value) #define sk_SSL_CIPHER_zero BORINGSSL_ADD_PREFIX(sk_SSL_CIPHER_zero) #define sk_SSL_COMP_call_cmp_func BORINGSSL_ADD_PREFIX(sk_SSL_COMP_call_cmp_func) @@ -7448,6 +7497,7 @@ #define sk_SSL_COMP_set_cmp_func BORINGSSL_ADD_PREFIX(sk_SSL_COMP_set_cmp_func) #define sk_SSL_COMP_shift BORINGSSL_ADD_PREFIX(sk_SSL_COMP_shift) #define sk_SSL_COMP_sort BORINGSSL_ADD_PREFIX(sk_SSL_COMP_sort) +#define sk_SSL_COMP_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_SSL_COMP_sort_and_dedup) #define sk_SSL_COMP_value BORINGSSL_ADD_PREFIX(sk_SSL_COMP_value) #define sk_SSL_COMP_zero BORINGSSL_ADD_PREFIX(sk_SSL_COMP_zero) #define sk_TRUST_TOKEN_call_cmp_func BORINGSSL_ADD_PREFIX(sk_TRUST_TOKEN_call_cmp_func) @@ -7473,6 +7523,7 @@ #define sk_TRUST_TOKEN_set_cmp_func BORINGSSL_ADD_PREFIX(sk_TRUST_TOKEN_set_cmp_func) #define sk_TRUST_TOKEN_shift BORINGSSL_ADD_PREFIX(sk_TRUST_TOKEN_shift) #define sk_TRUST_TOKEN_sort BORINGSSL_ADD_PREFIX(sk_TRUST_TOKEN_sort) +#define sk_TRUST_TOKEN_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_TRUST_TOKEN_sort_and_dedup) #define sk_TRUST_TOKEN_value BORINGSSL_ADD_PREFIX(sk_TRUST_TOKEN_value) #define sk_TRUST_TOKEN_zero BORINGSSL_ADD_PREFIX(sk_TRUST_TOKEN_zero) #define sk_X509_ALGOR_call_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_ALGOR_call_cmp_func) @@ -7498,6 +7549,7 @@ #define sk_X509_ALGOR_set_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_ALGOR_set_cmp_func) #define sk_X509_ALGOR_shift BORINGSSL_ADD_PREFIX(sk_X509_ALGOR_shift) #define sk_X509_ALGOR_sort BORINGSSL_ADD_PREFIX(sk_X509_ALGOR_sort) +#define sk_X509_ALGOR_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_X509_ALGOR_sort_and_dedup) #define sk_X509_ALGOR_value BORINGSSL_ADD_PREFIX(sk_X509_ALGOR_value) #define sk_X509_ALGOR_zero BORINGSSL_ADD_PREFIX(sk_X509_ALGOR_zero) #define sk_X509_ATTRIBUTE_call_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_ATTRIBUTE_call_cmp_func) @@ -7523,6 +7575,7 @@ #define sk_X509_ATTRIBUTE_set_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_ATTRIBUTE_set_cmp_func) #define sk_X509_ATTRIBUTE_shift BORINGSSL_ADD_PREFIX(sk_X509_ATTRIBUTE_shift) #define sk_X509_ATTRIBUTE_sort BORINGSSL_ADD_PREFIX(sk_X509_ATTRIBUTE_sort) +#define sk_X509_ATTRIBUTE_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_X509_ATTRIBUTE_sort_and_dedup) #define sk_X509_ATTRIBUTE_value BORINGSSL_ADD_PREFIX(sk_X509_ATTRIBUTE_value) #define sk_X509_ATTRIBUTE_zero BORINGSSL_ADD_PREFIX(sk_X509_ATTRIBUTE_zero) #define sk_X509_CRL_call_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_CRL_call_cmp_func) @@ -7548,6 +7601,7 @@ #define sk_X509_CRL_set_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_CRL_set_cmp_func) #define sk_X509_CRL_shift BORINGSSL_ADD_PREFIX(sk_X509_CRL_shift) #define sk_X509_CRL_sort BORINGSSL_ADD_PREFIX(sk_X509_CRL_sort) +#define sk_X509_CRL_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_X509_CRL_sort_and_dedup) #define sk_X509_CRL_value BORINGSSL_ADD_PREFIX(sk_X509_CRL_value) #define sk_X509_CRL_zero BORINGSSL_ADD_PREFIX(sk_X509_CRL_zero) #define sk_X509_EXTENSION_call_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_EXTENSION_call_cmp_func) @@ -7573,6 +7627,7 @@ #define sk_X509_EXTENSION_set_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_EXTENSION_set_cmp_func) #define sk_X509_EXTENSION_shift BORINGSSL_ADD_PREFIX(sk_X509_EXTENSION_shift) #define sk_X509_EXTENSION_sort BORINGSSL_ADD_PREFIX(sk_X509_EXTENSION_sort) +#define sk_X509_EXTENSION_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_X509_EXTENSION_sort_and_dedup) #define sk_X509_EXTENSION_value BORINGSSL_ADD_PREFIX(sk_X509_EXTENSION_value) #define sk_X509_EXTENSION_zero BORINGSSL_ADD_PREFIX(sk_X509_EXTENSION_zero) #define sk_X509_INFO_call_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_INFO_call_cmp_func) @@ -7598,6 +7653,7 @@ #define sk_X509_INFO_set_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_INFO_set_cmp_func) #define sk_X509_INFO_shift BORINGSSL_ADD_PREFIX(sk_X509_INFO_shift) #define sk_X509_INFO_sort BORINGSSL_ADD_PREFIX(sk_X509_INFO_sort) +#define sk_X509_INFO_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_X509_INFO_sort_and_dedup) #define sk_X509_INFO_value BORINGSSL_ADD_PREFIX(sk_X509_INFO_value) #define sk_X509_INFO_zero BORINGSSL_ADD_PREFIX(sk_X509_INFO_zero) #define sk_X509_NAME_ENTRY_call_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_NAME_ENTRY_call_cmp_func) @@ -7623,6 +7679,7 @@ #define sk_X509_NAME_ENTRY_set_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_NAME_ENTRY_set_cmp_func) #define sk_X509_NAME_ENTRY_shift BORINGSSL_ADD_PREFIX(sk_X509_NAME_ENTRY_shift) #define sk_X509_NAME_ENTRY_sort BORINGSSL_ADD_PREFIX(sk_X509_NAME_ENTRY_sort) +#define sk_X509_NAME_ENTRY_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_X509_NAME_ENTRY_sort_and_dedup) #define sk_X509_NAME_ENTRY_value BORINGSSL_ADD_PREFIX(sk_X509_NAME_ENTRY_value) #define sk_X509_NAME_ENTRY_zero BORINGSSL_ADD_PREFIX(sk_X509_NAME_ENTRY_zero) #define sk_X509_NAME_call_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_NAME_call_cmp_func) @@ -7648,6 +7705,7 @@ #define sk_X509_NAME_set_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_NAME_set_cmp_func) #define sk_X509_NAME_shift BORINGSSL_ADD_PREFIX(sk_X509_NAME_shift) #define sk_X509_NAME_sort BORINGSSL_ADD_PREFIX(sk_X509_NAME_sort) +#define sk_X509_NAME_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_X509_NAME_sort_and_dedup) #define sk_X509_NAME_value BORINGSSL_ADD_PREFIX(sk_X509_NAME_value) #define sk_X509_NAME_zero BORINGSSL_ADD_PREFIX(sk_X509_NAME_zero) #define sk_X509_OBJECT_call_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_OBJECT_call_cmp_func) @@ -7673,6 +7731,7 @@ #define sk_X509_OBJECT_set_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_OBJECT_set_cmp_func) #define sk_X509_OBJECT_shift BORINGSSL_ADD_PREFIX(sk_X509_OBJECT_shift) #define sk_X509_OBJECT_sort BORINGSSL_ADD_PREFIX(sk_X509_OBJECT_sort) +#define sk_X509_OBJECT_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_X509_OBJECT_sort_and_dedup) #define sk_X509_OBJECT_value BORINGSSL_ADD_PREFIX(sk_X509_OBJECT_value) #define sk_X509_OBJECT_zero BORINGSSL_ADD_PREFIX(sk_X509_OBJECT_zero) #define sk_X509_REVOKED_call_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_REVOKED_call_cmp_func) @@ -7698,6 +7757,7 @@ #define sk_X509_REVOKED_set_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_REVOKED_set_cmp_func) #define sk_X509_REVOKED_shift BORINGSSL_ADD_PREFIX(sk_X509_REVOKED_shift) #define sk_X509_REVOKED_sort BORINGSSL_ADD_PREFIX(sk_X509_REVOKED_sort) +#define sk_X509_REVOKED_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_X509_REVOKED_sort_and_dedup) #define sk_X509_REVOKED_value BORINGSSL_ADD_PREFIX(sk_X509_REVOKED_value) #define sk_X509_REVOKED_zero BORINGSSL_ADD_PREFIX(sk_X509_REVOKED_zero) #define sk_X509_call_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_call_cmp_func) @@ -7723,6 +7783,7 @@ #define sk_X509_set_cmp_func BORINGSSL_ADD_PREFIX(sk_X509_set_cmp_func) #define sk_X509_shift BORINGSSL_ADD_PREFIX(sk_X509_shift) #define sk_X509_sort BORINGSSL_ADD_PREFIX(sk_X509_sort) +#define sk_X509_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_X509_sort_and_dedup) #define sk_X509_value BORINGSSL_ADD_PREFIX(sk_X509_value) #define sk_X509_zero BORINGSSL_ADD_PREFIX(sk_X509_zero) #define sk_void_call_cmp_func BORINGSSL_ADD_PREFIX(sk_void_call_cmp_func) @@ -7748,6 +7809,7 @@ #define sk_void_set_cmp_func BORINGSSL_ADD_PREFIX(sk_void_set_cmp_func) #define sk_void_shift BORINGSSL_ADD_PREFIX(sk_void_shift) #define sk_void_sort BORINGSSL_ADD_PREFIX(sk_void_sort) +#define sk_void_sort_and_dedup BORINGSSL_ADD_PREFIX(sk_void_sort_and_dedup) #define sk_void_value BORINGSSL_ADD_PREFIX(sk_void_value) #define sk_void_zero BORINGSSL_ADD_PREFIX(sk_void_zero)
diff --git a/include/openssl/stack.h b/include/openssl/stack.h index 8fd26fa..3bda503 100644 --- a/include/openssl/stack.h +++ b/include/openssl/stack.h
@@ -204,6 +204,12 @@ // elements that are equivalent under the comparison function. void sk_SAMPLE_sort(STACK_OF(SAMPLE) *sk); +// sk_SAMPLE_sort_and_dedup sorts the elements of |sk| based on the comparison +// function and removes duplicates. If |free_func| is not NULL, it is called on +// every removed element. +void sk_SAMPLE_sort_and_dedup(STACK_OF(SAMPLE) *sk, + sk_SAMPLE_free_func free_func); + // sk_SAMPLE_is_sorted returns one if |sk| is known to be sorted and zero // otherwise. int sk_SAMPLE_is_sorted(const STACK_OF(SAMPLE) *sk); @@ -297,6 +303,9 @@ OPENSSL_EXPORT OPENSSL_STACK *OPENSSL_sk_dup(const OPENSSL_STACK *sk); OPENSSL_EXPORT void OPENSSL_sk_sort(OPENSSL_STACK *sk, OPENSSL_sk_call_cmp_func call_cmp_func); +OPENSSL_EXPORT void OPENSSL_sk_sort_and_dedup( + OPENSSL_STACK *sk, OPENSSL_sk_call_cmp_func call_cmp_func, + OPENSSL_sk_call_free_func call_free_func, OPENSSL_sk_free_func free_func); OPENSSL_EXPORT int OPENSSL_sk_is_sorted(const OPENSSL_STACK *sk); OPENSSL_EXPORT OPENSSL_sk_cmp_func OPENSSL_sk_set_cmp_func(OPENSSL_STACK *sk, OPENSSL_sk_cmp_func comp); @@ -504,6 +513,13 @@ OPENSSL_sk_sort((OPENSSL_STACK *)sk, sk_##name##_call_cmp_func); \ } \ \ + OPENSSL_INLINE void sk_##name##_sort_and_dedup( \ + STACK_OF(name) *sk, sk_##name##_free_func free_func) { \ + OPENSSL_sk_sort_and_dedup((OPENSSL_STACK *)sk, sk_##name##_call_cmp_func, \ + sk_##name##_call_free_func, \ + (OPENSSL_sk_free_func)free_func); \ + } \ + \ OPENSSL_INLINE int sk_##name##_is_sorted(const STACK_OF(name) *sk) { \ return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk); \ } \