Git init
[pkgs/e/elektra.git] / src / include / kdbbackend.h
1 /***************************************************************************
2                 kdbbackend.h  -  Methods for backend programing
3                              -------------------
4     begin                : Mon Dec 25 2004
5     copyright            : (C) 2004 by Avi Alkalay
6     email                : avi@unix.sh
7  ***************************************************************************/
8
9 /***************************************************************************
10  *                                                                         *
11  *   This program is free software; you can redistribute it and/or modify  *
12  *   it under the terms of the BSD License (revised).                      *
13  *                                                                         *
14  ***************************************************************************/
15
16 /*You have to include this file in order to write backends or for internal
17  *source files for elektra. You do not need this functions to use elektra!*/
18
19
20 #ifndef KDBBACKEND_H
21 #define KDBBACKEND_H
22
23
24 #include <kdb.h>
25 #include <kdbprivate.h>
26
27 #ifdef ELEKTRA_STATIC
28         #define KDBEXPORT(module) KDB *libelektra_##module##_LTX_kdbBackendFactory(void)        
29 #else
30         #define KDBEXPORT(module) KDB *kdbBackendFactory(void)
31 #endif
32
33
34
35 /**
36  * Switches to denote the backend methods. Used in calls to kdbBackendExport().
37  *
38  * @ingroup backend
39  */
40 typedef enum {
41         KDB_BE_OPEN=1,          /*!< Next arg is backend for kdbOpen() */
42         KDB_BE_CLOSE=1<<1,      /*!< Next arg is backend for kdbClose() */
43         KDB_BE_GET=1<<2,        /*!< Next arg is backend for kdbGet() */
44         KDB_BE_SET=1<<3,        /*!< Next arg is backend for kdbSet() */
45         KDB_BE_VERSION=1<<4,    /*!< Next arg is char * for Version */
46         KDB_BE_DESCRIPTION=1<<5,/*!< Next arg is char * for Description */
47         KDB_BE_AUTHOR=1<<6,     /*!< Next arg is char * for Author*/
48         KDB_BE_LICENCE=1<<7,    /*!< Next arg is char * for Licence*/
49         KDB_BE_END=0            /*!< End of arguments */
50 } backend_t;
51
52
53 #ifdef __cplusplus
54 extern "C" {
55 #endif
56
57 KDB *kdbBackendExport(const char *backendName, ...);
58
59 /* Mounting API */
60 int kdbMount(KDB *handle, const Key *mountpoint, const KeySet *config);
61 int kdbUnmount(KDB *handle, const Key *mountpoint);
62 Key *kdbGetMountpoint(KDB *handle, const Key *where);
63
64 /* Idea for new api...
65 unsigned long kdbGetCapability(KDB *handle, const Key *where, unsigned long mask);
66 const char *kdbGetString(KDB *handle, const Key *where, unsigned long which);
67 */
68
69 /* Old capability API */
70 KDBCap *kdbGetCapability(KDB *handle, const Key *where);
71 int kdbhGetErrno(const KDB *handle);
72
73 /* Some internal methods */
74 int kdbiRealloc (void ** buffer, size_t size);
75 void* kdbiMalloc (size_t size);
76 void kdbiFree (void *ptr);
77 char *kdbiStrDup (const char *s);
78 size_t kdbiStrLen(const char *s);
79
80 ssize_t kdbbEncode(void *kdbbDecoded, size_t size, char *returned);
81 ssize_t kdbbDecode(char *kdbbEncoded,void *returned);
82
83 int kdbbNeedsUTF8Conversion(void);
84 int kdbbkdbbUTF8Engine(int direction, char **string, size_t *inputOutputByteSize);
85
86 int kdbbEncodeChar(char c, char *buffer, size_t bufSize);
87 int kdbbDecodeChar(const char *from, char *into);
88
89 int kdbbFilenameToKeyName(const char *string, char *buffer, int bufSize);
90 int kdbbKeyNameToRelativeFilename(const char *string, char *buffer, size_t bufSize);
91 ssize_t kdbbKeyCalcRelativeFilename(const Key *key,char *relativeFilename,size_t maxSize);
92
93 ssize_t kdbbGetFullKeyName (KDB *handle, const char *forFilename, const Key *parentKey, Key *returned);
94 ssize_t kdbbGetFullFilename(KDB *handle, const Key *forKey,char *returned,size_t maxSize);
95
96
97 /* Some handle manipulation methods */
98 void *kdbhGetBackendData(const KDB *handle);
99 void *kdbhSetBackendData(KDB *handle, void *data);
100
101 KDBCap* kdbhSetCapability(KDB *handle, KDBCap *cap);
102 KDBCap* kdbhGetCapability(const KDB *handle);
103
104 Trie *kdbhGetTrie(const KDB *handle);
105 void kdbhSetTrie(KDB *handle, Trie *trie);
106
107 const Key *kdbhGetMountpoint(KDB *handle);
108 void kdbhSetMountpoint(KDB *handle, const Key* mountpoint);
109
110 KeySet *kdbhGetConfig(KDB *handle);
111
112 /* Capability methods */
113 KDBCap *capNew (void);
114 void capDel (KDBCap *cap);
115
116 const char *kdbcGetName (const KDBCap *cap);
117 const char *kdbcGetVersion (const KDBCap *cap);
118 const char *kdbcGetDescription (const KDBCap *cap);
119 const char *kdbcGetAuthor (const KDBCap *cap);
120 const char *kdbcGetLicence (const KDBCap *cap);
121
122 /* too many functions, use flags */
123 unsigned int kdbcGetonlyFullGet (const KDBCap *cap);
124 unsigned int kdbcGetonlyFullSet (const KDBCap *cap);
125 unsigned int kdbcGetonlyRemoveAll (const KDBCap *cap);
126 unsigned int kdbcGetonlyAddKeys (const KDBCap *cap);
127 unsigned int kdbcGetonlySystem (const KDBCap *cap);
128 unsigned int kdbcGetonlyUser (const KDBCap *cap);
129 unsigned int kdbcGetonlyFullSync (const KDBCap *cap);
130 unsigned int kdbcGetnoOwner (const KDBCap *cap);
131 unsigned int kdbcGetnoValue (const KDBCap *cap);
132 unsigned int kdbcGetnoComment (const KDBCap *cap);
133 unsigned int kdbcGetnoUID (const KDBCap *cap);
134 unsigned int kdbcGetnoGID (const KDBCap *cap);
135 unsigned int kdbcGetnoMode (const KDBCap *cap);
136 unsigned int kdbcGetnoDir (const KDBCap *cap);
137 unsigned int kdbcGetnoATime (const KDBCap *cap);
138 unsigned int kdbcGetnoMTime (const KDBCap *cap);
139 unsigned int kdbcGetnoCTime (const KDBCap *cap);
140 unsigned int kdbcGetnoRemove (const KDBCap *cap);
141 unsigned int kdbcGetnoStat (const KDBCap *cap);
142 unsigned int kdbcGetnoMount (const KDBCap *cap);
143 unsigned int kdbcGetnoBinary (const KDBCap *cap);
144 unsigned int kdbcGetnoString (const KDBCap *cap);
145 unsigned int kdbcGetnoTypes (const KDBCap *cap);
146 unsigned int kdbcGetnoError (const KDBCap *cap);
147 unsigned int kdbcGetnoLock (const KDBCap *cap);
148 unsigned int kdbcGetnoThread (const KDBCap *cap);
149
150
151
152 #ifdef __cplusplus
153 }
154 #endif
155
156
157 #endif /* KDBBACKEND_H */
158