qemu/include/crypto
Daniel P. Berrangé 221db5daf6 qapi: enable use of g_autoptr with QAPI types
Currently QAPI generates a type and function for free'ing it:

  typedef struct QCryptoBlockCreateOptions QCryptoBlockCreateOptions;
  void qapi_free_QCryptoBlockCreateOptions(QCryptoBlockCreateOptions *obj);

This is used in the traditional manner:

  QCryptoBlockCreateOptions *opts = NULL;

  opts = g_new0(QCryptoBlockCreateOptions, 1);

  ....do stuff with opts...

  qapi_free_QCryptoBlockCreateOptions(opts);

Since bumping the min glib to 2.48, QEMU has incrementally adopted the
use of g_auto/g_autoptr. This allows the compiler to run a function to
free a variable when it goes out of scope, the benefit being the
compiler can guarantee it is freed in all possible code ptahs.

This benefit is applicable to QAPI types too, and given the seriously
long method names for some qapi_free_XXXX() functions, is much less
typing. This change thus makes the code generator emit:

 G_DEFINE_AUTOPTR_CLEANUP_FUNC(QCryptoBlockCreateOptions,
                              qapi_free_QCryptoBlockCreateOptions)

The above code example now becomes

  g_autoptr(QCryptoBlockCreateOptions) opts = NULL;

  opts = g_new0(QCryptoBlockCreateOptions, 1);

  ....do stuff with opts...

Note, if the local pointer needs to live beyond the scope holding the
variable, then g_steal_pointer can be used. This is useful to return the
pointer to the caller in the success codepath, while letting it be freed
in all error codepaths.

  return g_steal_pointer(&opts);

The crypto/block.h header needs updating to avoid symbol clash now that
the g_autoptr support is a standard QAPI feature.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Message-Id: <20200723153845.2934357-1-berrange@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2020-09-03 09:38:36 +02:00
..
aes.h crypto: aes: always rename internal symbols 2016-06-13 12:41:17 +01:00
afsplit.h Don't talk about the LGPL if the file is licensed under the GPL 2019-01-30 10:51:20 +01:00
block.h qapi: enable use of g_autoptr with QAPI types 2020-09-03 09:38:36 +02:00
cipher.h crypto: define cleanup functions for use with g_autoptr 2019-08-22 10:47:12 +01:00
desrfb.h Clean up header guards that don't match their file name 2016-07-12 16:19:16 +02:00
hash.h crypto: Fix LGPL information in the file headers 2019-07-19 14:21:25 +01:00
hmac.h crypto: define cleanup functions for use with g_autoptr 2019-08-22 10:47:12 +01:00
init.h crypto: Fix LGPL information in the file headers 2019-07-19 14:21:25 +01:00
ivgen.h crypto: define cleanup functions for use with g_autoptr 2019-08-22 10:47:12 +01:00
pbkdf.h crypto: Fix LGPL information in the file headers 2019-07-19 14:21:25 +01:00
random.h crypto: Fix LGPL information in the file headers 2019-07-19 14:21:25 +01:00
secret_common.h crypto/secret: move main logic from 'secret' to 'secret_common'. 2020-06-15 11:33:51 +01:00
secret_keyring.h crypto/linux_keyring: add 'secret_keyring' secret object. 2020-06-15 11:33:51 +01:00
secret.h crypto/secret: move main logic from 'secret' to 'secret_common'. 2020-06-15 11:33:51 +01:00
tls-cipher-suites.h crypto: Add tls-cipher-suites object 2020-07-03 18:16:01 +02:00
tlscreds.h crypto: Fix LGPL information in the file headers 2019-07-19 14:21:25 +01:00
tlscredsanon.h crypto: Fix LGPL information in the file headers 2019-07-19 14:21:25 +01:00
tlscredspsk.h crypto: Fix LGPL information in the file headers 2019-07-19 14:21:25 +01:00
tlscredsx509.h crypto: Fix LGPL information in the file headers 2019-07-19 14:21:25 +01:00
tlssession.h crypto: Fix typo in QCryptoTLSSession's <example> comment 2019-12-18 08:36:15 +01:00
xts.h crypto: Fix LGPL information in the file headers 2019-07-19 14:21:25 +01:00