Пример #1
0
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;
}
Пример #2
0
static void terminate(int sig UNUSED) {
	if (!s) return;
	if (save && !sdb_sync (s)) {
		sdb_free (s);
		exit (1);
	}
	sdb_free (s);
	exit (0);
}
Пример #3
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);
	}
}
Пример #4
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);
	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;
}
Пример #5
0
R_API void r_syscall_free(RSyscall *s) {
	if (s) {
		sdb_free (s->db);
		free (s->os);
		free (s);
	}
}
Пример #6
0
Файл: hook.c Проект: XVilka/sdb
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;
}
Пример #7
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;
}
Пример #8
0
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;
}
Пример #9
0
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);
}
Пример #10
0
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);
}
Пример #11
0
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;
}
Пример #12
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;
}
Пример #13
0
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;
}
Пример #14
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;
	}
}
Пример #15
0
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;
}
Пример #16
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;
	}
}
Пример #17
0
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;
}
Пример #18
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;
}
Пример #19
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;
}
Пример #20
0
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);
	}
}
Пример #21
0
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;
}
Пример #22
0
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);
}
Пример #23
0
Файл: t.c Проект: XVilka/sdb
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;
}
Пример #24
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);
}
Пример #25
0
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;
}
Пример #26
0
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;
}
Пример #27
0
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;
}
Пример #28
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;
}
Пример #29
0
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;
}
Пример #30
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;
	}
}