tty/vt: consolemap: make con_get_unimap() more readable
authorJiri Slaby <jslaby@suse.cz>
Tue, 7 Jun 2022 10:49:24 +0000 (12:49 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 Jun 2022 11:37:02 +0000 (13:37 +0200)
The indentation is completely broken in con_get_unimap(). Reorder the
code using "if (!cond) continue;"s so that the code makes sense. Switch
also the "p" assignment and add a short path using goto. This makes the
code readable again.

Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Link: https://lore.kernel.org/r/20220607104946.18710-14-jslaby@suse.cz
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/vt/consolemap.c

index 3730a1c..84c8043 100644 (file)
@@ -768,7 +768,8 @@ EXPORT_SYMBOL(con_copy_unimap);
  *     Read the console unicode data for this console. Called from the ioctl
  *     handlers.
  */
-int con_get_unimap(struct vc_data *vc, ushort ct, ushort __user *uct, struct unipair __user *list)
+int con_get_unimap(struct vc_data *vc, ushort ct, ushort __user *uct,
+               struct unipair __user *list)
 {
        int i, j, k, ret = 0;
        ushort ect;
@@ -783,27 +784,32 @@ int con_get_unimap(struct vc_data *vc, ushort ct, ushort __user *uct, struct uni
        console_lock();
 
        ect = 0;
-       if (*vc->vc_uni_pagedir_loc) {
-               p = *vc->vc_uni_pagedir_loc;
-               for (i = 0; i < UNI_DIRS; i++) {
+       p = *vc->vc_uni_pagedir_loc;
+       if (!p)
+               goto unlock;
+
+       for (i = 0; i < UNI_DIRS; i++) {
                p1 = p->uni_pgdir[i];
-               if (p1)
-                       for (j = 0; j < UNI_DIR_ROWS; j++) {
+               if (!p1)
+                       continue;
+
+               for (j = 0; j < UNI_DIR_ROWS; j++) {
                        p2 = *(p1++);
-                       if (p2)
-                               for (k = 0; k < UNI_ROW_GLYPHS; k++, p2++) {
-                                       if (*p2 >= MAX_GLYPH)
-                                               continue;
-                                       if (ect < ct) {
-                                               unilist[ect].unicode =
-                                                       UNI(i, j, k);
-                                               unilist[ect].fontpos = *p2;
-                                       }
-                                       ect++;
+                       if (!p2)
+                               continue;
+
+                       for (k = 0; k < UNI_ROW_GLYPHS; k++, p2++) {
+                               if (*p2 >= MAX_GLYPH)
+                                       continue;
+                               if (ect < ct) {
+                                       unilist[ect].unicode = UNI(i, j, k);
+                                       unilist[ect].fontpos = *p2;
                                }
+                               ect++;
                        }
                }
        }
+unlock:
        console_unlock();
        if (copy_to_user(list, unilist, min(ect, ct) * sizeof(*unilist)))
                ret = -EFAULT;