=pod

=head1 NAME

ASN1_STRING_new, ASN1_STRING_type_new, ASN1_STRING_free -
ASN1_STRING allocation functions

=head1 SYNOPSIS

 ASN1_STRING * ASN1_STRING_new(void);
 ASN1_STRING * ASN1_STRING_type_new(int type);
 void ASN1_STRING_free(ASN1_STRING *a);

=head1 DESCRIPTION

ASN1_STRING_new() returns an allocated B<ASN1_STRING> structure. Its type
is undefined.

ASN1_STRING_type_new() returns an allocated B<ASN1_STRING> structure of
type B<type>.

ASN1_STRING_free() frees up B<a>.

=head1 NOTES

Other string types call the B<ASN1_STRING> functions. For example
ASN1_OCTET_STRING_new() calls ASN1_STRING_type(V_ASN1_OCTET_STRING).

=head1 RETURN VALUES

ASN1_STRING_new() and ASN1_STRING_type_new() return a valid
ASN1_STRING structure or B<NULL> if an error occurred.

ASN1_STRING_free() does not return a value.

=head1 SEE ALSO

L<ERR_get_error(3)|ERR_get_error(3)>

=head1 HISTORY

TBA

=cut
