message: Revise maxlen argument in msg_puts_attr_len

`attr` argument is enough to forbid putting message in history. Also forbid 
strings with NUL before `len` just in case (it appears that this does not ever 
happen).
This commit is contained in:
ZyX 2016-09-10 22:32:14 +03:00
parent 3a3816c990
commit 40feac6efc

View File

@ -1562,13 +1562,17 @@ void msg_puts_attr(const char *const s, const int attr)
msg_puts_attr_len(s, -1, attr); msg_puts_attr_len(s, -1, attr);
} }
/// Like msg_puts_attr(), but with a maximum length "maxlen" (in bytes). /// Write a message with highlight attributes
/// When "maxlen" is -1 there is no maximum length. ///
/// When "maxlen" is >= 0 the message is not put in the history. /// @param[in] str NUL-terminated message string.
void msg_puts_attr_len(const char *str, const ptrdiff_t maxlen, int attr) /// @param[in] len Length of the string or -1.
/// @param[in] attr Highlight attribute.
void msg_puts_attr_len(const char *const str, const ptrdiff_t len, int attr)
FUNC_ATTR_NONNULL_ALL
{ {
assert(len < 0 || memchr(str, 0, len) == NULL);
// If redirection is on, also write to the redirection file. // If redirection is on, also write to the redirection file.
redir_write(str, maxlen); redir_write(str, len);
// Don't print anything when using ":silent cmd". // Don't print anything when using ":silent cmd".
if (msg_silent != 0) { if (msg_silent != 0) {
@ -1576,8 +1580,9 @@ void msg_puts_attr_len(const char *str, const ptrdiff_t maxlen, int attr)
} }
// if MSG_HIST flag set, add message to history // if MSG_HIST flag set, add message to history
if ((attr & MSG_HIST) && maxlen < 0) { if (attr & MSG_HIST) {
add_msg_hist(str, -1, attr); assert(len < 0);
add_msg_hist(str, (int)len, attr);
attr &= ~MSG_HIST; attr &= ~MSG_HIST;
} }
@ -1596,9 +1601,9 @@ void msg_puts_attr_len(const char *str, const ptrdiff_t maxlen, int attr)
// different, e.g. for Win32 console) or we just don't know where the // different, e.g. for Win32 console) or we just don't know where the
// cursor is. // cursor is.
if (msg_use_printf()) { if (msg_use_printf()) {
msg_puts_printf(str, maxlen); msg_puts_printf(str, len);
} else { } else {
msg_puts_display((const char_u *)str, maxlen, attr, false); msg_puts_display((const char_u *)str, len, attr, false);
} }
} }