vc_screen: extract vcs_read_buf_noattr
authorJiri Slaby <jslaby@suse.cz>
Tue, 18 Aug 2020 08:57:03 +0000 (10:57 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 18 Aug 2020 11:45:22 +0000 (13:45 +0200)
Now, move the code for no-attributes handling to a separate function.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Link: https://lore.kernel.org/r/20200818085706.12163-13-jslaby@suse.cz
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/vt/vc_screen.c

index 91d2e01..ad015cd 100644 (file)
@@ -277,6 +277,26 @@ static int vcs_read_buf_uni(struct vc_data *vc, char *con_buf,
        return 0;
 }
 
+static void vcs_read_buf_noattr(const struct vc_data *vc, char *con_buf,
+               unsigned int pos, unsigned int count, bool viewed)
+{
+       u16 *org;
+       unsigned int col, maxcol = vc->vc_cols;
+
+       org = screen_pos(vc, pos, viewed);
+       col = pos % maxcol;
+       pos += maxcol - col;
+
+       while (count-- > 0) {
+               *con_buf++ = (vcs_scr_readw(vc, org++) & 0xff);
+               if (++col == maxcol) {
+                       org = screen_pos(vc, pos, viewed);
+                       col = 0;
+                       pos += maxcol;
+               }
+       }
+}
+
 static ssize_t
 vcs_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
 {
@@ -359,17 +379,8 @@ vcs_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
                        if (ret)
                                break;
                } else if (!attr) {
-                       org = screen_pos(vc, p, viewed);
-                       col = p % maxcol;
-                       p += maxcol - col;
-                       while (this_round-- > 0) {
-                               *con_buf0++ = (vcs_scr_readw(vc, org++) & 0xff);
-                               if (++col == maxcol) {
-                                       org = screen_pos(vc, p, viewed);
-                                       col = 0;
-                                       p += maxcol;
-                               }
-                       }
+                       vcs_read_buf_noattr(vc, con_buf, pos, this_round,
+                                       viewed);
                } else {
                        if (p < HEADER_SIZE) {
                                /* clamp header values if they don't fit */