radare2/libr/core/log.c
Jeffrey Crowell c145740030 replace r_cons_printf("%s\n",p) r_cons_println(p)
move from 10% of code in vfprintf to just 6% \o/ for simple tests of r2
-c "aaa" -q /bin/ls
2016-06-26 00:52:03 -04:00

72 lines
1.6 KiB
C

/* radare - LGPL - Copyright 2009-2013 - pancake */
#include <r_core.h>
R_API int r_core_log_list(RCore *core, int n, int nth, char fmt) {
int printed = 0;
int count = 0, i, idx, id = core->log->first;
RStrpool *sp = core->log->sp;
char *str = sp->str;
if (fmt=='j') r_cons_printf ("[");
for (i=idx=0; str && *str; i++, id++) {
if ((n&&n<=id)||!n) {
switch (fmt) {
case 'j':r_cons_printf ("%s[%d,\"%s\"]",
printed?",":"",id, str); break;
case 't':r_cons_println (str); break;
case '*':r_cons_printf ("\"l %s\"\n", str); break;
default: r_cons_printf ("%d %s\n", id, str); break;
}
printed++;
if (nth && printed >= nth) break;
}
str = r_strpool_next (sp, idx);
if (!str) break;
idx = r_strpool_get_index (sp, str);
count++;
}
if (fmt == 'j')
r_cons_printf ("]\n");
return count;
}
R_API RCoreLog *r_core_log_new () {
RCoreLog *log = R_NEW0 (RCoreLog);
if (!log) return NULL;
r_core_log_init (log);
return log;
}
R_API void r_core_log_init (RCoreLog *log) {
log->first = 1;
log->last = 1;
log->sp = r_strpool_new (0);
}
R_API void r_core_log_free(RCoreLog *log) {
r_strpool_free (log->sp);
free (log);
}
R_API void r_core_log_add(RCore *core, const char *msg) {
r_strpool_append (core->log->sp, msg);
core->log->last++;
}
R_API void r_core_log_del(RCore *core, int n) {
int idx;
if (n>0) {
if (n > core->log->last)
n = core->log->last;
idx = n-core->log->first;
if (idx<0) return;
core->log->first += idx+1;
/* s= */ r_strpool_get_i (core->log->sp, idx);
r_strpool_slice (core->log->sp, idx);
} else {
core->log->first = core->log->last;
r_strpool_empty (core->log->sp);
}
}