Update sdb

This commit is contained in:
pancake 2015-04-22 05:32:43 +02:00
parent e137183f1d
commit a572531e48
5 changed files with 38 additions and 16 deletions

View File

@ -36,7 +36,6 @@ typedef int (*SdbListComparator)(void *a, void *b);
SDB_API SdbList *ls_new(void);
SDB_API SdbListIter *ls_append(SdbList *list, void *data);
SDB_API SdbListIter *ls_prepend(SdbList *list, void *data);
SDB_API int ls_length(SdbList *list);
//SDB_API void ls_add_sorted(SdbList *list, void *data, SdbListComparator cmp);
SDB_API void ls_sort(SdbList *list, SdbListComparator cmp);

View File

@ -84,13 +84,13 @@ SDB_API int sdb_json_unset (Sdb *s, const char *k, const char *p, ut32 cas) {
SDB_API int sdb_json_set (Sdb *s, const char *k, const char *p, const char *v, ut32 cas) {
const char *beg[3];
const char *end[3];
int jslen, l, idx, len[3];
int l, idx, len[3], jslen = 0;
char *b, *str = NULL;
const char *js;
Rangstr rs;
ut32 c;
if (!s || !k)
if (!s || !k || !v)
return 0;
js = sdb_const_get_len (s, k, &jslen, &c);
if (!js) {
@ -115,7 +115,8 @@ SDB_API int sdb_json_set (Sdb *s, const char *k, const char *p, const char *v, u
}
rs = json_get (js, p);
if (!rs.p) {
char *b = malloc (jslen+strlen(k)+strlen (v)+32);
int b_len = jslen + strlen (k) + strlen (v) + 32;
char *b = malloc (b_len);
if (b) {
int curlen, is_str = isstring (v);
const char *q = is_str?"\"":"";

View File

@ -1,4 +1,4 @@
/* sdb - LGPLv3 - Copyright 2007-2015 - pancake */
/* sdb - LGPLv3 - Copyright 2007-2014 - pancake */
#include <string.h>
#include "ls.h"
@ -15,16 +15,16 @@ SDB_API SdbList *ls_new() {
}
SDB_API void ls_sort(SdbList *list, SdbListComparator cmp) {
SdbListIter *it, *it2;
for (it = list->head; it && it->data; it = it->n) {
for (it2 = it->n; it2 && it2->data; it2 = it2->n) {
if (cmp (it->data, it2->data)>0) {
void *t = it->data;
it->data = it2->data;
it2->data = t;
}
}
}
SdbListIter *it, *it2;
for (it = list->head; it && it->data; it = it->n) {
for (it2 = it->n; it2 && it2->data; it2 = it2->n) {
if (cmp (it->data, it2->data)>0) {
void *t = it->data;
it->data = it2->data;
it2->data = t;
}
}
}
}
SDB_API void ls_delete (SdbList *list, SdbListIter *iter) {
@ -99,3 +99,24 @@ SDB_API SdbListIter *ls_prepend(SdbList *list, void *data) {
list->length++;
return it;
}
SDB_API void *ls_pop(SdbList *list) {
void *data = NULL;
SdbListIter *iter;
if (list){
if (list->tail) {
iter = list->tail;
if (list->head == list->tail) {
list->head = list->tail = NULL;
} else {
list->tail = iter->p;
list->tail->n = NULL;
}
data = iter->data;
free (iter);
list->length--;
}
return data;
}
return NULL;
}

View File

@ -36,7 +36,6 @@ typedef int (*SdbListComparator)(void *a, void *b);
SDB_API SdbList *ls_new(void);
SDB_API SdbListIter *ls_append(SdbList *list, void *data);
SDB_API SdbListIter *ls_prepend(SdbList *list, void *data);
SDB_API int ls_length(SdbList *list);
//SDB_API void ls_add_sorted(SdbList *list, void *data, SdbListComparator cmp);
SDB_API void ls_sort(SdbList *list, SdbListComparator cmp);

View File

@ -153,6 +153,7 @@ SDB_API const char *sdb_const_get_len (Sdb* s, const char *key, int *vlen, ut32
ut64 now = 0LL;
SdbKv *kv;
if (cas) *cas = 0;
if (vlen) *vlen = 0;
if (!s||!key) return NULL;
// TODO: optimize, iterate once
keylen = strlen (key)+1;
@ -205,6 +206,7 @@ SDB_API char *sdb_get_len (Sdb* s, const char *key, int *vlen, ut32 *cas) {
if (!s || !key) return NULL;
keylen = strlen (key)+1;
hash = sdb_hash (key);//keylen-1);
if (vlen) *vlen = 0;
/* search in memory */
kv = (SdbKv*)ht_lookup (s->ht, hash);