Я пытаюсь использовать K / N с libsecret. Он включает следующую структуру:
typedef struct {
const gchar *name;
SecretSchemaFlags flags;
SecretSchemaAttribute attributes[32];
} SecretSchema;
(отсюда: https://developer.gnome.org/libsecret/0.18/libsecret-SecretSchema.html#SecretSchema)
cinterop сгенерировал следующий класс:
@kotlinx.cinterop.internal.CStruct public final class SecretSchema public constructor(rawPtr: kotlinx.cinterop.NativePtr /* = kotlin.native.internal.NativePtr */) : kotlinx.cinterop.CStructVar {
@kotlinx.cinterop.internal.CStruct.VarType public companion object : kotlinx.cinterop.CStructVar.Type {
}
public final val attributes: kotlinx.cinterop.CArrayPointer<org.libsecret.SecretSchemaAttribute> /* = kotlinx.cinterop.CPointer<org.libsecret.SecretSchemaAttribute> */ /* compiled code */
public final var flags: org.libsecret.SecretSchemaFlags /* = kotlin.UInt */ /* compiled code */
public final var name: kotlinx.cinterop.CPointer<org.libsecret.gcharVar /* = kotlinx.cinterop.ByteVarOf<kotlin.Byte> */>? /* compiled code */
public final var reserved: org.libsecret.gint /* = kotlin.Int */ /* compiled code */
public final var reserved1: org.libsecret.gpointer? /* = kotlinx.cinterop.CPointer<out kotlinx.cinterop.CPointed>? */ /* compiled code */
public final var reserved2: org.libsecret.gpointer? /* = kotlinx.cinterop.CPointer<out kotlinx.cinterop.CPointed>? */ /* compiled code */
public final var reserved3: org.libsecret.gpointer? /* = kotlinx.cinterop.CPointer<out kotlinx.cinterop.CPointed>? */ /* compiled code */
public final var reserved4: org.libsecret.gpointer? /* = kotlinx.cinterop.CPointer<out kotlinx.cinterop.CPointed>? */ /* compiled code */
public final var reserved5: org.libsecret.gpointer? /* = kotlinx.cinterop.CPointer<out kotlinx.cinterop.CPointed>? */ /* compiled code */
public final var reserved6: org.libsecret.gpointer? /* = kotlinx.cinterop.CPointer<out kotlinx.cinterop.CPointed>? */ /* compiled code */
public final var reserved7: org.libsecret.gpointer? /* = kotlinx.cinterop.CPointer<out kotlinx.cinterop.CPointed>? */ /* compiled code */
}
и я пытаюсь определить это так:
alloc<SecretSchema> {
name = "com.charlag.tuta-bridge".cstr.ptr
flags = SECRET_SCHEMA_NONE
}
однако я не вижу способа изменить attributes
, потому что CArrayPointer
(CPointer
) не предоставляет методы модификации.
Я также заметил несколько полей reserved
. Должен ли я использовать их вместо этого?
вот пример того, как он используется в C: https://developer.gnome.org/libsecret/0.18/c-examples.html#c-schema-example