Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ heap:
asan:
$(MAKE) include/sdb/version.h
CC=gcc LDFLAGS="$(CFLAGS_ASAN)" CFLAGS="$(CFLAGS_ASAN)" ${MAKE} -C src all

asantest:
export ASAN_OPTIONS=detect_leaks=0 ; \
CC=gcc CFLAGS="$(CFLAGS_ASAN)" ${MAKE} -C test
Expand Down
1 change: 1 addition & 0 deletions config.mk
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ endif
CFLAGS+=-Wall
CFLAGS+=-fPIC
CFLAGS+=-Wsign-compare
CFLAGS+=-Wsign-conversion
# some old gcc doesnt support this
# CFLAGS+=-Wmissing-field-initializers
#CFLAGS+=-O3
Expand Down
8 changes: 4 additions & 4 deletions include/sdb/buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ typedef struct buffer {
#define BUFFER_INSIZE 8192
#define BUFFER_OUTSIZE 8192

void buffer_init(buffer *,BufferOp,int,char *,unsigned int);
void buffer_init(buffer *,BufferOp,int,char *,size_t);

int buffer_flush(buffer *);
int buffer_put(buffer *,const char *,unsigned int);
int buffer_putalign(buffer *,const char *,unsigned int);
int buffer_putflush(buffer *,const char *,unsigned int);
int buffer_put(buffer *,const char *,size_t);
int buffer_putalign(buffer *,const char *,size_t);
int buffer_putflush(buffer *,const char *,size_t);

#define buffer_PUTC(s,c) \
( ((s)->n != (s)->p) \
Expand Down
2 changes: 1 addition & 1 deletion include/sdb/ht.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ static inline ut32 sdbkv_value_len(const SdbKv *kv) {
return kv->base.value_len;
}

SDB_API SdbKv* sdbkv_new2(const char *k, int kl, const char *v, int vl);
SDB_API SdbKv* sdbkv_new2(const char *k, size_t kl, const char *v, size_t vl);
SDB_API SdbKv* sdbkv_new(const char *k, const char *v);
extern SDB_API void sdbkv_free(SdbKv *kv);

Expand Down
16 changes: 8 additions & 8 deletions include/sdb/rangstr.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,16 @@ typedef struct {
} Rangstr;

#if 1
SDB_IPI void rangstr_print (Rangstr *s);
SDB_IPI Rangstr rangstr_new (const char *s);
SDB_IPI void rangstr_print(Rangstr *s);
SDB_IPI Rangstr rangstr_new(const char *s);
SDB_IPI Rangstr rangstr_null(void);
SDB_IPI int rangstr_int (Rangstr *s);
SDB_IPI char *rangstr_dup (Rangstr *rs);
SDB_IPI int rangstr_int(Rangstr *s);
SDB_IPI char *rangstr_dup(Rangstr *rs);
SDB_IPI Rangstr rangstr_news (const char *s, RangstrType *res, int i);
SDB_IPI int rangstr_cmp (Rangstr *a, Rangstr *b);
SDB_IPI const char *rangstr_str (Rangstr* rs);
SDB_IPI int rangstr_length (Rangstr* rs);
SDB_IPI int rangstr_find (Rangstr* rs, char ch);
SDB_IPI int rangstr_cmp(Rangstr *a, Rangstr *b);
SDB_IPI const char *rangstr_str(Rangstr* rs);
SDB_IPI size_t rangstr_length(Rangstr* rs);
SDB_IPI int rangstr_find(Rangstr* rs, char ch);
#endif

#endif
42 changes: 21 additions & 21 deletions include/sdb/sdb.h
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ SDB_API int sdb_open(Sdb *s, const char *file);
SDB_API int sdb_open_gperf(Sdb *s, SdbGperf *g);
SDB_API void sdb_close(Sdb *s);

SDB_API void sdb_config(Sdb *s, int options);
SDB_API void sdb_config(Sdb *s, ut32 options);
SDB_API bool sdb_free(Sdb* s);
SDB_API void sdb_file(Sdb* s, const char *dir);
SDB_API bool sdb_merge(Sdb* d, Sdb *s);
Expand Down Expand Up @@ -173,9 +173,9 @@ SDB_API char *sdb_querysf(Sdb* s, char *buf, size_t buflen, const char *fmt, ...
SDB_API int sdb_query_file(Sdb *s, const char* file);
SDB_API bool sdb_exists(Sdb*, const char *key);
SDB_API bool sdb_remove(Sdb*, const char *key, ut32 cas);
SDB_API int sdb_unset(Sdb*, const char *key, ut32 cas);
SDB_API int sdb_nunset(Sdb*, ut64 nkey, ut32 cas);
SDB_API int sdb_unset_like(Sdb *s, const char *k);
SDB_API ut32 sdb_unset(Sdb*, const char *key, ut32 cas);
SDB_API ut32 sdb_nunset(Sdb*, ut64 nkey, ut32 cas);
SDB_API bool sdb_unset_like(Sdb *s, const char *k);
SDB_API char** sdb_like(Sdb *s, const char *k, const char *v, SdbForeachCallback cb);

// diffing
Expand All @@ -201,23 +201,23 @@ SDB_API char *sdb_nget(Sdb*, ut64 nkey, ut32 *cas);

// Gets a pointer to the value associated with `key` and returns in `vlen` the
// length of the value string.
SDB_API char *sdb_get_len(Sdb*, const char *key, int *vlen, ut32 *cas);
SDB_API char *sdb_get_len(Sdb*, const char *key, size_t *vlen, ut32 *cas);

// Gets a const pointer to the value associated with `key`
SDB_API const char *sdb_const_get(Sdb*, const char *key, ut32 *cas);

// Gets a const pointer to the value associated with `key` and returns in
// `vlen` the length of the value string.
SDB_API const char *sdb_const_get_len(Sdb* s, const char *key, int *vlen, ut32 *cas);
SDB_API int sdb_set(Sdb*, const char *key, const char *data, ut32 cas);
SDB_API int sdb_nset(Sdb*, ut64 nkey, const char *data, ut32 cas);
SDB_API const char *sdb_const_get_len(Sdb* s, const char *key, size_t *vlen, ut32 *cas);
SDB_API ut32 sdb_set(Sdb*, const char *key, const char *data, ut32 cas);
SDB_API ut32 sdb_nset(Sdb*, ut64 nkey, const char *data, ut32 cas);
SDB_API ut64 sdb_num_nget(Sdb *s, ut64 nkey, ut32 *cas);
SDB_API int sdb_num_nset(Sdb* s, ut64 nkey, ut64 nval, ut32 cas);
SDB_API int sdb_set_owned(Sdb* s, const char *key, char *val, ut32 cas);
SDB_API ut32 sdb_set_owned(Sdb* s, const char *key, char *val, ut32 cas);
SDB_API int sdb_concat(Sdb *s, const char *key, const char *value, ut32 cas);
SDB_API int sdb_uncat(Sdb *s, const char *key, const char *value, ut32 cas);
SDB_API int sdb_add(Sdb* s, const char *key, const char *val, ut32 cas);
SDB_API int sdb_nadd(Sdb* s, ut64 nkey, const char *val, ut32 cas);
SDB_API ut32 sdb_add(Sdb* s, const char *key, const char *val, ut32 cas);
SDB_API ut32 sdb_nadd(Sdb* s, ut64 nkey, const char *val, ut32 cas);
SDB_API bool sdb_sync(Sdb*);
SDB_API void sdbkv_free(SdbKv *kv);

Expand Down Expand Up @@ -252,7 +252,7 @@ SDB_API bool sdb_text_check(Sdb *s, const char *file);
/* iterate */
SDB_API void sdb_dump_begin(Sdb* s);
SDB_API SdbKv *sdb_dump_next(Sdb* s);
SDB_API bool sdb_dump_dupnext(Sdb* s, char *key, char **value, int *_vlen);
SDB_API bool sdb_dump_dupnext(Sdb* s, char *key, char **value, ut32 *_vlen);

/* journaling */
SDB_API bool sdb_journal_close(Sdb *s);
Expand Down Expand Up @@ -280,7 +280,7 @@ SDB_API ut64 sdb_expire_get(Sdb* s, const char *key, ut32 *cas);
SDB_API ut64 sdb_now(void);
SDB_API ut64 sdb_unow(void);
SDB_API ut32 sdb_hash(const char *key);
SDB_API ut32 sdb_hash_len(const char *key, ut32 *len);
SDB_API ut32 sdb_hash_len(const unsigned char *key, ut32 *len);
SDB_API ut8 sdb_hash_byte(const char *s);

/* json api */
Expand Down Expand Up @@ -322,18 +322,18 @@ SDB_API bool sdb_ns_unset(Sdb *s, const char *name, Sdb *r);
SDB_API bool sdb_array_contains(Sdb* s, const char *key, const char *val, ut32 *cas);
SDB_API bool sdb_array_contains_num(Sdb *s, const char *key, ut64 val, ut32 *cas);
SDB_API int sdb_array_indexof(Sdb *s, const char *key, const char *val, ut32 cas);
SDB_API int sdb_array_set(Sdb* s, const char *key, int idx, const char *val, ut32 cas);
SDB_API int sdb_array_set_num(Sdb* s, const char *key, int idx, ut64 val, ut32 cas);
SDB_API ut32 sdb_array_set(Sdb* s, const char *key, int idx, const char *val, ut32 cas);
SDB_API ut32 sdb_array_set_num(Sdb* s, const char *key, int idx, ut64 val, ut32 cas);
SDB_API bool sdb_array_append(Sdb *s, const char *key, const char *val, ut32 cas);
SDB_API bool sdb_array_append_num(Sdb *s, const char *key, ut64 val, ut32 cas);
SDB_API bool sdb_array_prepend(Sdb *s, const char *key, const char *val, ut32 cas);
SDB_API bool sdb_array_prepend_num(Sdb *s, const char *key, ut64 val, ut32 cas);
SDB_API char *sdb_array_get(Sdb* s, const char *key, int idx, ut32 *cas);
SDB_API ut64 sdb_array_get_num(Sdb* s, const char *key, int idx, ut32 *cas);
SDB_API char *sdb_array_get(Sdb* s, const char *key, size_t idx, ut32 *cas);
SDB_API ut64 sdb_array_get_num(Sdb* s, const char *key, size_t idx, ut32 *cas);
SDB_API int sdb_array_get_idx(Sdb *s, const char *key, const char *val, ut32 cas); // agetv
SDB_API int sdb_array_insert(Sdb* s, const char *key, int idx, const char *val, ut32 cas);
SDB_API int sdb_array_insert_num(Sdb* s, const char *key, int idx, ut64 val, ut32 cas);
SDB_API int sdb_array_unset(Sdb* s, const char *key, int n, ut32 cas); // leaves empty bucket
SDB_API ut32 sdb_array_insert(Sdb* s, const char *key, int idx, const char *val, ut32 cas);
SDB_API ut32 sdb_array_insert_num(Sdb* s, const char *key, int idx, ut64 val, ut32 cas);
SDB_API ut32 sdb_array_unset(Sdb* s, const char *key, int n, ut32 cas); // leaves empty bucket
SDB_API int sdb_array_delete(Sdb* s, const char *key, int n, ut32 cas);
SDB_API void sdb_array_sort(Sdb* s, const char *key, ut32 cas);
SDB_API void sdb_array_sort_num(Sdb* s, const char *key, ut32 cas);
Expand All @@ -360,7 +360,7 @@ SDB_API int sdb_array_remove_num(Sdb* s, const char *key, ut64 val, ut32 cas);
// helpers
SDB_API char *sdb_anext(char *str, char **next);
SDB_API const char *sdb_const_anext(const char *str);
SDB_API int sdb_alen(const char *str);
SDB_API size_t sdb_alen(const char *str);
SDB_API int sdb_alen_ignore_empty(const char *str);
SDB_API int sdb_array_size(Sdb* s, const char *key);
SDB_API int sdb_array_length(Sdb* s, const char *key);
Expand Down
4 changes: 2 additions & 2 deletions include/sdb/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ static inline int seek_set(int fd, off_t pos) {
return ((fd == -1) || (lseek (fd, (off_t) pos, SEEK_SET) == -1))? 0:1;
}

static inline void ut32_pack(char s[4], ut32 u) {
static inline void ut32_pack(unsigned char s[4], ut32 u) {
s[0] = u & 255;
u >>= 8;
s[1] = u & 255;
Expand All @@ -132,7 +132,7 @@ static inline void ut32_pack(char s[4], ut32 u) {
s[3] = u >> 8;
}

static inline void ut32_pack_big(char s[4], ut32 u) {
static inline void ut32_pack_big(unsigned char s[4], ut32 u) {
s[3] = u & 255;
u >>= 8;
s[2] = u & 255;
Expand Down
35 changes: 17 additions & 18 deletions src/array.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@

// TODO: missing num_{inc/dec} functions

static const char *Aindexof(const char *str, int idx) {
int len = 0;
static const char *Aindexof(const char *str, size_t idx) {
size_t len = 0;
const char *n, *p = str;
for (len = 0; ; len++) {
if (len == idx) {
Expand Down Expand Up @@ -62,8 +62,8 @@ static inline int int_cmp(const void *a, const void *b) {
return 0;
}

SDB_API ut64 sdb_array_get_num(Sdb *s, const char *key, int idx, ut32 *cas) {
int i;
SDB_API ut64 sdb_array_get_num(Sdb *s, const char *key, size_t idx, ut32 *cas) {
size_t i;
const char *n, *str = sdb_const_get (s, key, cas);
if (!str || !*str) {
return 0LL;
Expand All @@ -80,16 +80,16 @@ SDB_API ut64 sdb_array_get_num(Sdb *s, const char *key, int idx, ut32 *cas) {
return sdb_atoi (str);
}

SDB_API char *sdb_array_get(Sdb *s, const char *key, int idx, ut32 *cas) {
SDB_API char *sdb_array_get(Sdb *s, const char *key, size_t idx, ut32 *cas) {
const char *str = sdb_const_get (s, key, cas);
const char *p = str;
char *o, *n;
int i, len;
size_t i, len;
if (!str || !*str) {
return NULL;
}
if (idx < 0) {
int alen = sdb_alen (str);
size_t alen = sdb_alen (str);
if (-idx > alen) {
return NULL;
}
Expand Down Expand Up @@ -128,14 +128,14 @@ SDB_API char *sdb_array_get(Sdb *s, const char *key, int idx, ut32 *cas) {
return NULL;
}

SDB_API int sdb_array_insert_num(Sdb *s, const char *key, int idx, ut64 val, ut32 cas) {
SDB_API ut32 sdb_array_insert_num(Sdb *s, const char *key, int idx, ut64 val, ut32 cas) {
char valstr[SDB_NUM_BUFSZ];
sdb_itoa (val, 0, valstr, sizeof (valstr));
return sdb_array_insert (s, key, idx, valstr, cas);
}

// TODO: done, but there's room for improvement
SDB_API int sdb_array_insert(Sdb *s, const char *key, int idx, const char *val, ut32 cas) {
SDB_API ut32 sdb_array_insert(Sdb *s, const char *key, int idx, const char *val, ut32 cas) {
int lnstr, lstr;
size_t lval;
char *x, *ptr;
Expand Down Expand Up @@ -199,7 +199,7 @@ SDB_API int sdb_array_insert(Sdb *s, const char *key, int idx, const char *val,
return sdb_set_owned (s, key, x, cas);
}

SDB_API int sdb_array_set_num(Sdb *s, const char *key, int idx, ut64 val, ut32 cas) {
SDB_API ut32 sdb_array_set_num(Sdb *s, const char *key, int idx, ut64 val, ut32 cas) {
char valstr[SDB_NUM_BUFSZ];
sdb_itoa (val, 0, valstr, sizeof (valstr));
return sdb_array_set (s, key, idx, valstr, cas);
Expand Down Expand Up @@ -300,7 +300,7 @@ SDB_API int sdb_array_add_sorted_num(Sdb *s, const char *key, ut64 val, ut32 cas
return sdb_array_insert_num (s, key, n? i: -1, val, cas);
}

SDB_API int sdb_array_unset(Sdb *s, const char *key, int idx, ut32 cas) {
SDB_API ut32 sdb_array_unset(Sdb *s, const char *key, int idx, ut32 cas) {
return sdb_array_set (s, key, idx, "", cas);
}

Expand Down Expand Up @@ -338,17 +338,16 @@ SDB_API bool sdb_array_append_num(Sdb *s, const char *key, ut64 val, ut32 cas) {
return sdb_array_set_num (s, key, -1, val, cas);
}

SDB_API int sdb_array_set(Sdb *s, const char *key, int idx, const char *val,
ut32 cas) {
int lstr, lval, len;
SDB_API ut32 sdb_array_set(Sdb *s, const char *key, int idx, const char *val, ut32 cas) {
int lstr, lval;
const char *usr, *str = sdb_const_get_len (s, key, &lstr, 0);
char *ptr;

if (!str || !*str) {
return sdb_set (s, key, val, cas);
}
// XXX: should we cache sdb_alen value inside kv?
len = sdb_alen (str);
size_t len = sdb_alen (str);
lstr--;
if (idx < 0 || idx == len) { // append
return sdb_array_insert (s, key, -1, val, cas);
Expand Down Expand Up @@ -484,7 +483,7 @@ SDB_API int sdb_array_delete(Sdb *s, const char *key, int idx, ut32 cas) {
p[1] = 0;
}
sdb_set_owned (s, key, str, cas);
return 1;
return true;
}

// XXX Doesnt work if numbers are stored in different base
Expand Down Expand Up @@ -643,7 +642,7 @@ SDB_API char *sdb_array_pop_tail(Sdb *s, const char *key, ut32 *cas) {

SDB_API void sdb_array_sort(Sdb *s, const char *key, ut32 cas) {
char *nstr, *str, **strs;
int lstr, j, i;
size_t lstr, j, i;
str = sdb_get_len (s, key, &lstr, 0);
if (!str) {
return;
Expand Down Expand Up @@ -690,7 +689,7 @@ SDB_API void sdb_array_sort_num(Sdb *s, const char *key, ut32 cas) {
return;
}

qsort (nums + 1, (int)*nums, sizeof (ut64), int_cmp);
qsort (nums + 1, (size_t)*nums, sizeof (ut64), int_cmp);

nstr = (char *)sdb_gh_malloc (*nums + 1);
if (!nstr) {
Expand Down
17 changes: 8 additions & 9 deletions src/base64.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
#include "sdb/sdb.h"

#define SZ 1024
static const char cb64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static const char cd64[]="|$$$}rstuvwxyz{$$$$$$$>?@ABCDEFGHIJKLMNOPQRSTUVW$$$$$$XYZ[\\]^_`abcdefghijklmnopq";
static const ut8 cb64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static const ut8 cd64[]="|$$$}rstuvwxyz{$$$$$$$>?@ABCDEFGHIJKLMNOPQRSTUVW$$$$$$XYZ[\\]^_`abcdefghijklmnopq";

static void sdb_b64_encode(const ut8 in[3], char out[4], int len) {
static void sdb_b64_encode(const ut8 in[3], ut8 out[4], int len) {
if (len < 1) {
return;
}
Expand All @@ -16,7 +16,7 @@ static void sdb_b64_encode(const ut8 in[3], char out[4], int len) {
out[3] = (len > 2 ? cb64[ in[2] & 0x3f ] : '=');
}

static int sdb_b64_decode(const char in[4], ut8 out[3]) {
static int sdb_b64_decode(const ut8 in[4], ut8 out[3]) {
int len = 3;
ut8 i, v[4] = {0};
for (i = 0; i < 4; i++) {
Expand All @@ -39,7 +39,7 @@ static int sdb_b64_decode(const char in[4], ut8 out[3]) {
SDB_API void sdb_encode_raw(char *bout, const ut8 *bin, int len) {
int in, out;
for (in = out = 0; in < len; in += 3,out+=4) {
sdb_b64_encode (bin + in, bout + out,
sdb_b64_encode ((const ut8*)(bin + in), (ut8*)(bout + out),
(len - in) > 3? 3: (len - in));
}
bout[out] = 0;
Expand All @@ -48,7 +48,7 @@ SDB_API void sdb_encode_raw(char *bout, const ut8 *bin, int len) {
SDB_API int sdb_decode_raw(ut8 *bout, const char *bin, int len) {
int in, out, ret;
for (in = out = 0; in < len; in += 4) {
ret = sdb_b64_decode (bin + in, bout + out);
ret = sdb_b64_decode ((const ut8*)(bin + in), (ut8*)(bout + out));
if (ret < 1) {
break;
}
Expand Down Expand Up @@ -79,14 +79,13 @@ SDB_API char *sdb_encode(const ut8 *bin, int len) {
SDB_API ut8 *sdb_decode(const char *in, int *len) {
ut8 *out;
ut32 size;
int olen, ilen;
if (len) {
*len = 0;
}
if (!in) {
return NULL;
}
ilen = (int)strlen (in);
size_t ilen = strlen (in);
if (!ilen) {
return NULL;
}
Expand All @@ -98,7 +97,7 @@ SDB_API ut8 *sdb_decode(const char *in, int *len) {
if (!out) {
return NULL;
}
olen = sdb_decode_raw (out, in, ilen);
int olen = sdb_decode_raw (out, in, ilen);
if (!olen) {
sdb_gh_free (out);
return NULL;
Expand Down
Loading