tty/vt: consolemap: make conv_uni_to_pc() more readable
authorJiri Slaby <jslaby@suse.cz>
Tue, 7 Jun 2022 10:49:41 +0000 (12:49 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 Jun 2022 11:37:03 +0000 (13:37 +0200)
1) Fetch *conp->vc_uni_pagedir_loc first and do the NULL check on the local
   variable.
2) Decouple the large "if" into few smaller "if"s.
3) Remove a \n from the definition line.

This makes the code more readable.

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

index 8abf114..a9b497f 100644 (file)
@@ -849,8 +849,7 @@ int conv_uni_to_8bit(u32 uni)
        return -1;
 }
 
-int
-conv_uni_to_pc(struct vc_data *conp, long ucs) 
+int conv_uni_to_pc(struct vc_data *conp, long ucs)
 {
        struct uni_pagedict *dict;
        u16 **dir, *row, glyph;
@@ -869,17 +868,24 @@ conv_uni_to_pc(struct vc_data *conp, long ucs)
         */
        else if ((ucs & ~UNI_DIRECT_MASK) == UNI_DIRECT_BASE)
                return ucs & UNI_DIRECT_MASK;
-  
-       if (!*conp->vc_uni_pagedir_loc)
-               return -3;
 
        dict = *conp->vc_uni_pagedir_loc;
-       if ((dir = dict->uni_pgdir[UNI_DIR(ucs)]) &&
-           (row = dir[UNI_ROW(ucs)]) &&
-           (glyph = row[UNI_GLYPH(ucs)]) < MAX_GLYPH)
-               return glyph;
+       if (!dict)
+               return -3;
+
+       dir = dict->uni_pgdir[UNI_DIR(ucs)];
+       if (!dir)
+               return -4;
+
+       row = dir[UNI_ROW(ucs)];
+       if (!row)
+               return -4;
+
+       glyph = row[UNI_GLYPH(ucs)];
+       if (glyph >= MAX_GLYPH)
+               return -4;
 
-       return -4;              /* not found */
+       return glyph;
 }
 
 /*