rz_cons_clear_line: Change param type to FILE * (#4974)

This commit is contained in:
Khairul Azhar Kasmiran 2025-03-08 17:16:43 +08:00 committed by GitHub
parent 2fad3444f2
commit feccb9bf85
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 27 additions and 22 deletions

View file

@ -759,10 +759,15 @@ RZ_API void rz_cons_fill_line(void) {
}
}
RZ_API void rz_cons_clear_line(int std_err) {
/**
* \brief Print on `stream` the ANSI escape sequence to clear the current line.
* \param stream Either stdout or stderr. Only 2 possible stream values are accepted.
*/
RZ_API void rz_cons_clear_line(FILE *stream) {
rz_return_if_fail(stream == stdout || stream == stderr);
#if __WINDOWS__
if (I.vtmode != RZ_VIRT_TERM_MODE_DISABLE) {
fprintf(std_err ? stderr : stdout, "%s", RZ_CONS_CLEAR_LINE);
fprintf(stream, "%s", RZ_CONS_CLEAR_LINE);
} else {
char white[1024];
memset(&white, ' ', sizeof(white));
@ -773,12 +778,12 @@ RZ_API void rz_cons_clear_line(int std_err) {
} else {
white[sizeof(white) - 1] = 0; // HACK
}
fprintf(std_err ? stderr : stdout, "\r%s\r", white);
fprintf(stream, "\r%s\r", white);
}
#else
fprintf(std_err ? stderr : stdout, "%s", RZ_CONS_CLEAR_LINE);
fprintf(stream, "%s", RZ_CONS_CLEAR_LINE);
#endif
fflush(std_err ? stderr : stdout);
fflush(stream);
}
RZ_API void rz_cons_clear00(void) {

View file

@ -1191,7 +1191,7 @@ static void __print_prompt(RzLine *line) {
rz_cons_gotoxy(0, cons->rows);
rz_cons_flush();
}
rz_cons_clear_line(0);
rz_cons_clear_line(stdout);
if (cons->context->color_mode > 0) {
printf("\r%s%s", Color_RESET, line->prompt);
} else {
@ -1610,7 +1610,7 @@ RZ_API const char *rz_line_readline_cb(RZ_NONNULL RzLine *line, RzLineReadCallba
bool o_do_setup_match = line->history.do_setup_match;
line->history.do_setup_match = true;
if (line->echo) {
rz_cons_clear_line(0);
rz_cons_clear_line(stdout);
}
switch (*buf) {

View file

@ -3992,7 +3992,7 @@ static void goto_asmqjmps(RzAGraph *g, RzCore *core) {
rz_cons_get_size(&rows);
rz_cons_gotoxy(0, rows);
rz_cons_clear_line(0);
rz_cons_clear_line(stdout);
rz_cons_print(Color_RESET);
rz_cons_print(h);
rz_cons_flush();

View file

@ -29,7 +29,7 @@ enum {
#define MAX_SCAN_SIZE 0x7ffffff
static void loganalysis(ut64 from, ut64 to, int depth) {
rz_cons_clear_line(1);
rz_cons_clear_line(stderr);
eprintf("0x%08" PFMT64x " > 0x%08" PFMT64x " %d\r", from, to, depth);
}
@ -955,7 +955,7 @@ static int __core_analysis_fcn(RzCore *core, ut64 at, ut64 from, int reftype, in
}
// TODO: ensure next address is function after padding (nop or trap or wat)
// XXX noisy for test cases because we want to clear the stderr
rz_cons_clear_line(1);
rz_cons_clear_line(stderr);
loganalysis(fcn->addr, at, 10000 - depth);
next = next_append(next, &nexti, at);
}
@ -2666,7 +2666,7 @@ RZ_API RzList /*<RzAnalysisCycleHook *>*/ *rz_core_analysis_cycles(RzCore *core,
rz_cons_break_push(NULL, NULL);
while (cf && !rz_cons_is_breaked()) {
if ((op = rz_core_analysis_op(core, addr, RZ_ANALYSIS_OP_MASK_BASIC)) && (op->cycles) && (ccl > 0)) {
rz_cons_clear_line(1);
rz_cons_clear_line(stderr);
eprintf("%i -- ", ccl);
addr += op->size;
switch (op->type) {
@ -5996,7 +5996,7 @@ RZ_API void rz_core_perform_auto_analysis(RZ_NONNULL RzCore *core, RzCoreAnalysi
if (rz_core_is_debugging(core)) {
debugger = core->dbg->cur ? rz_str_dup(core->dbg->cur->name) : rz_str_dup("esil");
}
rz_cons_clear_line(1);
rz_cons_clear_line(stderr);
// if type was simple only then don't proceed further
if (type == RZ_CORE_ANALYSIS_SIMPLE || rz_cons_is_breaked()) {

View file

@ -5426,7 +5426,7 @@ RZ_IPI RzCmdStatus rz_analyze_cycles_handler(RzCore *core, int argc, const char
rz_config_set_i(core->config, "asm.xrefs", false);
hooks = rz_core_analysis_cycles(core, ccl); // analysisyse
rz_cons_clear_line(1);
rz_cons_clear_line(stderr);
rz_list_foreach (hooks, iter, hook) {
instr_tmp = rz_core_disassemble_instr(core, hook->addr, 1);
rz_cons_printf("After %4i cycles:\t%s", (ccl - hook->cycles), instr_tmp);

View file

@ -139,7 +139,7 @@ static int rz_core_magic_at(RzCore *core, const char *file, ut64 addr, int depth
pj_ks(pj, "info", p);
pj_end(pj);
}
rz_cons_clear_line(1);
rz_cons_clear_line(stderr);
// eprintf ("0x%08"PFMT64x" 0x%08"PFMT64x" %d %s\n", addr+adelta, addr+adelta, magicdepth-depth, p);
// walking children
for (q = p; *q; q++) {

View file

@ -622,7 +622,7 @@ static void do_esil_search(RzCore *core, struct search_parameters *param, const
rz_config_set_i(core->config, "search.kwidx", search->n_kws); // TODO remove
rz_cons_break_pop();
}
rz_cons_clear_line(1);
rz_cons_clear_line(stderr);
if (param->outmode == RZ_MODE_JSON) {
pj_end(param->pj);
}
@ -1287,7 +1287,7 @@ static void do_string_search(RzCore *core, RzInterval search_itv, struct search_
}
}
print_search_progress(at, to1, search->nhits, param);
rz_cons_clear_line(1);
rz_cons_clear_line(stderr);
core->num->value = search->nhits;
if (param->outmode != RZ_MODE_JSON) {
eprintf("hits: %" PFMT64d "\n", search->nhits - saved_nhits);
@ -2012,7 +2012,7 @@ reread:
}
addr += ret - 1;
}
rz_cons_clear_line(1);
rz_cons_clear_line(stderr);
rz_cons_break_pop();
}
if (param.outmode == RZ_MODE_JSON) {
@ -2021,7 +2021,7 @@ reread:
} else {
RZ_LOG_ERROR("core: Usage: /m [file]\n");
}
rz_cons_clear_line(1);
rz_cons_clear_line(stderr);
break;
case 'p': // "/p"
{
@ -2425,7 +2425,7 @@ static RzCmdStatus cmd_core_handle_search_hits(RzCore *core, RzCmdStateOutput *s
if (!rz_str_is_false(rz_config_get(core->config, "search.show_progress"))) {
// clear last progress notification, if any
rz_cons_clear_line(1);
rz_cons_clear_line(stderr);
}
RzListIter *it = NULL;

View file

@ -939,7 +939,7 @@ RZ_API void rz_cons_highlight(const char *word);
RZ_API void rz_cons_clear(void);
RZ_API void rz_cons_clear_buffer(void);
RZ_API void rz_cons_clear00(void);
RZ_API void rz_cons_clear_line(int err);
RZ_API void rz_cons_clear_line(FILE *stream);
RZ_API void rz_cons_fill_line(void);
RZ_API void rz_cons_gotoxy(int x, int y);
RZ_API int rz_cons_get_cur_line(void);

View file

@ -1866,7 +1866,7 @@ static void diff_graph_as_json(RzCore *core_a, RzAnalysisFunction *fcn_a, RzCore
}
static bool diff_progess_status(const size_t n_left, const size_t n_matches, void *user) {
rz_cons_clear_line(true);
rz_cons_clear_line(stderr);
fprintf(stderr, "rz-diff: to check %" PFMTSZu " | matches %" PFMTSZu "\r", n_left, n_matches);
return !rz_cons_is_breaked();
}
@ -2665,7 +2665,7 @@ static bool rz_diff_draw_tui(DiffHexView *hview, bool show_help) {
static char *visual_prompt(DiffHexView *hview, const char *prompt) {
char buf[1024];
rz_cons_gotoxy(0, hview->screen.height);
rz_cons_clear_line(0);
rz_cons_clear_line(stdout);
rz_cons_printf("%s%s ", hview->colors.reset, prompt);
rz_line_set_prompt(rz_cons_singleton()->line, ":> ");
rz_cons_flush();