static int dbdiff (const char *a, const char *b) { int n = 0; char *v; char k[SDB_MAX_KEY] = {0}; const char *v2; Sdb *A = sdb_new (NULL, a, 0); Sdb *B = sdb_new (NULL, b, 0); sdb_dump_begin (A); while (sdb_dump_dupnext (A, k, &v, NULL)) { v2 = sdb_const_get (B, k, 0); if (!v2) { printf ("%s=\n", k); n = 1; } } sdb_dump_begin (B); while (sdb_dump_dupnext (B, k, &v, NULL)) { if (!v || !*v) { continue; } v2 = sdb_const_get (A, k, 0); if (!v2 || strcmp (v, v2)) { printf ("%s=%s\n", k, v2); n = 1; } } sdb_free (A); sdb_free (B); free (v); return n; }
static void terminate(int sig UNUSED) { if (!s) return; if (save && !sdb_sync (s)) { sdb_free (s); exit (1); } sdb_free (s); exit (0); }
R_API void r_syscall_free(RSyscall *s) { if (s) { if (s->refs > 0) { s->refs--; return; } sdb_free (s->srdb); sdb_free (s->db); free (s->os); free (s); } }
R_API RDebug *r_debug_free(RDebug *dbg) { if (!dbg) return NULL; // TODO: free it correctly.. we must ensure this is an instance and not a reference.. r_bp_free (dbg->bp); //r_reg_free(&dbg->reg); r_list_free (dbg->snaps); sdb_free (dbg->sgnls); r_tree_free (dbg->tree); sdb_foreach (dbg->tracenodes, (SdbForeachCallback)free_tracenodes_entry, dbg); sdb_free (dbg->tracenodes); //r_debug_plugin_free(); r_debug_trace_free (dbg); free (dbg); return NULL; }
R_API void r_syscall_free(RSyscall *s) { if (s) { sdb_free (s->db); free (s->os); free (s); } }
int main() { Sdb *s = sdb_new (NULL, NULL, 0); sdb_hook (s, ptr, NULL); sdb_set (s, "Hello", "World", 0); sdb_free (s); return 0; }
static void syncronize(int sig UNUSED) { // TODO: must be in sdb_sync() or wat? Sdb *n; sdb_sync (s); n = sdb_new (s->path, s->name, s->lock); sdb_free (s); s = n; }
static void syncronize(int sig) { // TODO: must be in sdb_sync() or wat? Sdb *n; sdb_sync (s); n = sdb_new (s->dir, s->lock); sdb_free (s); s = n; }
R_API void r_anal_xrefs_load(RAnal *anal, const char *prjfile) { char *path, *db = r_str_dup_printf (R2_HOMEDIR"/rdb/%s.d/xrefs", prjfile); path = r_str_home (db); //eprintf ("Open (%s)\n", path); sdb_free (DB); DB = sdb_new (path, 0); sdb_aset (DB, "types", -1, "code"SDB_SS"data", 0); free (db); }
R_API void r_anal_xrefs_load(RAnal *anal, const char *prjfile) { char *path, *db = r_str_newf (R2_HOMEDIR"/projects/%s.d/xrefs", prjfile); path = r_str_home (db); //eprintf ("Open (%s)\n", path); sdb_free (DB); DB = sdb_new (path, "xrefs", 0); sdb_array_set (DB, "types", -1, "code,data", 0); free (db); }
int showcount (const char *db) { ut32 d; s = sdb_new (NULL, db, 0); if (sdb_stats (s, &d, NULL)) { printf ("%d\n", d); } // TODO: show version, timestamp information sdb_free (s); return 0; }
/** * Parse the response * * @param sdb the SimpleDB handle * @param curl the used Curl handle * @param post_size the post size (for statistics) * @param rec the buffer with the response * @param result the pointer to the result-set * @return the result */ int sdb_parse_result(struct SDB* sdb, CURL* curl, long post_size, struct sdb_buffer* rec, struct sdb_response** response) { // Statistics sdb_update_size_stats(sdb, curl, post_size, rec->size); // Handle internal errors if (strncmp(rec->buffer, "<html", 5) == 0) return SDB_E_AWS_INTERNAL_ERROR_2; #ifdef _DEBUG_PRINT_RESPONSE sdb->rec.buffer[rec->size] = '\0'; printf("\n%s\n\n", rec->buffer); #endif // Parse the response and check for errors if (*response == NULL) { *response = sdb_response_allocate(); } else { sdb_response_prepare_append(*response); } (*response)->internal->errout = sdb->errout; int __ret = sdb_response_parse(*response, rec->buffer, rec->size); if (SDB_FAILED(__ret)) { sdb_free(response); return __ret; } sdb->stat.box_usage += (*response)->box_usage; if ((*response)->error != 0) { __ret = (*response)->error; if (SDB_AWS_ERROR(__ret) != SDB_E_AWS_SERVICE_UNAVAILABLE) sdb_free(response); return SDB_AWS_ERROR(__ret); } return SDB_OK; }
static int sdb_grep_dump(const char *db, int fmt, bool grep, const char *expgrep) { char *v; char k[SDB_MAX_KEY] = { 0 }; const char *comma = ""; Sdb *s = sdb_new (NULL, db, 0); if (!s) { return 1; } sdb_config (s, options); sdb_dump_begin (s); if (fmt == MODE_JSON) { printf ("{"); } while (sdb_dump_dupnext (s, k, &v, NULL)) { if (grep && !strstr (k, expgrep) && !strstr (v, expgrep)) { continue; } switch (fmt) { case MODE_JSON: if (!strcmp (v, "true") || !strcmp (v, "false")) { printf ("%s\"%s\":%s", comma, k, v); } else if (sdb_isnum (v)) { printf ("%s\"%s\":%llu", comma, k, sdb_atoi (v)); } else if (*v == '{' || *v == '[') { printf ("%s\"%s\":%s", comma, k, v); } else { printf ("%s\"%s\":\"%s\"", comma, k, v); } comma = ","; break; case MODE_ZERO: printf ("%s=%s", k, v); fwrite ("", 1, 1, stdout); break; default: printf ("%s=%s\n", k, v); break; } free (v); } switch (fmt) { case MODE_ZERO: fflush (stdout); write (1, "", 1); break; case MODE_JSON: printf ("}\n"); break; } sdb_free (s); return 0; }
static void synchronize(int sig UNUSED) { // TODO: must be in sdb_sync() or wat? Sdb *n; sdb_sync (s); n = sdb_new (s->path, s->name, s->lock); if (n) { sdb_config (n, options); sdb_free (s); s = n; } }
static int fini(void *user) { IFDBG_BIN_JAVA eprintf("Calling plugin fini = %d.\n", DB? 1: 0); if (!DB) { IFDBG_BIN_JAVA eprintf("plugin DB already uninited.\n"); } else { IFDBG_BIN_JAVA eprintf("plugin DB beeing uninited.\n"); sdb_free (DB); DB = NULL; } return 0; }
static void syncronize(int sig UNUSED) { // TODO: must be in sdb_sync() or wat? Sdb *n; sdb_sync (s); n = sdb_new (s->path, s->name, s->lock); if (n) { sdb_config (n, SDB_OPTION_FS | SDB_OPTION_NOSTAMP); sdb_free (s); s = n; } }
static int sdb_dump (const char *db, int fmt) { char *k, *v; const char *comma = ""; Sdb *s = sdb_new (NULL, db, 0); if (!s) return 1; sdb_config (s, SDB_OPTION_FS | SDB_OPTION_NOSTAMP); sdb_dump_begin (s); if (fmt==MODE_JSON) printf ("{"); while (sdb_dump_dupnext (s, &k, &v, NULL)) { switch (fmt) { case MODE_JSON: if (!strcmp (v, "true") || !strcmp (v, "false")) { printf ("%s\"%s\":%s", comma, k, v); } else if (sdb_isnum (v)) { printf ("%s\"%s\":%llu", comma, k, sdb_atoi (v)); } else if (*v=='{' || *v=='[') { printf ("%s\"%s\":%s", comma, k, v); } else printf ("%s\"%s\":\"%s\"", comma, k, v); comma = ","; break; case MODE_ZERO: printf ("%s=%s", k, v); break; default: printf ("%s=%s\n", k, v); break; } #if 0 if (qf && strchr (v, SDB_RS)) { for (p=v; *p; p++) if (*p==SDB_RS) *p = ','; printf ("[]%s=%s\n", k, v); } else { printf ("%s=%s\n", k, v); } #endif free (k); free (v); } switch (fmt) { case MODE_ZERO: fflush (stdout); write (1, "", 1); break; case MODE_JSON: printf ("}\n"); break; } sdb_free (s); return 0; }
static int sdb_dump (const char *db) { char k[SDB_KSZ]; char v[SDB_VSZ]; Sdb *s = sdb_new (db, 0); if (!s) return 1; sdb_dump_begin (s); while (sdb_dump_next (s, k, v)) printf ("%s=%s\n", k, v); sdb_free (s); s = NULL; return 0; }
R_API RDebug *r_debug_free(RDebug *dbg) { if (!dbg) return NULL; // TODO: free it correctly.. we must ensure this is an instance and not a reference.. //r_bp_free(&dbg->bp); //r_reg_free(&dbg->reg); sdb_free (dbg->sgnls); //r_debug_plugin_free(); r_debug_trace_free (dbg); r_graph_free (dbg->graph); free (dbg); return NULL; }
R_API void r_bin_filter_symbols(RBinFile *bf, RList *list) { Sdb *db = sdb_new0 (); if (db) { RListIter *iter; RBinSymbol *sym; r_list_foreach (list, iter, sym) { if (sym && sym->name && *sym->name) { r_bin_filter_sym (bf, db, sym->vaddr, sym); } } sdb_free (db); } }
int main() { const char *v; Sdb *s = sdb_new0 (); sdb_set (s, "key", "foo", 0); v = sdb_const_get(s, "key", 0); printf ("%p %p (assert != 0)\n", s, v); if (!v) return 1; sdb_drain (s, sdb_new0()); v = sdb_const_get(s, "key", 0); printf ("%p %p (assert == 0)\n", s, v); sdb_free (s); return (v==0)?0:1; }
void dosync (int count) { char rkey[128]; RProfile p; int i; Sdb *db = sdb_new (NULL, NULL, 0); r_prof_start (&p); for (i=0; i<count; i++) { sprintf (rkey, "%d", i); sdb_set (db, rkey, rkey, 0); } r_prof_end (&p); sdb_free (db); printf (__FILE__" %lf %d\n", p.result, i); }
int main () { int i; #define k "g" #define p "glossary.title" Sdb *sdb = sdb_new (NULL, NULL, 0); sdb_set (sdb, "g", "{\"glossary\":{\"title\":\"example glossary\",\"page\":1,\"GlossDiv\":{\"title\":\"First gloss title\",\"GlossList\":{\"GlossEntry\":{\"ID\":\"SGML\",\"SortAs\":\"SGML\",\"GlossTerm\":\"Standard Generalized Markup Language\",\"Acronym\":\"SGML\",\"Abbrev\":\"ISO 8879:1986\",\"GlossDef\":{\"para\":\"A meta-markup language, used to create markup languages such as DocBook.\",\"GlossSeeAlso\":[\"OK\",\"GML\",\"XML\"]},\"GlossSee\":\"markup\"}}}}}" , 0); for (i=0; i< 199999; i++) { free (sdb_json_get (sdb, k, p, NULL)); } sdb_free (sdb); return 0; }
void r_bin_mdmp_free(struct r_bin_mdmp_obj *obj) { if (!obj) return; r_bin_mdmp_destroy_lists(obj); obj->system_info = NULL; obj->hdr = NULL; if (obj->kv) { sdb_free (obj->kv); obj->kv = NULL; } if (obj->b) { r_buf_free (obj->b); obj->b = NULL; } free (obj); }
R_API RPrint* r_print_free(RPrint *p) { if (!p) { return NULL; } sdb_free (p->formats); p->formats = NULL; if (p->zoom) { free (p->zoom->buf); free (p->zoom); p->zoom = NULL; } R_FREE (p->lines_cache); R_FREE (p->row_offsets); free (p); return NULL; }
R_API int r_syscall_setup(RSyscall *s, const char *arch, const char *os, int bits) { char file[256]; if (os == NULL) os = R_SYS_OS; if (arch == NULL) arch = R_SYS_ARCH; if (!strcmp (os, "any")) // ignored return R_TRUE; if (!strcmp (arch, "mips")) s->regs = fastcall_mips; else if (!strcmp (arch,"sh")) s->regs = fastcall_sh; else if (!strcmp (arch, "arm")) s->regs = fastcall_arm; else if (!strcmp (arch, "x86")) { switch (bits) { case 8: s->regs = fastcall_x86_8; case 32: s->regs = fastcall_x86_32; case 64: s->regs = fastcall_x86_64; } } #define SYSCALLPATH R2_LIBDIR"/radare2/"R2_VERSION"/syscall" snprintf (file, sizeof (file), "%s/%s-%s-%d.sdb", SYSCALLPATH, os, arch, bits); if (!r_file_exists (file)) { //eprintf ("r_syscall_setup: Cannot find '%s'\n", file); return R_FALSE; } // TODO: use sdb_reset (s->db); /// XXX: memoization doesnt seems to work because RSyscall is recreated instead of configured :( //eprintf ("DBG098: syscall->db must be reindexed for k\n"); sdb_free (s->db); s->db = sdb_new (0, file, 0); if (s->fd) fclose (s->fd); s->fd = NULL; return R_TRUE; }
static int sdb_dump (const char *db, int json) { char *k, *v; const char *comma = ""; Sdb *s = sdb_new (NULL, db, 0); if (!s) return 1; sdb_config (s, SDB_OPTION_FS | SDB_OPTION_NOSTAMP); sdb_dump_begin (s); if (json) printf ("{"); while (sdb_dump_dupnext (s, &k, &v)) { if (json) { if (!strcmp (v, "true") || !strcmp (v, "false")) { printf ("%s\"%s\":%s", comma, k, v); } else if (sdb_isnum (v)) { printf ("%s\"%s\":%llu", comma, k, sdb_atoi (v)); } else if (*v=='{' || *v=='[') { printf ("%s\"%s\":%s", comma, k, v); } else printf ("%s\"%s\":\"%s\"", comma, k, v); comma = ","; } else { printf ("%s=%s\n", k, v); } #if 0 if (qf && strchr (v, SDB_RS)) { for (p=v; *p; p++) if (*p==SDB_RS) *p = ','; printf ("[]%s=%s\n", k, v); } else { printf ("%s=%s\n", k, v); } #endif free (k); free (v); } if (json) printf ("}\n"); sdb_free (s); return 0; }
bool test_sdb_array_add_remove(void) { Sdb *db = sdb_new (NULL, NULL, false); sdb_array_add (db, "foo", "foo", 0); sdb_array_add (db, "foo", "bar", 0); sdb_array_add (db, "foo", "cow", 0); mu_assert_streq (sdb_const_get (db, "foo", 0), "foo,bar,cow", "Not all items found"); sdb_array_remove (db, "foo", "bar", 0); mu_assert_streq (sdb_const_get (db, "foo", 0), "foo,cow", "bar was not deleted"); sdb_array_remove (db, "foo", "nothing", 0); mu_assert_streq (sdb_const_get (db, "foo", 0), "foo,cow", "nothing should be deleted"); sdb_array_remove (db, "foo", "cow", 0); sdb_array_remove (db, "foo", "foo", 0); mu_assert_eq ((int)(size_t)sdb_const_get (db, "foo", 0), (int)(size_t)NULL, "all elements should be deleted"); sdb_free (db); mu_end; }
int main(int argc, char **argv) { int i, N; if (argc>1) N = atoi (argv[1]); else N = 1000; Sdb *s = sdb_new (NULL, NULL, 0); for (i=0;i<N;i++) sdb_array_push (s, "key", "foo", 0); #if 1 if (N != sdb_alen (sdb_const_get (s, "key", 0))) { printf ("FAIL IN VERY PUSH\n"); return 1; } eprintf ("--%d\n", (int)strlen (sdb_const_get (s, "key", 0))); #endif for (i=0;i<N;i++) free (sdb_array_pop (s, "key", 0)); sdb_free (s); return 0; }
R_API void r_anal_esil_stats(RAnalEsil *esil, int enable) { if (enable) { if (esil->stats) sdb_reset (esil->stats); else esil->stats = sdb_new0(); // reset sdb->stats esil->cb.hook_reg_read = hook_reg_read; esil->cb.hook_mem_read = hook_mem_read; esil->cb.hook_mem_write = hook_mem_write; esil->cb.hook_reg_write = hook_reg_write; esil->cb.hook_flag_read = hook_flag_read; esil->cb.hook_command = hook_command; } else { esil->cb.hook_mem_write = NULL; esil->cb.hook_flag_read = NULL; esil->cb.hook_command = NULL; sdb_free (esil->stats); esil->stats = NULL; } }