Line data Source code
1 : #include "gelektra-kdb.h"
2 : #include <kdbextension.h>
3 : #include <string.h>
4 :
5 12 : G_DEFINE_TYPE (GElektraKdb, gelektra_kdb, G_TYPE_OBJECT)
6 : static KDB * gelektra_kdb_swap (GElektraKdb * kdb, KDB * newhandle);
7 :
8 5 : static void gelektra_kdb_init (GElektraKdb * self)
9 : {
10 : /* initialize the object */
11 5 : self->handle = NULL;
12 5 : }
13 :
14 5 : static void gelektra_kdb_finalize (GObject * object)
15 : {
16 5 : GElektraKdb * self = GELEKTRA_KDB (object);
17 :
18 5 : if (self->handle) kdbClose (self->handle, NULL);
19 5 : self->handle = NULL;
20 :
21 : /* Always chain up to the parent class; as with dispose(), finalize()
22 : * is guaranteed to exist on the parent's class virtual function table
23 : */
24 5 : G_OBJECT_CLASS (gelektra_kdb_parent_class)->finalize (object);
25 5 : }
26 :
27 : static void gelektra_kdb_class_init (GElektraKdbClass * klass)
28 : {
29 1 : GObjectClass * gobject_class = G_OBJECT_CLASS (klass);
30 1 : gobject_class->finalize = gelektra_kdb_finalize;
31 : }
32 :
33 : /*
34 : * Methods
35 : */
36 :
37 : /* constructor */
38 : /**
39 : * gelektra_kdb_open: (constructor)
40 : * @error key which holds errors and warnings which were issued
41 : *
42 : * Returns: (transfer full): A new #GElektraKdb
43 : * see kdbOpen
44 : */
45 4 : GElektraKdb * gelektra_kdb_open (GElektraKey * error)
46 : {
47 4 : return gelektra_kdb_make (kdbOpen (error->key));
48 : }
49 :
50 : /**
51 : * gelektra_kdb_make: (skip)
52 : * @handle: The underlying handle object
53 : *
54 : * Returns: (transfer full): A new #GElektraKdb holding the ownership of @handle
55 : */
56 5 : GElektraKdb * gelektra_kdb_make (KDB * handle)
57 : {
58 5 : if (handle == NULL) return NULL;
59 5 : GElektraKdb * ret = g_object_new (GELEKTRA_TYPE_KDB, NULL);
60 5 : gelektra_kdb_swap (ret, handle);
61 5 : return ret;
62 : }
63 :
64 : /* destructor */
65 2 : gint gelektra_kdb_close (GElektraKdb * kdb, GElektraKey * error)
66 : {
67 2 : int ret = kdbClose (kdb->handle, (error) ? error->key : NULL);
68 2 : kdb->handle = NULL;
69 2 : return ret;
70 : }
71 :
72 : /* basic methods */
73 : /**
74 : * gelektra_kdb_gi_open:
75 : * @kdb: A #GElektraKdb
76 : * @error key which holds errors and warnings which were issued
77 : *
78 : * \note This is for GObject Introspection.
79 : * \note Do NOT use! Use gelektra_kdb_open instead
80 : */
81 0 : void gelektra_kdb_gi_open (GElektraKdb * kdb, GElektraKey * error)
82 : {
83 0 : kdb->handle = kdbOpen (error->key);
84 0 : }
85 :
86 3 : gint gelektra_kdb_get (GElektraKdb * kdb, GElektraKeySet * returned, GElektraKey * parent)
87 : {
88 3 : return kdbGet (kdb->handle, returned->keyset, parent->key);
89 : }
90 :
91 2 : gint gelektra_kdb_set (GElektraKdb * kdb, GElektraKeySet * returned, GElektraKey * parent)
92 : {
93 2 : return kdbSet (kdb->handle, returned->keyset, parent->key);
94 : }
95 :
96 : /**
97 : * gelektra_kdb_swap: (skip)
98 : * @kdb: A #GElektraKdb
99 : * @newhandle: The new underlying handle
100 : *
101 : * Returns: The old underlying handle
102 : */
103 : static KDB * gelektra_kdb_swap (GElektraKdb * kdb, KDB * newhandle)
104 : {
105 5 : KDB * oldhandle = kdb->handle;
106 5 : kdb->handle = newhandle;
107 : return oldhandle;
108 : }
|