static bool addBytes(RAnal *a, const char *name, ut64 size, const ut8 *bytes, const ut8 *mask) { RSignItem *it = R_NEW0 (RSignItem); bool retval = true; if (r_mem_is_zero (mask, size)) { eprintf ("error: zero mask\n"); retval = false; goto exit_function; } it->name = r_str_new (name); it->space = a->zign_spaces.space_idx; it->bytes = R_NEW0 (RSignBytes); it->bytes->size = size; it->bytes->bytes = malloc (size); memcpy (it->bytes->bytes, bytes, size); it->bytes->mask = malloc (size); memcpy (it->bytes->mask, mask, size); retval = addItem (a, it); exit_function: r_sign_item_free (it); return retval; }
ls_foreach (b, iter, kv) { RSignItem *it = r_sign_item_new (); if (r_sign_deserialize (c2->anal, it, kv->base.key, kv->base.value)) { r_list_append (lb, it); } else { r_sign_item_free (it); } }
R_API bool r_sign_add_graph(RAnal *a, const char *name, RSignGraph graph) { RSignItem *it = R_NEW0 (RSignItem); bool retval = true; it->name = r_str_new (name); it->space = a->zign_spaces.space_idx; it->graph = R_NEW0 (RSignGraph); *it->graph = graph; retval = addItem (a, it); r_sign_item_free (it); return retval; }
R_API int r_core_zdiff(RCore *c, RCore *c2) { if (!c || !c2) { return false; } ////////// moove this into anal/sign SdbList *a = sdb_foreach_list (c->anal->sdb_zigns, false); SdbList *b = sdb_foreach_list (c2->anal->sdb_zigns, false); eprintf ("Diff %d %d\n", (int)ls_length (a), (int)ls_length (b)); SdbListIter *iter; SdbKv *kv; RList *la = r_list_new (); ls_foreach (a, iter, kv) { RSignItem *it = r_sign_item_new (); if (r_sign_deserialize (c->anal, it, kv->base.key, kv->base.value)) { r_list_append (la, it); } else { r_sign_item_free (it); } }