mirror of
https://github.com/radareorg/radare2.git
synced 2025-03-04 12:27:40 +00:00
Update SDB from git
This commit is contained in:
parent
1322c13fe3
commit
cc643a2ab8
@ -60,7 +60,7 @@ SDB_API bool ht_delete(SdbHt* ht, const char* key);
|
||||
SDB_API void* ht_find(SdbHt* ht, const char* key, bool* found);
|
||||
SDB_API void ht_foreach(SdbHt *ht, HtForeachCallback cb, void *user);
|
||||
|
||||
HtKv* ht_find_kv(SdbHt* ht, const char* key, bool* found);
|
||||
bool ht_insert_kv(SdbHt *ht, HtKv *kv, bool update);
|
||||
SDB_API HtKv* ht_find_kv(SdbHt* ht, const char* key, bool* found);
|
||||
SDB_API bool ht_insert_kv(SdbHt *ht, HtKv *kv, bool update);
|
||||
|
||||
#endif // __HT_H
|
||||
|
@ -12,49 +12,34 @@
|
||||
#if __SDB_WINDOWS__
|
||||
|
||||
#if UNICODE
|
||||
static wchar_t* r_str_mb_to_wc_l(const char *buf, int len) {
|
||||
wchar_t *res_buf = NULL;
|
||||
size_t sz;
|
||||
bool fail = true;
|
||||
|
||||
if (!buf || len <= 0) {
|
||||
|
||||
static wchar_t *r_utf8_to_utf16_l (const char *cstring, int len) {
|
||||
if (!cstring || !len || len < -1) {
|
||||
return NULL;
|
||||
}
|
||||
sz = mbstowcs (NULL, buf, len);
|
||||
if (sz == (size_t)-1) {
|
||||
goto err_r_str_mb_to_wc;
|
||||
wchar_t *rutf16 = NULL;
|
||||
int wcsize;
|
||||
|
||||
if ((wcsize = MultiByteToWideChar (CP_UTF8, 0, cstring, len, NULL, 0))) {
|
||||
wcsize += 1;
|
||||
if ((rutf16 = (wchar_t *) calloc (wcsize, sizeof (wchar_t)))) {
|
||||
MultiByteToWideChar (CP_UTF8, 0, cstring, len, rutf16, wcsize);
|
||||
if (len != -1) {
|
||||
rutf16[wcsize - 1] = L'\0';
|
||||
}
|
||||
}
|
||||
}
|
||||
res_buf = (wchar_t *)calloc (1, (sz + 1) * sizeof (wchar_t));
|
||||
if (!res_buf) {
|
||||
goto err_r_str_mb_to_wc;
|
||||
}
|
||||
sz = mbstowcs (res_buf, buf, sz + 1);
|
||||
if (sz == (size_t)-1) {
|
||||
goto err_r_str_mb_to_wc;
|
||||
}
|
||||
fail = false;
|
||||
err_r_str_mb_to_wc:
|
||||
if (fail) {
|
||||
free (res_buf);
|
||||
res_buf = NULL;
|
||||
}
|
||||
return res_buf;
|
||||
return rutf16;
|
||||
}
|
||||
|
||||
static wchar_t* r_str_mb_to_wc(const char *buf) {
|
||||
if (!buf) {
|
||||
return NULL;
|
||||
}
|
||||
return r_str_mb_to_wc_l (buf, strlen (buf));
|
||||
}
|
||||
#define r_sys_conv_utf8_to_utf16(buf) r_utf8_to_utf16_l ((buf), -1)
|
||||
|
||||
#define r_sys_conv_utf8_to_utf16(buf) r_str_mb_to_wc (buf)
|
||||
|
||||
static bool r_sys_mkdir(char *path) {
|
||||
static bool r_sys_mkdir(const char *path) {
|
||||
LPTSTR path_ = r_sys_conv_utf8_to_utf16 (path);
|
||||
bool ret = CreateDirectory (path_, NULL);
|
||||
|
||||
free (path);
|
||||
free (path_);
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
@ -78,7 +63,7 @@ static inline int r_sys_mkdirp(char *dir) {
|
||||
if (*ptr == slash) {
|
||||
ptr++;
|
||||
}
|
||||
#if __WINDOWS__
|
||||
#if __SDB_WINDOWS__
|
||||
char *p = strstr (ptr, ":\\");
|
||||
if (p) {
|
||||
ptr = p + 2;
|
||||
@ -120,7 +105,17 @@ SDB_API bool sdb_disk_create(Sdb* s) {
|
||||
if (s->fdump != -1) {
|
||||
close (s->fdump);
|
||||
}
|
||||
#if __SDB_WINDOWS__ && UNICODE
|
||||
wchar_t *wstr = r_sys_conv_utf8_to_utf16 (str);
|
||||
if (wstr) {
|
||||
s->fdump = _wopen (wstr, O_BINARY | O_RDWR | O_CREAT | O_TRUNC, SDB_MODE);
|
||||
free (wstr);
|
||||
} else {
|
||||
s->fdump = -1;
|
||||
}
|
||||
#else
|
||||
s->fdump = open (str, O_BINARY | O_RDWR | O_CREAT | O_TRUNC, SDB_MODE);
|
||||
#endif
|
||||
if (s->fdump == -1) {
|
||||
eprintf ("sdb: Cannot open '%s' for writing.\n", str);
|
||||
free (str);
|
||||
|
@ -232,7 +232,7 @@ static HtKv *reserve_kv(SdbHt *ht, const char *key, const int key_len, bool upda
|
||||
return kv_at (ht, bt, bt->count - 1);
|
||||
}
|
||||
|
||||
bool ht_insert_kv(SdbHt *ht, HtKv *kv, bool update) {
|
||||
SDB_API bool ht_insert_kv(SdbHt *ht, HtKv *kv, bool update) {
|
||||
HtKv *kv_dst = reserve_kv (ht, kv->key, kv->key_len, update);
|
||||
if (!kv_dst) {
|
||||
return false;
|
||||
|
@ -60,7 +60,7 @@ SDB_API bool ht_delete(SdbHt* ht, const char* key);
|
||||
SDB_API void* ht_find(SdbHt* ht, const char* key, bool* found);
|
||||
SDB_API void ht_foreach(SdbHt *ht, HtForeachCallback cb, void *user);
|
||||
|
||||
HtKv* ht_find_kv(SdbHt* ht, const char* key, bool* found);
|
||||
bool ht_insert_kv(SdbHt *ht, HtKv *kv, bool update);
|
||||
SDB_API HtKv* ht_find_kv(SdbHt* ht, const char* key, bool* found);
|
||||
SDB_API bool ht_insert_kv(SdbHt *ht, HtKv *kv, bool update);
|
||||
|
||||
#endif // __HT_H
|
||||
|
@ -18,7 +18,7 @@ static bool sdb_ht_internal_insert(SdbHt* ht, const char* key,
|
||||
if (!ht || !key || !value) {
|
||||
return false;
|
||||
}
|
||||
SdbKv kvp = { 0 };
|
||||
SdbKv kvp = {{ 0 }};
|
||||
kvp.base.key = strdup ((void *)key);
|
||||
if (!kvp.base.key) {
|
||||
goto err;
|
||||
|
Loading…
x
Reference in New Issue
Block a user