From 6ce60b9cca55c908de3747f1224b2e8aabb557bf Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Mon, 1 Apr 2019 15:41:05 +0200 Subject: [PATCH] vi: use vsnprintf to format status line This is the last use of "vsprintf" in busybox: function old new delta status_line_bold 72 77 +5 status_line 40 45 +5 vsprintf 23 - -23 ------------------------------------------------------------------------------ (add/remove: 0/2 grow/shrink: 2/0 up/down: 10/-23) Total: -13 bytes Signed-off-by: Denys Vlasenko --- editors/vi.c | 49 ++++++++++++++++++++++--------------------------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/editors/vi.c b/editors/vi.c index a0a2b7a82..5c585a390 100644 --- a/editors/vi.c +++ b/editors/vi.c @@ -482,16 +482,13 @@ struct globals { IF_FEATURE_VI_SEARCH(last_search_pattern = xzalloc(2);) \ } while (0) - -static void show_status_line(void); // put a message on the bottom line -static void status_line_bold(const char *, ...); - #if ENABLE_FEATURE_VI_CRASHME -static void crash_dummy(); -static void crash_test(); static int crashme = 0; #endif +static void show_status_line(void); // put a message on the bottom line +static void status_line_bold(const char *, ...); + static void show_help(void) { puts("These features are available:" @@ -1218,35 +1215,34 @@ static void show_status_line(void) } //----- format the status buffer, the bottom line of screen ------ -// format status buffer, with STANDOUT mode -static void status_line_bold(const char *format, ...) +static void status_line(const char *format, ...) { va_list args; va_start(args, format); - strcpy(status_buffer, ESC_BOLD_TEXT); - vsprintf(status_buffer + sizeof(ESC_BOLD_TEXT)-1, format, args); - strcat(status_buffer, ESC_NORM_TEXT); + vsnprintf(status_buffer, STATUS_BUFFER_LEN, format, args); va_end(args); - have_status_msg = 1 + sizeof(ESC_BOLD_TEXT) + sizeof(ESC_NORM_TEXT) - 2; -} - -static void status_line_bold_errno(const char *fn) -{ - status_line_bold("'%s' "STRERROR_FMT, fn STRERROR_ERRNO); + have_status_msg = 1; } - -// format status buffer -static void status_line(const char *format, ...) +static void status_line_bold(const char *format, ...) { va_list args; va_start(args, format); - vsprintf(status_buffer, format, args); + strcpy(status_buffer, ESC_BOLD_TEXT); + vsnprintf(status_buffer + (sizeof(ESC_BOLD_TEXT)-1), + STATUS_BUFFER_LEN - sizeof(ESC_BOLD_TEXT) - sizeof(ESC_NORM_TEXT), + format, args + ); + strcat(status_buffer, ESC_NORM_TEXT); va_end(args); - have_status_msg = 1; + have_status_msg = 1 + (sizeof(ESC_BOLD_TEXT)-1) + (sizeof(ESC_NORM_TEXT)-1); +} +static void status_line_bold_errno(const char *fn) +{ + status_line_bold("'%s' "STRERROR_FMT, fn STRERROR_ERRNO); } // copy s to buf, convert unprintable @@ -1290,15 +1286,14 @@ static void print_literal(char *buf, const char *s) break; } } - static void not_implemented(const char *s) { char buf[MAX_INPUT_LEN]; - print_literal(buf, s); - status_line_bold("\'%s\' is not implemented", buf); + status_line_bold("'%s' is not implemented", buf); } +//----- Block insert/delete, undo ops -------------------------- #if ENABLE_FEATURE_VI_YANKMARK static char *text_yank(char *p, char *q, int dest) // copy text into a register { @@ -4318,10 +4313,10 @@ int vi_main(int argc, char **argv) #if ENABLE_FEATURE_VI_UNDO /* undo_stack_tail = NULL; - already is */ -#if ENABLE_FEATURE_VI_UNDO_QUEUE +# if ENABLE_FEATURE_VI_UNDO_QUEUE undo_queue_state = UNDO_EMPTY; /* undo_q = 0; - already is */ -#endif +# endif #endif #if ENABLE_FEATURE_VI_CRASHME -- 2.25.1