From: "Daniel P. Berrangé" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Paolo Bonzini" <pbonzini@redhat.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Eduardo Habkost" <ehabkost@redhat.com>
Subject: [PATCH 3/4] crypto: use QOM macros for declaration/definition of secret types
Date: Thu, 23 Jul 2020 19:14:09 +0100 [thread overview]
Message-ID: <20200723181410.3145233-4-berrange@redhat.com> (raw)
In-Reply-To: <20200723181410.3145233-1-berrange@redhat.com>
This introduces the use of the OBJECT_DEFINE and OBJECT_DECLARE macro
families in the secret types, in order to eliminate boilerplate code.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
crypto/secret.c | 24 ++++--------------------
crypto/secret_common.c | 32 +++++++++-----------------------
crypto/secret_keyring.c | 28 +++++++++-------------------
include/crypto/secret.h | 11 ++---------
include/crypto/secret_common.h | 13 ++-----------
include/crypto/secret_keyring.h | 18 ++----------------
6 files changed, 28 insertions(+), 98 deletions(-)
diff --git a/crypto/secret.c b/crypto/secret.c
index 281cb81f0f..55b406f79e 100644
--- a/crypto/secret.c
+++ b/crypto/secret.c
@@ -25,6 +25,9 @@
#include "qemu/module.h"
#include "trace.h"
+OBJECT_DEFINE_TYPE_WITH_INTERFACES(QCryptoSecret, qcrypto_secret,
+ QCRYPTO_SECRET, QCRYPTO_SECRET_COMMON,
+ { TYPE_USER_CREATABLE }, { NULL })
static void
qcrypto_secret_load_data(QCryptoSecretCommon *sec_common,
@@ -140,26 +143,7 @@ qcrypto_secret_class_init(ObjectClass *oc, void *data)
qcrypto_secret_prop_set_file);
}
-
-static const TypeInfo qcrypto_secret_info = {
- .parent = TYPE_QCRYPTO_SECRET_COMMON,
- .name = TYPE_QCRYPTO_SECRET,
- .instance_size = sizeof(QCryptoSecret),
- .instance_finalize = qcrypto_secret_finalize,
- .class_size = sizeof(QCryptoSecretClass),
- .class_init = qcrypto_secret_class_init,
- .interfaces = (InterfaceInfo[]) {
- { TYPE_USER_CREATABLE },
- { }
- }
-};
-
-
static void
-qcrypto_secret_register_types(void)
+qcrypto_secret_init(Object *obj)
{
- type_register_static(&qcrypto_secret_info);
}
-
-
-type_init(qcrypto_secret_register_types);
diff --git a/crypto/secret_common.c b/crypto/secret_common.c
index b03d530867..9a054b90b5 100644
--- a/crypto/secret_common.c
+++ b/crypto/secret_common.c
@@ -28,6 +28,9 @@
#include "trace.h"
+OBJECT_DEFINE_ABSTRACT_TYPE(QCryptoSecretCommon, qcrypto_secret_common,
+ QCRYPTO_SECRET_COMMON, OBJECT)
+
static void qcrypto_secret_decrypt(QCryptoSecretCommon *secret,
const uint8_t *input,
size_t inputlen,
@@ -269,7 +272,7 @@ qcrypto_secret_prop_get_keyid(Object *obj,
static void
-qcrypto_secret_finalize(Object *obj)
+qcrypto_secret_common_finalize(Object *obj)
{
QCryptoSecretCommon *secret = QCRYPTO_SECRET_COMMON(obj);
@@ -279,7 +282,7 @@ qcrypto_secret_finalize(Object *obj)
}
static void
-qcrypto_secret_class_init(ObjectClass *oc, void *data)
+qcrypto_secret_common_class_init(ObjectClass *oc, void *data)
{
object_class_property_add_bool(oc, "loaded",
qcrypto_secret_prop_get_loaded,
@@ -297,6 +300,10 @@ qcrypto_secret_class_init(ObjectClass *oc, void *data)
qcrypto_secret_prop_set_iv);
}
+static void
+qcrypto_secret_common_init(Object *obj)
+{
+}
int qcrypto_secret_lookup(const char *secretid,
uint8_t **data,
@@ -380,24 +387,3 @@ char *qcrypto_secret_lookup_as_base64(const char *secretid,
g_free(data);
return ret;
}
-
-
-static const TypeInfo qcrypto_secret_info = {
- .parent = TYPE_OBJECT,
- .name = TYPE_QCRYPTO_SECRET_COMMON,
- .instance_size = sizeof(QCryptoSecretCommon),
- .instance_finalize = qcrypto_secret_finalize,
- .class_size = sizeof(QCryptoSecretCommonClass),
- .class_init = qcrypto_secret_class_init,
- .abstract = true,
-};
-
-
-static void
-qcrypto_secret_register_types(void)
-{
- type_register_static(&qcrypto_secret_info);
-}
-
-
-type_init(qcrypto_secret_register_types);
diff --git a/crypto/secret_keyring.c b/crypto/secret_keyring.c
index 8bfc58ebf4..463aefe5dc 100644
--- a/crypto/secret_keyring.c
+++ b/crypto/secret_keyring.c
@@ -26,6 +26,9 @@
#include "trace.h"
#include "crypto/secret_keyring.h"
+OBJECT_DEFINE_TYPE_WITH_INTERFACES(QCryptoSecretKeyring, qcrypto_secret_keyring,
+ QCRYPTO_SECRET_KEYRING, QCRYPTO_SECRET_COMMON,
+ { TYPE_USER_CREATABLE }, { NULL })
static inline
long keyctl_read(int32_t key, uint8_t *buffer, size_t buflen)
@@ -109,6 +112,11 @@ qcrypto_secret_keyring_complete(UserCreatable *uc, Error **errp)
}
+static void
+qcrypto_secret_keyring_finalize(Object *obj)
+{
+}
+
static void
qcrypto_secret_keyring_class_init(ObjectClass *oc, void *data)
{
@@ -124,25 +132,7 @@ qcrypto_secret_keyring_class_init(ObjectClass *oc, void *data)
NULL, NULL);
}
-
-static const TypeInfo qcrypto_secret_info = {
- .parent = TYPE_QCRYPTO_SECRET_COMMON,
- .name = TYPE_QCRYPTO_SECRET_KEYRING,
- .instance_size = sizeof(QCryptoSecretKeyring),
- .class_size = sizeof(QCryptoSecretKeyringClass),
- .class_init = qcrypto_secret_keyring_class_init,
- .interfaces = (InterfaceInfo[]) {
- { TYPE_USER_CREATABLE },
- { }
- }
-};
-
-
static void
-qcrypto_secret_register_types(void)
+qcrypto_secret_keyring_init(Object *obj)
{
- type_register_static(&qcrypto_secret_info);
}
-
-
-type_init(qcrypto_secret_register_types);
diff --git a/include/crypto/secret.h b/include/crypto/secret.h
index 2deb461d2f..4eb4e5ffef 100644
--- a/include/crypto/secret.h
+++ b/include/crypto/secret.h
@@ -26,11 +26,9 @@
#include "crypto/secret_common.h"
#define TYPE_QCRYPTO_SECRET "secret"
-#define QCRYPTO_SECRET(obj) \
- OBJECT_CHECK(QCryptoSecret, (obj), TYPE_QCRYPTO_SECRET)
-typedef struct QCryptoSecret QCryptoSecret;
-typedef struct QCryptoSecretClass QCryptoSecretClass;
+OBJECT_DECLARE_SIMPLE_TYPE(QCryptoSecret, qcrypto_secret,
+ QCRYPTO_SECRET, QCryptoSecretCommon)
/**
* QCryptoSecret:
@@ -125,9 +123,4 @@ struct QCryptoSecret {
char *file;
};
-
-struct QCryptoSecretClass {
- QCryptoSecretCommonClass parent_class;
-};
-
#endif /* QCRYPTO_SECRET_H */
diff --git a/include/crypto/secret_common.h b/include/crypto/secret_common.h
index 980c02ab71..999a6b4651 100644
--- a/include/crypto/secret_common.h
+++ b/include/crypto/secret_common.h
@@ -25,17 +25,8 @@
#include "qom/object.h"
#define TYPE_QCRYPTO_SECRET_COMMON "secret_common"
-#define QCRYPTO_SECRET_COMMON(obj) \
- OBJECT_CHECK(QCryptoSecretCommon, (obj), TYPE_QCRYPTO_SECRET_COMMON)
-#define QCRYPTO_SECRET_COMMON_CLASS(class) \
- OBJECT_CLASS_CHECK(QCryptoSecretCommonClass, \
- (class), TYPE_QCRYPTO_SECRET_COMMON)
-#define QCRYPTO_SECRET_COMMON_GET_CLASS(obj) \
- OBJECT_GET_CLASS(QCryptoSecretCommonClass, \
- (obj), TYPE_QCRYPTO_SECRET_COMMON)
-
-typedef struct QCryptoSecretCommon QCryptoSecretCommon;
-typedef struct QCryptoSecretCommonClass QCryptoSecretCommonClass;
+OBJECT_DECLARE_TYPE(QCryptoSecretCommon, qcrypto_secret_common,
+ QCRYPTO_SECRET_COMMON)
struct QCryptoSecretCommon {
Object parent_obj;
diff --git a/include/crypto/secret_keyring.h b/include/crypto/secret_keyring.h
index 9f371ad251..4470306853 100644
--- a/include/crypto/secret_keyring.h
+++ b/include/crypto/secret_keyring.h
@@ -26,18 +26,8 @@
#include "crypto/secret_common.h"
#define TYPE_QCRYPTO_SECRET_KEYRING "secret_keyring"
-#define QCRYPTO_SECRET_KEYRING(obj) \
- OBJECT_CHECK(QCryptoSecretKeyring, (obj), \
- TYPE_QCRYPTO_SECRET_KEYRING)
-#define QCRYPTO_SECRET_KEYRING_CLASS(class) \
- OBJECT_CLASS_CHECK(QCryptoSecretKeyringClass, \
- (class), TYPE_QCRYPTO_SECRET_KEYRING)
-#define QCRYPTO_SECRET_KEYRING_GET_CLASS(class) \
- OBJECT_GET_CLASS(QCryptoSecretKeyringClass, \
- (class), TYPE_QCRYPTO_SECRET_KEYRING)
-
-typedef struct QCryptoSecretKeyring QCryptoSecretKeyring;
-typedef struct QCryptoSecretKeyringClass QCryptoSecretKeyringClass;
+OBJECT_DECLARE_SIMPLE_TYPE(QCryptoSecretKeyring, qcrypto_secret_keyring,
+ QCRYPTO_SECRET_KEYRING, QCryptoSecretCommon)
typedef struct QCryptoSecretKeyring {
QCryptoSecretCommon parent;
@@ -45,8 +35,4 @@ typedef struct QCryptoSecretKeyring {
} QCryptoSecretKeyring;
-typedef struct QCryptoSecretKeyringClass {
- QCryptoSecretCommonClass parent;
-} QCryptoSecretKeyringClass;
-
#endif /* QCRYPTO_SECRET_KEYRING_H */
--
2.26.2
next prev parent reply other threads:[~2020-07-23 18:15 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-23 18:14 [PATCH 0/4] qom: reduce boilerplate required for declaring and defining objects Daniel P. Berrangé
2020-07-23 18:14 ` [PATCH 1/4] qom: make object_ref/unref use a void * instead of Object * Daniel P. Berrangé
2020-07-23 19:04 ` Eric Blake
2020-07-24 9:06 ` Daniel P. Berrangé
2020-07-23 18:14 ` [PATCH 2/4] qom: provide convenient macros for declaring and defining types Daniel P. Berrangé
2020-07-23 19:23 ` Eric Blake
2020-07-24 9:11 ` Daniel P. Berrangé
2020-08-09 4:21 ` Eduardo Habkost
2020-08-11 18:22 ` Eduardo Habkost
2020-07-23 18:14 ` Daniel P. Berrangé [this message]
2020-07-23 18:50 ` [PATCH 3/4] crypto: use QOM macros for declaration/definition of secret types Eduardo Habkost
2020-07-24 9:12 ` Daniel P. Berrangé
2020-08-06 18:01 ` Eduardo Habkost
2020-08-07 11:11 ` Daniel P. Berrangé
2020-08-08 1:38 ` Eduardo Habkost
2020-07-23 19:25 ` Eric Blake
2020-07-23 18:14 ` [PATCH 4/4] crypto: use QOM macros for declaration/definition of TLS creds types Daniel P. Berrangé
2020-07-23 19:26 ` Eric Blake
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200723181410.3145233-4-berrange@redhat.com \
--to=berrange@redhat.com \
--cc=ehabkost@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.