diff --git a/lib/event-types.h b/lib/event-types.h index 4ace248a2..2625c3698 100644 --- a/lib/event-types.h +++ b/lib/event-types.h @@ -33,8 +33,7 @@ typedef struct /* MCEVENT_GROUP_CORE:vfs_print_message */ typedef struct { - const char *msg; - va_list ap; + char *msg; } ev_vfs_print_message_t; /* MCEVENT_GROUP_CORE:clipboard_text_from_file */ diff --git a/lib/vfs/vfs.c b/lib/vfs/vfs.c index a1bd60343..5c9fc332c 100644 --- a/lib/vfs/vfs.c +++ b/lib/vfs/vfs.c @@ -528,12 +528,13 @@ void vfs_print_message (const char *msg, ...) { ev_vfs_print_message_t event_data; + va_list ap; - va_start (event_data.ap, msg); - event_data.msg = msg; + va_start (ap, msg); + event_data.msg = g_strdup_vprintf (msg, ap); + va_end (ap); mc_event_raise (MCEVENT_GROUP_CORE, "vfs_print_message", (gpointer) & event_data); - va_end (event_data.ap); } /* --------------------------------------------------------------------------------------------- */ diff --git a/src/filemanager/midnight.c b/src/filemanager/midnight.c index bf8873aaa..05f5ec880 100644 --- a/src/filemanager/midnight.c +++ b/src/filemanager/midnight.c @@ -529,41 +529,40 @@ static gboolean print_vfs_message (const gchar * event_group_name, const gchar * event_name, gpointer init_data, gpointer data) { - char str[128]; ev_vfs_print_message_t *event_data = (ev_vfs_print_message_t *) data; (void) event_group_name; (void) event_name; (void) init_data; - g_vsnprintf (str, sizeof (str), event_data->msg, event_data->ap); - if (mc_global.midnight_shutdown) - return TRUE; + goto ret; if (!mc_global.message_visible || the_hint == NULL || WIDGET (the_hint)->owner == NULL) { int col, row; if (!nice_rotating_dash || (ok_to_refresh <= 0)) - return TRUE; + goto ret; /* Preserve current cursor position */ tty_getyx (&row, &col); tty_gotoyx (0, 0); tty_setcolor (NORMAL_COLOR); - tty_print_string (str_fit_to_term (str, COLS - 1, J_LEFT)); + tty_print_string (str_fit_to_term (event_data->msg, COLS - 1, J_LEFT)); /* Restore cursor position */ tty_gotoyx (row, col); mc_refresh (); - return TRUE; + goto ret; } if (mc_global.message_visible) - set_hintbar (str); + set_hintbar (event_data->msg); + ret: + MC_PTR_FREE (event_data->msg); return TRUE; }