00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00048 #ifdef HAVE_CONFIG_H
00049 #include "config.h"
00050 #endif
00051
00052 #ifdef HAVE_UNISTD_H
00053 #include <unistd.h>
00054 #endif
00055
00056 #ifdef HAVE_ICONV
00057 #include <iconv.h>
00058 #endif
00059
00060 #ifdef HAVE_LOCALE_H
00061 #include <locale.h>
00062 #endif
00063
00064 #ifdef HAVE_LANGINFO_H
00065 #include <langinfo.h>
00066 #endif
00067
00068 #ifdef HAVE_SYS_TYPES_H
00069 #include <sys/types.h>
00070 #endif
00071
00072 #ifdef HAVE_SYS_STAT_H
00073 #include <sys/stat.h>
00074 #endif
00075
00076
00077 #include <stdlib.h>
00078 #include <stdarg.h>
00079 #include <ctype.h>
00080 #include <string.h>
00081 #include <errno.h>
00082 #include <stdio.h>
00083 #include <pthread.h>
00084
00085
00086
00087 #include "kdbbackend.h"
00088 #include "kdbLibLoader.h"
00089
00090
00091 #ifdef WIN32
00092 #define usleep(x) Sleep(x)
00093 #endif
00094
00095
00096
00097
00098
00099
00114 int kdbGetValue(KDBHandle handle,const char *keyname,
00115 char *returned,size_t maxSize) {
00116 Key *key;
00117 int rc=0;
00118
00119 key=keyNew(keyname,KEY_SWITCH_END);
00120 rc=kdbGetKey(handle, key);
00121 if (rc == 0) keyGetString(key,returned,maxSize);
00122 else rc=errno;
00123 keyDel(key);
00124 errno=rc;
00125 return rc;
00126 }
00127
00128
00129
00145 int kdbSetValue(KDBHandle handle, const char *keyname, const char *value) {
00146 Key *key;
00147 int rc;
00148
00149 key=keyNew(keyname,KEY_SWITCH_END);
00150 rc=kdbGetKey(handle,key);
00151 if (! keyIsDir (key))
00152 {
00153 keySetString(key,value);
00154 } else {
00155 errno = KDB_RET_TYPEMISMATCH;
00156 keyDel(key);
00157 return -1;
00158 }
00159 rc=kdbSetKey(handle,key);
00160 keyDel(key);
00161 return rc;
00162 }
00163
00164
00165
00193 int kdbGetValueByParent(KDBHandle handle, const char *parentName, const char *baseName, char *returned, size_t maxSize) {
00194 char *name;
00195 int retval=0;
00196 name = (char *)malloc(sizeof(char)*(strblen(parentName)+strblen(baseName)));
00197
00198 sprintf(name,"%s/%s",parentName,baseName);
00199 retval = kdbGetValue(handle,name,returned,maxSize);
00200 free(name);
00201 return retval;
00202 }
00203
00204
00205
00217 int kdbSetValueByParent(KDBHandle handle, const char *parentName, const char *baseName, const char *value) {
00218 char *name;
00219 int retval=0;
00220 name = (char *)malloc(sizeof(char)*(strblen(parentName)+strblen(baseName)));
00221
00222 sprintf(name,"%s/%s",parentName,baseName);
00223 retval = kdbSetValue(handle,name,value);
00224 free(name);
00225 return retval;
00226 }
00227
00228
00229
00245 int kdbGetKeyByParent(KDBHandle handle, const char *parentName, const char *baseName, Key *returned) {
00246 char *name;
00247 name = (char *)malloc(sizeof(char) * (strblen(parentName)+strblen(baseName)));
00248
00249 sprintf(name,"%s/%s",parentName,baseName);
00250 keySetName(returned,name);
00251 free(name);
00252 return kdbGetKey(handle,returned);
00253 }
00254
00255
00263 int kdbGetKeyByParentKey(KDBHandle handle, const Key *parent, const char *baseName, Key *returned) {
00264 size_t size=keyGetFullNameSize(parent);
00265 char *name;
00266 name = (char *)malloc(sizeof(char) * (size+strblen(baseName)));
00267
00268 keyGetFullName(parent,name,size);
00269 name[size-1]='/';
00270 strcpy((char *)(name+size),baseName);
00271
00272 keySetName(returned,name);
00273 free(name);
00274 return kdbGetKey(handle,returned);
00275 }
00276
00277
00290 ssize_t kdbGetChildKeys(KDBHandle handle, const char *parentName, KeySet *returned, unsigned long options) {
00291
00292 Key *parentKey;
00293 ssize_t rc;
00294
00295 parentKey=keyNew(parentName,KEY_SWITCH_END);
00296 rc=kdbGetKeyChildKeys(handle,parentKey,returned,options);
00297
00298 keyDel(parentKey);
00299
00300 return rc;
00301 }
00302
00303
00304
00318 ssize_t kdbGetRootKeys(KDBHandle handle, KeySet *returned) {
00319 Key *system=0,*user=0;
00320
00321 user=keyNew("user",KEY_SWITCH_NEEDSYNC,handle,
00322 KEY_SWITCH_END);
00323 if (user->flags & KEY_SWITCH_FLAG) {
00324 keyDel(user);
00325 user=0;
00326 } else ksInsert(returned,user);
00327
00328 system=keyNew("system",KEY_SWITCH_NEEDSYNC,handle,
00329 KEY_SWITCH_END);
00330 if (system->flags & KEY_SWITCH_FLAG) {
00331 keyDel(system);
00332 system=0;
00333 } else ksInsert(returned,system);
00334
00335 return returned->size;
00336 }
00337
00338
00350 int kdbRemove(KDBHandle handle, const char *keyName) {
00351
00352 int rc=0;
00353 Key *key=0;
00354
00355 key=keyNew(KEY_SWITCH_END);
00356 rc=keySetName(key,keyName);
00357 if (rc == 0) {
00358 keyDel(key);
00359 return -1;
00360 }
00361
00362 rc=kdbRemoveKey(handle,key);
00363 keyDel(key);
00364
00365 return rc;
00366 }
00367