/usr/include/libr/sdb/sdb.h is in libradare2-dev 0.9.6-3.1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | #ifndef _INCLUDE_SDB_H_
#define _INCLUDE_SDB_H_
#ifndef O_BINARY
#define O_BINARY 0
#endif
#if defined(__GNUC__)
#define SDB_VISIBLE __attribute__((visibility("default")))
#else
#define SDB_VISIBLE
#endif
#if __WIN32__ || __CYGWIN__ || MINGW32
#undef __WINDOWS__
#define __WINDOWS__ 1
#include <windows.h>
#define DIRSEP '\\'
#else
#define DIRSEP '/'
#endif
#ifdef __cplusplus
extern "C" {
#endif
#include "ht.h"
#include "ls.h"
#include "cdb.h"
#include "cdb_make.h"
#include "sdb-version.h"
#define SDB_RS '\x1e'
#define SDB_SS "\x1e"
// todo. store last used
// todo. sync?
// todo.
typedef struct sdb_ns_t {
ut32 hash;
struct sdb_t *sdb;
} SdbNs;
#define SDB_KSZ 0xff
typedef struct sdb_kv {
char key[SDB_KSZ];
char *value;
ut64 expire;
ut32 cas;
} SdbKv;
typedef struct sdb_t {
char *dir;
int fd;
int lock;
struct cdb db;
struct cdb_make m;
SdbHash *ht;
ut32 eod;
int fdump;
char *ndump;
ut64 expire;
SdbList *ns;
SdbKv tmpkv;
} Sdb;
Sdb* sdb_new (const char *dir, int lock);
void sdb_free (Sdb* s);
void sdb_drop (Sdb* s);
void sdb_file (Sdb* s, const char *dir);
void sdb_reset (Sdb* s);
int sdb_query (Sdb* s, const char *cmd);
int sdb_queryf (Sdb* s, const char *fmt, ...);
int sdb_query_lines (Sdb *s, const char *cmd);
char *sdb_querys (Sdb* s, char *buf, size_t len, const char *cmd);
char *sdb_querysf (Sdb* s, char *buf, size_t buflen, const char *fmt, ...);
int sdb_exists (Sdb*, const char *key);
int sdb_nexists (Sdb*, const char *key);
int sdb_remove (Sdb*, const char *key, ut32 cas);
char *sdb_get (Sdb*, const char *key, ut32 *cas);
const char *sdb_getc (Sdb*, const char *key, ut32 *cas);
int sdb_set (Sdb*, const char *key, const char *data, ut32 cas);
int sdb_add (Sdb* s, const char *key, const char *val, ut32 cas);
void sdb_list(Sdb*);
int sdb_sync (Sdb*);
void sdb_kv_free (struct sdb_kv *kv);
void sdb_flush (Sdb* s);
typedef int (*SdbForeachCallback)(void *user, const char *k, const char *v);
void sdb_foreach (Sdb* s, SdbForeachCallback cb, void *user);
/* create db */
int sdb_create (Sdb* s);
int sdb_append (Sdb* s, const char *key, const char *val);
int sdb_finish (Sdb* s);
/* iterate */
void sdb_dump_begin (Sdb* s);
SDB_VISIBLE SdbKv *sdb_dump_next (Sdb* s);
int sdb_dump_dupnext (Sdb* s, char **key, char **value);
/* numeric */
R_API char *sdb_itoa(ut64 n, char *s);
R_API ut64 sdb_atoi(const char *s);
ut64 sdb_getn (Sdb* s, const char *key, ut32 *cas);
int sdb_setn (Sdb* s, const char *key, ut64 v, ut32 cas);
ut64 sdb_inc (Sdb* s, const char *key, ut64 n, ut32 cas);
ut64 sdb_dec (Sdb* s, const char *key, ut64 n, ut32 cas);
/* locking */
int sdb_lock(const char *s);
const char *sdb_lockfile(const char *f);
void sdb_unlock(const char *s);
/* expiration */
int sdb_expire(Sdb* s, const char *key, ut64 expire);
ut64 sdb_get_expire(Sdb* s, const char *key);
// int sdb_get_cas(Sdb* s, const char *key) -> takes no sense at all..
ut64 sdb_now (void);
ut64 sdb_unow (void);
ut32 sdb_hash (const char *key, int klen);
#define sdb_hashstr(x) sdb_hash(x,strlen(x))
/* json api */
char *sdb_json_get (Sdb* s, const char *key, const char *p, ut32 *cas);
int sdb_json_geti (Sdb* s, const char *k, const char *p);
int sdb_json_seti (Sdb* s, const char *k, const char *p, int v, ut32 cas);
int sdb_json_set (Sdb* s, const char *k, const char *p, const char *v, ut32 cas);
int sdb_json_dec(Sdb* s, const char *k, const char *p, int n, ut32 cas);
int sdb_json_inc(Sdb* s, const char *k, const char *p, int n, ut32 cas);
char *sdb_json_indent(const char *s);
char *sdb_json_unindent(const char *s);
typedef struct {
char *buf;
size_t blen;
size_t len;
} SdbJsonString;
const char *sdb_json_format(SdbJsonString* s, const char *fmt, ...);
#define sdb_json_format_free(x) free ((x)->buf)
// namespace
Sdb* sdb_ns(Sdb *s, const char *name);
void sdb_ns_init(Sdb* s);
void sdb_ns_free(Sdb* s);
void sdb_ns_sync (Sdb* s);
// array
int sdb_aexists(Sdb* s, const char *key, const char *val);
int sdb_aadd(Sdb* s, const char *key, int idx, const char *val, ut32 cas);
int sdb_aaddn(Sdb* s, const char *key, int idx, ut64 val, ut32 cas);
int sdb_aset(Sdb* s, const char *key, int idx, const char *val, ut32 cas);
int sdb_asetn(Sdb* s, const char *key, int idx, ut64 val, ut32 cas);
char *sdb_aget(Sdb* s, const char *key, int idx, ut32 *cas);
ut64 sdb_agetn(Sdb* s, const char *key, int idx, ut32 *cas);
SDB_VISIBLE int sdb_agetv(Sdb *s, const char *key, const char *val, ut32 cas);
int sdb_ains(Sdb* s, const char *key, int idx, const char *val, ut32 cas);
int sdb_ainsn(Sdb* s, const char *key, int idx, ut64 val, ut32 cas);
int sdb_adel(Sdb* s, const char *key, int n, ut32 cas);
int sdb_adeln(Sdb* s, const char *key, ut64 val, ut32 cas);
int sdb_adels(Sdb *s, const char *key, const char *val, ut32 cas);
// helpers
char *sdb_astring(char *str, int *hasnext);
int sdb_alen(const char *str);
int sdb_alength(Sdb* s, const char *key);
int sdb_alist(Sdb* s, const char *key);
const char *sdb_anext(const char *str);
const char *sdb_aindex(const char *str, int idx);
#ifdef __cplusplus
}
#endif
#endif
|