本文整理汇总了C++中sdb_get函数的典型用法代码示例。如果您正苦于以下问题:C++ sdb_get函数的具体用法?C++ sdb_get怎么用?C++ sdb_get使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了sdb_get函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: sdb_get
SDB_API char *sdb_array_pop(Sdb *s, const char *key, ut32 *cas) {
ut32 kas;
char *end, *str = sdb_get (s, key, &kas);
if (!str || !*str) {
free (str);
return NULL;
}
if (cas && *cas != kas)
*cas = kas;
#if PUSH_PREPENDS
end = strchr (str, SDB_RS);
if (end) {
*end = 0;
sdb_set (s, key, end+1, 0);
} else {
sdb_unset (s, key, 0);
}
return str;
#else
for (end = str+strlen (str)-1;
end>str && *end!=SDB_RS; end--);
if (*end==SDB_RS) *end++ = 0;
sdb_set_owned (s, key, str, 0);
// XXX: probably wrong
return strdup (end);
#endif
}
开发者ID:haoa193,项目名称:radare2,代码行数:27,代码来源:array.c
示例2: sdb_fmt
R_API char *r_type_link_at (Sdb *TDB, ut64 addr) {
char* res = NULL;
if (addr == UT64_MAX) {
return NULL;
}
char* query = sdb_fmt ("link.%08"PFMT64x, addr);
res = sdb_get (TDB, query, 0);
if (!res) { // resolve struct memb if possible for given addr
SdbKv *kv;
SdbListIter *sdb_iter;
SdbList *sdb_list = sdb_foreach_list (TDB, true);
ls_foreach (sdb_list, sdb_iter, kv) {
if (strncmp (kv->key, "link.", strlen ("link."))) {
continue;
}
const char *linkptr = sdb_fmt ("0x%s", kv->key + strlen ("link."));
ut64 baseaddr = r_num_math (NULL, linkptr);
int delta = (addr > baseaddr)? addr - baseaddr: -1;
res = r_type_get_struct_memb (TDB, kv->value, delta);
if (res) {
break;
}
}
ls_free (sdb_list);
}
开发者ID:skuater,项目名称:radare2,代码行数:26,代码来源:ctype.c
示例3: runline
static void runline (Sdb *s, const char *cmd) {
ut64 n;
char *p, *eq;
switch (*cmd) {
case '+': // inc
n = sdb_inc (s, cmd, 1);
save = 1;
printf ("%"ULLFMT"d\n", n);
break;
case '-': // dec
n = sdb_inc (s, cmd, -1);
save = 1;
printf ("%"ULLFMT"d\n", n);
break;
default:
if ((eq = strchr (cmd, '='))) {
save = 1;
*eq = 0;
sdb_set (s, cmd, eq+1);
} else if ((p = sdb_get (s, cmd))) {
printf ("%s\n", p);
free (p);
}
}
}
开发者ID:rchiossi,项目名称:radare2,代码行数:25,代码来源:main.c
示例4: sdb_array_delete
SDB_API int sdb_array_delete(Sdb *s, const char *key, int idx, ut32 cas) {
int i;
char *p, *n, *str = sdb_get (s, key, 0);
p = str;
if (!str || !*str) {
free (str);
return 0;
}
if (idx < 0) {
idx = sdb_alen (str);
if (idx) idx--;
}
for (i = 0; i < idx; i++) {
if ( (n = strchr (p, SDB_RS)) ) {
p = n + 1;
} else {
free (str);
return 0;
}
}
n = strchr (p, SDB_RS);
if (n) {
memmove (p, n + 1, strlen (n));
} else {
if (p != str)
p--; // remove tailing SDB_RS
*p = 0;
p[1] = 0;
}
sdb_set_owned (s, key, str, cas);
return 1;
}
开发者ID:PankajKataria,项目名称:radare2,代码行数:32,代码来源:array.c
示例5: r_anal_get_fcn_in
R_API RAnalVar *r_anal_var_get (RAnal *a, ut64 addr, char kind, int scope, int delta) {
RAnalVar *av;
struct VarType vt;
RAnalFunction *fcn = r_anal_get_fcn_in (a, addr, 0);
if (!fcn)
return NULL;
if (delta<0) {
kind = 'v';
delta = -delta;
}
char *vardef = sdb_get (DB,
sdb_fmt (0, "var.0x%"PFMT64x".%c.%d.%d",
fcn->addr, kind, scope, delta), 0);
if (!vardef)
return NULL;
sdb_fmt_tobin (vardef, SDB_VARTYPE_FMT, &vt);
av = R_NEW0 (RAnalVar);
av->addr = addr;
av->scope = scope;
av->delta = delta;
av->name = strdup (vt.name);
av->size = vt.size;
av->type = strdup (vt.type);
sdb_fmt_free (&vt, SDB_VARTYPE_FMT);
// TODO:
// get name from sdb
// get size from sdb
// get type from sdb
return av;
}
开发者ID:earada,项目名称:radare2,代码行数:32,代码来源:var.c
示例6: r_anal_xrefs_from
R_API int r_anal_xrefs_from (RAnal *anal, RList *list, const char *kind, const RAnalRefType type, ut64 addr) {
char *next, *s, *str, *ptr, key[256];
RAnalRef *ref = NULL;
if (addr == UT64_MAX) {
_type = type;
_list = list;
_kpfx = r_str_newf ("xref.%s", analref_toString (type));
sdb_foreach (DB, (SdbForeachCallback)xrefs_list_cb_any, anal);
free (_kpfx);
return true;
}
XREFKEY(key, sizeof (key), kind, type, addr);
str = sdb_get (DB, key, 0);
if (!str) {
return false;
}
for (next = ptr = str; next; ptr = next) {
s = sdb_anext (ptr, &next);
if (!(ref = r_anal_ref_new ())) {
return false;
}
ref->addr = r_num_get (NULL, s);
ref->at = addr;
ref->type = type;
r_list_append (list, ref);
}
free (str);
return true;
}
开发者ID:XVilka,项目名称:radare2,代码行数:29,代码来源:xrefs.c
示例7: typelist
static int typelist (void *p, const char *k, const char *v) {
r_cons_printf ("tk %s = %s\n", k, v);
#if 0
if (!strcmp (v, "func")) {
const char *rv = sdb_const_get (DB,
sdb_fmt (0, "func.%s.ret", k), 0);
r_cons_printf ("# %s %s(", rv, k);
for (i = 0; i < 16; i++) {
char *av = sdb_get (DB,
sdb_fmt (0, "func.%s.arg.%d", k, i), 0);
if (!av) break;
r_str_replace_char (av, ',', ' ');
r_cons_printf ("%s%s", i? ", ": "", av);
free (av);
}
r_cons_printf (");\n");
// signature in pf for asf
r_cons_printf ("asf %s=", k);
// formats
for (i = 0; i < 16; i++) {
const char *fmt;
char *comma, *av = sdb_get (DB,
sdb_fmt (0, "func.%s.arg.%d", k, i), 0);
if (!av) break;
comma = strchr (av, ',');
if (comma) *comma = 0;
fmt = sdb_const_get (DB, sdb_fmt (0, "type.%s", av), 0);
r_cons_printf ("%s", fmt);
if (comma) *comma = ',';
free (av);
}
// names
for (i = 0; i < 16; i++) {
char *comma, *av = sdb_get (DB,
sdb_fmt (0, "func.%s.arg.%d", k, i), 0);
if (!av) break;
comma = strchr (av, ',');
if (comma) *comma++ = 0;
r_cons_printf (" %s", comma);
free (av);
}
r_cons_newline ();
}
#endif
return 1;
}
开发者ID:HKingz,项目名称:radare2,代码行数:46,代码来源:cmd_type.c
示例8: sdb_json_geti
SDB_API int sdb_json_geti (Sdb *s, const char *k, const char *p, ut32 *cas) {
char *v = sdb_get (s, k, cas);
if (v) {
Rangstr rs = json_get (v, p);
return rangstr_int (&rs);
}
return 0;
}
开发者ID:djpohly,项目名称:radare2,代码行数:8,代码来源:json.c
示例9: sdb_json_geti
SDB_VISIBLE int sdb_json_geti (Sdb *s, const char *k, const char *p) {
char *v = sdb_get (s, k, 0); // XXX cas
if (v) {
Rangstr rs = json_get (v, p);
return rangstr_int (&rs);
}
return 0;
}
开发者ID:BatchDrake,项目名称:radare2,代码行数:8,代码来源:json.c
示例10: print_meta_fileline
static int print_meta_fileline(RCore *core, const char *file_line) {
char *meta_info = sdb_get (core->bin->cur->sdb_addrinfo, file_line, 0);
if (meta_info) {
r_cons_printf ("Meta info %s\n", meta_info);
} else {
r_cons_printf ("No meta info for %s found\n", file_line);
}
return 0;
}
开发者ID:13572293130,项目名称:radare2,代码行数:9,代码来源:cmd_meta.c
示例11: sdb_get
SDB_API char *sdb_json_get (Sdb *s, const char *k, const char *p, ut32 *cas) {
Rangstr rs;
char *u, *v = sdb_get (s, k, cas);
if (!v) return NULL;
rs = json_get (v, p);
u = rangstr_dup (&rs);
free (v);
return u;
}
开发者ID:djpohly,项目名称:radare2,代码行数:9,代码来源:json.c
示例12: getswi
R_API RSyscallItem *r_syscall_get(RSyscall *s, int num, int swi) {
char *ret, *ret2, foo[32];
RSyscallItem *si;
if (!s || !s->db)
return NULL;
swi = getswi (s->db, swi);
snprintf (foo, sizeof (foo), "0x%02x.%d", swi, num);
ret = sdb_get (s->db, foo, 0);
if (ret == NULL)
return NULL;
// TODO: optimize with sdb_const_get
ret2 = sdb_get (s->db, ret, 0);
if (ret2 == NULL)
return NULL;
si = r_syscall_item_new_from_string (ret, ret2);
free (ret);
free (ret2);
return si;
}
开发者ID:CodingFree,项目名称:radare2,代码行数:19,代码来源:syscall.c
示例13: r_meta_del
R_API int r_meta_del(RAnal *a, int type, ut64 addr, ut64 size, const char *str) {
char key[100], *dtr, *s, *p, *next;
#if 0
char key2[100];
#endif
const char *ptr;
int i;
if (size == UT64_MAX) {
// FULL CLEANUP
// XXX: this thing ignores the type
if (type == R_META_TYPE_ANY) {
sdb_reset (DB);
} else {
snprintf (key, sizeof (key)-1, "meta.%c.count", type);
int last = (ut64)sdb_num_get (DB, key, NULL)/K;
for (i=0; i<last; i++) {
snprintf (key, sizeof (key)-1, "meta.%c.%d", type, i);
dtr = sdb_get (DB, key, 0);
for (p = dtr; p; p = next) {
s = sdb_anext (p, &next);
snprintf (key, sizeof (key)-1,
"meta.%c.0x%"PFMT64x,
type, sdb_atoi (s));
eprintf ("--> %s\n", key);
sdb_unset (DB, key, 0);
if (!next) break;
}
free (dtr);
}
}
return false;
}
meta_inrange_del (a, addr, size);
snprintf (key, sizeof (key)-1, type == R_META_TYPE_COMMENT ?
"meta.C.0x%"PFMT64x : "meta.0x%"PFMT64x, addr);
ptr = sdb_const_get (DB, key, 0);
if (ptr) {
sdb_unset (DB, key, 0);
#if 0
// This code is wrong, but i guess it's necessary in case type is ANY
for (i=0; ptr[i]; i++) {
if (ptr[i] != SDB_RS) {
snprintf (key2, sizeof (key2)-1,
"meta.%c.0x%"PFMT64x, ptr[i], addr);
printf ("UNSET (%s)\n", key2);
sdb_unset (DB, key2, 0);
}
}
#endif
}
sdb_unset (DB, key, 0);
return false;
}
开发者ID:ghostbar,项目名称:radare2.deb,代码行数:53,代码来源:meta.c
示例14: r_str_newf
static RAnalVar *get_used_var(RAnal *anal, RAnalOp *op) {
char *inst_key = r_str_newf ("inst.0x%"PFMT64x".vars", op->addr);
char *var_def = sdb_get (anal->sdb_fcns, inst_key, 0);
struct VarUsedType vut;
RAnalVar *res = NULL;
if (sdb_fmt_tobin (var_def, SDB_VARUSED_FMT, &vut) == 4) {
res = r_anal_var_get (anal, vut.fcn_addr, vut.type[0], vut.scope, vut.delta);
sdb_fmt_free (&vut, SDB_VARUSED_FMT);
}
free (inst_key);
free (var_def);
return res;
}
开发者ID:montekki,项目名称:radare2,代码行数:13,代码来源:op.c
示例15: r_syscall_get_num
R_API int r_syscall_get_num(RSyscall *s, const char *str) {
char *o;
int i = -1;
// TODO: use sdb array api here
if (!s || !s->db)
return -1;
o = sdb_get (s->db, str, 0);
if (o && *o) {
r_str_split (o, ',');
i = r_num_get (NULL, r_str_word_get0 (o, 1));
}
free (o);
return i;
}
开发者ID:CodingFree,项目名称:radare2,代码行数:14,代码来源:syscall.c
示例16: sdb_json_set
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 l, idx, len[3];
char *str = NULL;
Rangstr rs;
ut32 c;
char *js = sdb_get (s, k, &c);
if (!js) return 0;
if (cas && c != cas) {
free (js);
return 0;
}
rs = json_get (js, p);
if (!rs.p) {
free (js);
return 0;
}
#define WLEN(x) (int)(size_t)(end[x]-beg[x])
beg[0] = js;
end[0] = rs.p + rs.f;
len[0] = WLEN (0);
beg[1] = v;
end[1] = v + strlen (v);
len[1] = WLEN (1);
beg[2] = rs.p + rs.t;
end[2] = js + strlen (js);
len[2] = WLEN (2);
// TODO: accelerate with small buffer in stack for small jsons
str = malloc (len[0]+len[1]+len[2]+1);
idx = len[0];
memcpy (str, beg[0], idx);
l = len[1];
memcpy (str+idx, beg[1], l);
idx += len[1];
l = len[2];
memcpy (str+idx, beg[2], l);
str[idx+l] = 0;
sdb_set (s, k, str, cas);
free (str);
free (js);
return 1;
}
开发者ID:djpohly,项目名称:radare2,代码行数:48,代码来源:json.c
示例17: sdb_get
SDB_API char *sdb_array_pop_tail(Sdb *s, const char *key, ut32 *cas) {
ut32 kas;
char *end, *str = sdb_get (s, key, &kas);
if (!str || !*str) {
free (str);
return NULL;
}
if (cas && *cas != kas)
*cas = kas;
for (end = str + strlen (str) - 1;
end > str && *end != SDB_RS; end--);
if (*end == SDB_RS) *end++ = 0;
sdb_set_owned (s, key, str, 0);
// XXX: probably wrong
return strdup (end);
}
开发者ID:AmesianX,项目名称:radare2,代码行数:16,代码来源:array.c
示例18: main
int main() {
#define DBFILE "___syncget.db"
const char *v;
Sdb *s = sdb_new0();
unlink (DBFILE);
sdb_set (s, "foo", "bar", 0);
eprintf ("-> %s\n", sdb_get (s, "foo", NULL));
sdb_file (s, DBFILE);
sdb_sync (s);
v = sdb_const_get (s, "foo", NULL);
if (v && !strcmp ("bar", v)) {
eprintf ("OK syncget\n");
return 0;
}
eprintf ("ERROR syncget: Keys not accessible after sync\n");
return 1;
}
开发者ID:condret,项目名称:sdb,代码行数:17,代码来源:syncget.c
示例19: get_line
// TODO: use proper dwarf api here.. or deprecate
static int get_line(RBinFile *arch, ut64 addr, char *file, int len, int *line) {
char *ret, *p, *offset_ptr, offset[64];
if (arch->sdb_addrinfo) {
offset_ptr = sdb_itoa (addr, offset, 16);
ret = sdb_get (arch->sdb_addrinfo, offset_ptr, 0);
if (!ret)
return R_FALSE;
p = strchr (ret, '|');
if (p) {
*p = '\0';
strncpy(file, ret, len);
*line = atoi(p + 1);
return R_TRUE;
}
}
return R_FALSE;
}
开发者ID:8500616886,项目名称:radare2,代码行数:19,代码来源:bin_dbginfo_elf.c
示例20: r_anal_xrefs_from
R_API int r_anal_xrefs_from (RAnal *anal, RList *list, const char *kind, const char *type, ut64 addr) {
char *s, *str, *ptr, key[256];
RAnalRef *ref = NULL;
int hasnext = 1;
snprintf (key, sizeof (key), "%s.%s.0x%"PFMT64x, kind, type, addr);
str = sdb_get (DB, key, 0);
if (!str) return R_FALSE;
for (ptr=str; hasnext; ptr = (char *)sdb_anext (s)) {
s = sdb_astring (ptr, &hasnext);
if (!(ref = r_anal_ref_new ()))
return R_FALSE;
ref->addr = addr;
ref->at = r_num_get (NULL, s);
ref->type = (!strcmp (type, "code"))?'C':'d'; // XXX
r_list_append (list, ref);
}
free (str);
return R_TRUE;
}
开发者ID:djpohly,项目名称:radare2,代码行数:19,代码来源:xrefs.c
注:本文中的sdb_get函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论