mirror of
https://github.com/radareorg/radare2.git
synced 2024-10-11 12:54:45 +00:00
a387e654e1
* Fix r_util for r_str stuff
72 lines
1.5 KiB
C
72 lines
1.5 KiB
C
/* radare - LGPL - Copyright 2009 pancake<nopcode.org> */
|
|
|
|
#include <r_util.h>
|
|
|
|
R_API void r_cache_init(struct r_cache_t *c)
|
|
{
|
|
INIT_LIST_HEAD(&c->items);
|
|
}
|
|
|
|
R_API struct r_cache_t *r_cache_new()
|
|
{
|
|
struct r_cache_t *a = MALLOC_STRUCT(struct r_cache_t);
|
|
r_cache_init(a);
|
|
return a;
|
|
}
|
|
|
|
R_API void r_cache_free(struct r_cache_t *a)
|
|
{
|
|
free(a);
|
|
}
|
|
|
|
R_API char *r_cache_get(struct r_cache_t *c, ut64 addr)
|
|
{
|
|
struct list_head *pos;
|
|
list_for_each_prev(pos, &c->items) {
|
|
struct r_cache_item_t *h = list_entry(pos, struct r_cache_item_t, list);
|
|
if (h->addr == addr)
|
|
return h->str;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
R_API int r_cache_set(struct r_cache_t *c, ut64 addr, char *str)
|
|
{
|
|
struct r_cache_item_t *a = MALLOC_STRUCT(struct r_cache_item_t);
|
|
a->addr = addr;
|
|
a->str = strdup(str);
|
|
list_add_tail(&(a->list), &(c->items));
|
|
return R_TRUE;
|
|
}
|
|
|
|
R_API int r_cache_validate(struct r_cache_t *c, ut64 start, ut64 end)
|
|
{
|
|
int ret = R_FALSE;
|
|
struct list_head *pos, *n;
|
|
|
|
list_for_each_safe(pos, n, &c->items) {
|
|
struct r_cache_item_t *h = list_entry(pos, struct r_cache_item_t, list);
|
|
if (h->addr <start || h->addr > end) {
|
|
free(h->str);
|
|
list_del(&h->list);
|
|
ret = R_TRUE;
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
R_API int r_cache_invalidate(struct r_cache_t *c, ut64 start, ut64 end)
|
|
{
|
|
int ret = R_FALSE;
|
|
struct list_head *pos, *n;
|
|
list_for_each_safe(pos, n, &c->items) {
|
|
struct r_cache_item_t *h = list_entry(pos, struct r_cache_item_t, list);
|
|
if (h->addr >=start && h->addr <= end) {
|
|
free(h->str);
|
|
list_del(&h->list);
|
|
ret = R_TRUE;
|
|
}
|
|
}
|
|
return ret;
|
|
}
|