static int cmd_meta_add_fileline(Sdb *s, char *fileline, ut64 offset) { char aoffset[64]; char *aoffsetptr = sdb_itoa (offset, aoffset, 16); if (!aoffsetptr) { return -1; } if (!sdb_add (s, aoffsetptr, fileline, 0)) { sdb_set (s, aoffsetptr, fileline, 0); } if (!sdb_add (s, fileline, aoffsetptr, 0)) { sdb_set (s, fileline, aoffsetptr, 0); } return 0; }
static void createdb(const char *f) { char line[SDB_VALUESIZE]; struct cdb_make c; char *eq, *ftmp = malloc (strlen (f)+5); sprintf (ftmp, "%s.tmp", f); int fd = open (ftmp, O_RDWR|O_CREAT|O_TRUNC, 0644); if (fd == -1) { printf ("cannot create %s\n", ftmp); exit (1); } cdb_make_start (&c, fd); for (;;) { fgets (line, sizeof line, stdin); if (feof (stdin)) break; line[strlen (line)-1] = 0; if ((eq = strchr (line, '='))) { *eq = 0; sdb_add (&c, line, eq+1); } } cdb_make_finish (&c); //fsync (fd); close (fd); rename (ftmp, f); free (ftmp); }
R_API int r_anal_fcn_label_set (RAnal *anal, RAnalFunction *fcn, const char *name, ut64 addr) { if (!anal || !fcn) return R_FALSE; if (sdb_add (DB, ADDR(addr), name, 0)) { if (sdb_num_add (DB, LABEL(name), addr, 0)) { sdb_array_add (DB, LABELS, ADDRLABEL (addr, name), 0); return R_TRUE; } else { sdb_unset (DB, ADDR(addr), 0); } } return R_FALSE; }
// avr R_API int r_anal_var_access (RAnal *a, ut64 var_addr, char kind, int scope, int delta, int xs_type, ut64 xs_addr) { const char *var_global; const char *xs_type_str = xs_type? "writes": "reads"; // TODO: kind is not used if (scope>0) { // local char *var_local = sdb_fmt (0, "var.0x%"PFMT64x".%d.%d.%s", var_addr, scope, delta, xs_type_str); return sdb_array_add_num (DB, var_local, xs_addr, 0); } // global sdb_add (DB, sdb_fmt (0,"var.0x%"PFMT64x, var_addr), "a,", 0); var_global = sdb_fmt (0, "var.0x%"PFMT64x".%s", var_addr, xs_type_str); return sdb_array_add_num (DB, var_global, xs_addr, 0); }
// avr R_API int r_anal_var_access (RAnal *a, ut64 var_addr, char kind, int scope, int delta, int xs_type, ut64 xs_addr) { const char *xs_type_str = xs_type? "writes": "reads"; char key[128]; // TODO: kind is not used if (scope>0) { // local SETKEY ("var.0x%"PFMT64x, var_addr); //sdb_add (DB, key, var, 0); SETKEY ("var.0x%"PFMT64x".%d.%d.%s", var_addr, scope, delta, xs_type_str); } else { // global SETKEY ("var.0x%"PFMT64x, var_addr); sdb_add (DB, key, "a,", 0); SETKEY ("var.0x%"PFMT64x".%s", var_addr, xs_type_str); } return sdb_array_add_num (DB, key, xs_addr, 0); }