mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
vc_screen: extract vcs_read_buf_header
The attribute header handling is terrible in vcs_read_buf. Separate it to a new function and simply do memmove (of up to 4 bytes) to the start of the con_buf -- if user seeked. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Link: https://lore.kernel.org/r/20200818085706.12163-15-jslaby@suse.cz Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
6a6b76cc44
commit
b1c32fcfad
@ -297,6 +297,22 @@ static void vcs_read_buf_noattr(const struct vc_data *vc, char *con_buf,
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned int vcs_read_buf_header(const struct vc_data *vc, char *con_buf,
|
||||
unsigned int pos, unsigned int count)
|
||||
{
|
||||
count = min(HEADER_SIZE - pos, count);
|
||||
|
||||
/* clamp header values if they don't fit */
|
||||
con_buf[0] = min(vc->vc_rows, 0xFFu);
|
||||
con_buf[1] = min(vc->vc_cols, 0xFFu);
|
||||
getconsxy(vc, con_buf + 2);
|
||||
|
||||
if (pos)
|
||||
memmove(con_buf, con_buf + pos, count);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static unsigned int vcs_read_buf(const struct vc_data *vc, char *con_buf,
|
||||
unsigned int pos, unsigned int count, bool viewed,
|
||||
unsigned int *skip)
|
||||
@ -306,22 +322,11 @@ static unsigned int vcs_read_buf(const struct vc_data *vc, char *con_buf,
|
||||
unsigned int filled = count;
|
||||
|
||||
if (pos < HEADER_SIZE) {
|
||||
/* clamp header values if they don't fit */
|
||||
con_buf[0] = min(vc->vc_rows, 0xFFu);
|
||||
con_buf[1] = min(vc->vc_cols, 0xFFu);
|
||||
getconsxy(vc, con_buf + 2);
|
||||
count -= vcs_read_buf_header(vc, con_buf, pos, count);
|
||||
|
||||
*skip += pos;
|
||||
count += pos;
|
||||
if (count > CON_BUF_SIZE) {
|
||||
count = CON_BUF_SIZE;
|
||||
filled = count - pos;
|
||||
}
|
||||
|
||||
/* Advance state pointers and move on. */
|
||||
count -= min(HEADER_SIZE, count);
|
||||
pos = HEADER_SIZE;
|
||||
con_buf += HEADER_SIZE;
|
||||
|
||||
/* If count >= 0, then pos is even... */
|
||||
} else if (pos & 1) {
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user