More doc cleanup
[openssl.git] / doc / crypto / CRYPTO_get_ex_new_index.pod
index 1720a8f5f49011a468def61104b99acaed6eebe0..17110f76d24a4dcacb7f8f8be895458ff15293e1 100644 (file)
@@ -2,8 +2,9 @@
 
 =head1 NAME
 
+CRYPTO_EX_new, CRYPTO_EX_free, CRYPTO_EX_dup,
 CRYPTO_free_ex_index, CRYPTO_get_ex_new_index, CRYPTO_set_ex_data,
-CRYPTO_get_ex_data, CRYPTO_free_ex_data
+CRYPTO_get_ex_data, CRYPTO_free_ex_data, CRYPTO_new_ex_data
 - functions supporting application-specific data
 
 =head1 SYNOPSIS
@@ -12,9 +13,9 @@ CRYPTO_get_ex_data, CRYPTO_free_ex_data
 
  int CRYPTO_get_ex_new_index(int class_index,
                 long argl, void *argp,
-               CRYPTO_EX_new *new_func,
-               CRYPTO_EX_dup *dup_func,
-               CRYPTO_EX_free *free_func);
+                CRYPTO_EX_new *new_func,
+                CRYPTO_EX_dup *dup_func,
+                CRYPTO_EX_free *free_func);
 
  typedef int CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
                            int idx, long argl, void *argp);
@@ -23,6 +24,8 @@ CRYPTO_get_ex_data, CRYPTO_free_ex_data
  typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from,
                            void *from_d, int idx, long argl, void *argp);
 
+ int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad)
+
  int CRYPTO_set_ex_data(CRYPTO_EX_DATA *r, int idx, void *arg);
 
  void *CRYPTO_get_ex_data(CRYPTO_EX_DATA *r, int idx);
@@ -59,6 +62,10 @@ The API described here is used by OpenSSL to manipulate exdata for specific
 structures.  Since the application data can be anything at all it is passed
 and retrieved as a B<void *> type.
 
+The B<CRYPTO_EX_DATA> type is opaque.  To initialize the exdata part of
+a structure, call CRYPTO_new_ex_data(). This is only necessary for
+B<CRYPTO_EX_INDEX_APP> objects.
+
 Exdata types are identified by an B<index>, an integer guaranteed to be
 unique within structures for the lifetime of the program.  Applications
 using exdata typically call B<CRYPTO_get_ex_new_index> at startup, and
@@ -85,7 +92,7 @@ B<idx> parameter should be an already-created index value.
 When setting exdata, the pointer specified with a particular index is saved,
 and returned on a subsequent "get" call.  If the application is going to
 release the data, it must make sure to set a B<NULL> value at the index,
-to avoid likely double-free crash.
+to avoid likely double-free crashes.
 
 The function B<CRYPTO_free_ex_data> is used to free all exdata attached
 to a structure. The appropriate type-specific routine must be used.
@@ -124,9 +131,10 @@ for B<SSL> and B<SSL_SESSION> objects.  The B<to> and B<from> parameters
 are pointers to the destination and source B<CRYPTO_EX_DATA> structures,
 respectively.  The B<srcp> parameter is a pointer to the source exdata.
 When the dup_func() returns, the value in B<srcp> is copied to the
-destination ex_data.  If the pointer contained in B<srcp> is not modified,
-then both B<to> and B<from> will point to the same data.  The B<idx>,
-B<argl> and B<argp> parameters are as described for the other two callbacks.
+destination ex_data.  If the pointer contained in B<srcp> is not modified
+by the dup_func(), then both B<to> and B<from> will point to the same data.
+The B<idx>, B<argl> and B<argp> parameters are as described for the other
+two callbacks.
 
 =head1 RETURN VALUES
 
@@ -141,4 +149,13 @@ note that NULL may be a valid value.
 
 dup_func() should return 0 for failure and 1 for success.
 
+=head1 COPYRIGHT
+
+Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
+
+Licensed under the OpenSSL license (the "License").  You may not use
+this file except in compliance with the License.  You can obtain a copy
+in the file LICENSE in the source distribution or at
+L<https://www.openssl.org/source/license.html>.
+
 =cut